Kubernetes Dashboard搭配Nginx Ingress报错“Client sent http request over HTTPS Server”求助
核心问题分析
你遇到的问题本质是Ingress Controller未正确使用HTTPS协议转发请求到Dashboard后端,且你使用的是NGINX官方维护的Ingress Controller(nginx-stable chart),而非Kubernetes社区的ingress-nginx项目,导致注解用错;同时配置中的冲突项也让注解无法生效。
具体修正步骤
1. 替换错误的Ingress注解
NGINX官方Ingress Controller不识别nginx.ingress.kubernetes.io/backend-protocol注解,需使用其专属注解nginx.org/backend-protocol: "HTTPS";同时移除ssl-passthrough注解(你需要Ingress终止SSL后反向代理到后端HTTPS,而非透传TLS流量)。
2. 修正Ingress配置中的错误项
- 移除
secretName: admin-user(该字段在此处无效,admin-user是认证用Secret,而非Ingress证书Secret) - 确保后端端口配置使用Dashboard服务的端口名称
https(可通过kubectl get svc kubernetes-dashboard -n kubernetes-dashboard确认)
修正后的Dashboard Helm Ingress配置:
ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx nginx.org/backend-protocol: "HTTPS" # 替换为NGINX官方注解 nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/rewrite-target: / # 移除ssl-passthrough和secure-backends,避免冲突 hosts: - k8s-dashboard.hpsc.prod.mycompany.com ingressClassName: nginx backend: service: name: kubernetes-dashboard port: name: https # 使用端口名称更可靠 pathType: ImplementationSpecific paths: - / host: k8s-dashboard.hpsc.prod.mycompany.com tls: - hosts: - k8s-dashboard.hpsc.prod.mycompany.com secretName: nginx-custom-certificate-secret
3. 修正NGINX Ingress Controller的Helm配置
你的values.yaml中enableTLSPassthrough层级错误,需移至controller根节点下;由于我们不需要透传TLS,可直接将其设为false避免冲突:
controller: defaultTLS: secret: nginx-stable/nginx-custom-certificate-secret enableTLSPassthrough: false # 修正层级并关闭透传
4. 重新部署配置
# 重新部署Dashboard helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --namespace kubernetes-dashboard --version 6.0.8 -f your-updated-dashboard-values.yaml # 若修改了Ingress Controller配置,重新部署 helm upgrade nginx-stable nginx-stable/nginx-ingress --namespace nginx-stable --version 0.16.1 -f your-updated-ingress-values.yaml
5. 验证配置生效
进入Ingress Controller Pod,查看/etc/nginx/conf.d/下的生成配置,确认proxy_pass指向为https://kubernetes-dashboard.kubernetes-dashboard.svc而非http。
注解无效的关键原因
你混淆了两个不同的Ingress Controller项目:nginx.ingress.kubernetes.io/backend-protocol是Kubernetes社区维护的ingress-nginx项目注解,而你使用的是NGINX官方维护的Ingress Controller,二者注解不通用,这是最容易踩的坑。
内容的提问来源于stack exchange,提问作者neo3matrix

