You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Dashboard通过NGINX Ingress访问报错求助

解决Kubernetes Dashboard通过NGINX Ingress暴露时的TLS握手错误

你遇到的问题核心在于NGINX Ingress Controller没有正确启用SSL Passthrough功能,导致它尝试用HTTP协议连接后端Dashboard的HTTPS端口(8443),进而触发TLS握手错误和上游HTTP头无效的异常。下面是具体的排查和解决步骤:

1. 确保NGINX Ingress Controller启用SSL Passthrough

SSL Passthrough默认是关闭的,必须在Controller启动时显式添加--enable-ssl-passthrough参数。如果是用Deployment部署的Controller,需要修改Deployment的启动命令:

containers:
- name: nginx-ingress-controller
  args:
    - /nginx-ingress-controller
    - --enable-ssl-passthrough  # 新增这一行开启SSL透传
    - --default-backend-service=kube-system/default-http-backend
    - --configmap=kube-system/nginx-configuration
    # 保留其他原有参数

修改完成后重启Deployment使配置生效:

kubectl rollout restart deployment nginx-ingress-controller -n kube-system

2. 修正Ingress注解与路径配置

你的Ingress配置使用了部分过时或不匹配的注解,建议调整为NGINX Ingress官方推荐的配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"  # 替换为官方标准注解
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"  # 明确后端使用HTTPS协议
    kubernetes.io/ingress.allow-http: "false"
  name: dashboard-ingress
  namespace: kube-system
spec:
  tls:
  - hosts:
    - serverdnsname
    secretName: kubernetes-dashboard-certs
  rules:
  - host: serverdnsname
    http:
      paths:
      - path: /
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 443

关键调整说明:

  • 替换旧注解ingress.kubernetes.io/ssl-passthrough为nginx.ingress.kubernetes.io/ssl-passthrough,这是NGINX Ingress Controller的标准注解
  • 添加backend-protocol注解,强制Controller使用HTTPS与后端Dashboard通信,避免HTTP转发导致的协议不匹配
  • 将路径改为/,因为Kubernetes Dashboard的UI资源均基于根路径,使用/dashboard会导致静态资源加载失败(即使TLS问题解决,UI也会异常)

3. 验证配置并测试

  1. 应用修改后的Ingress配置:
kubectl apply -f your-ingress-config.yaml -n kube-system
  1. 等待Ingress Controller重新加载配置后,访问https://serverdnsname:32536(注意去掉原路径/dashboard)
  2. 检查Controller日志,如果不再出现upstream sent no valid HTTP/1.0 header和TLS握手错误,说明问题已解决。

额外排查点

  • 确认kubernetes-dashboard-certs Secret中包含有效的tls.crt和tls.key,且证书域名与serverdnsname完全匹配
  • 检查Kubernetes Dashboard Service是否正确映射到Pod的8443端口(你的Service显示443:31925/TCP,后端映射是正常的)
  • 如果仍有问题,可临时尝试让Ingress终止TLS(后端改用HTTP),但需要修改Dashboard Deployment启用HTTP端口,此方式不推荐生产环境使用

内容的提问来源于stack exchange,提问作者Evgeniy Alterman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:35:39