无法通过Ingress访问Kubernetes Dashboard问题求助
Kubernetes Dashboard 外部Ingress访问报错"Client sent an HTTP request to an HTTPS server"排查思路
针对你遇到的外部访问报错问题,结合Ingress配置和集群内外访问差异,给出以下排查方向:
1. 确认Ingress Controller的SSL Passthrough功能已启用
你在Ingress中使用了nginx.ingress.kubernetes.io/ssl-passthrough: "true"注解,但该功能需要Ingress Controller启动时显式开启对应的参数:
- 执行命令检查Ingress Controller Pod的启动参数:
kubectl describe pod <nginx-ingress-controller-pod-name> -n <ingress-controller-namespace> - 查看
Args字段是否包含--enable-ssl-passthrough,如果没有,需修改Controller的Deployment/DaemonSet配置,添加该启动参数后重启Pod。
2. 清理冲突的Ingress注解
当前配置中同时存在backend-protocol: "HTTPS"和ssl-passthrough: "true",两者存在冲突:
- SSL Passthrough模式下,Ingress Controller会直接将SSL流量透传给后端服务,不会终止或解析HTTPS请求,此时
backend-protocol注解完全无效,反而可能导致配置逻辑混乱。 - 建议删除
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"注解,重新应用Ingress配置:kubectl apply -f <your-ingress-yaml-file>
3. 验证TLS证书与Ingress状态
- 执行命令查看Ingress的状态:
确认kubectl get ingress kubernetes-dashboard-nginx-ingress -n kubernetes-dashboardADDRESS字段已正确关联Ingress Controller的入口地址,TLS字段显示对应域名。 - 检查默认Wildcard证书是否存在于
kubernetes-dashboard命名空间,或Ingress Controller是否配置了全局默认证书:
若依赖全局证书,需确认Ingress Controller的配置中已指定全局证书的Secret名称。kubectl get secrets -n kubernetes-dashboard
4. 排查外部流量的端口映射
外部访问出现该错误,大概率是流量实际走了HTTP端口(80)但你用https://发起请求,需验证:
- 检查集群入口的端口映射:确认外部访问的443端口已正确转发到Ingress Controller的443端口(而非80端口)。
- 用
curl -v https://k8s-dashboard.<myDomain>/查看详细请求日志,确认连接的端口是否为443,以及服务器返回的响应细节。 - 测试端口连通性:
若不通,排查防火墙规则、云厂商负载均衡配置、NodePort的端口暴露策略。telnet k8s-dashboard.<myDomain> 443
5. 隔离测试验证Ingress基础功能
为排除Dashboard服务本身的问题,可临时创建一个简单的HTTPS测试服务,复用相同的Ingress配置逻辑:
- 创建一个带自签证书的Nginx服务(部署在测试命名空间)
- 配置相同的SSL Passthrough Ingress规则
- 测试外部访问是否正常,若正常则问题出在Dashboard的服务配置或证书信任问题。
内容的提问来源于stack exchange,提问作者GBT55
相关产品推荐
相关产品推荐

