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. 验证配置并测试
- 应用修改后的Ingress配置:
kubectl apply -f your-ingress-config.yaml -n kube-system
- 等待Ingress Controller重新加载配置后,访问
https://serverdnsname:32536(注意去掉原路径/dashboard) - 检查Controller日志,如果不再出现
upstream sent no valid HTTP/1.0 header和TLS握手错误,说明问题已解决。
额外排查点
- 确认
kubernetes-dashboard-certsSecret中包含有效的tls.crt和tls.key,且证书域名与serverdnsname完全匹配 - 检查Kubernetes Dashboard Service是否正确映射到Pod的8443端口(你的Service显示443:31925/TCP,后端映射是正常的)
- 如果仍有问题,可临时尝试让Ingress终止TLS(后端改用HTTP),但需要修改Dashboard Deployment启用HTTP端口,此方式不推荐生产环境使用
内容的提问来源于stack exchange,提问作者Evgeniy Alterman
相关产品推荐
相关产品推荐

