Kubernetes集群ingress-nginx访问报错:客户端向HTTPS服务器发送HTTP请求
问题根因与解决步骤
你遇到的Client sent an HTTP request to an HTTPS server错误,核心原因是HTTP请求被转发到了仅支持HTTPS的服务端口,结合你的部署配置,按以下步骤排查修复即可:
1. 修改前端负载均衡转发规则
你的ingress-nginx-controller为NodePort类型,从资源输出可以看到端口映射关系:
- HTTP服务对应NodePort:
32666 - HTTPS服务对应NodePort:
31657
你当前集群外的负载均衡配置错误,将80端口的HTTP请求转发到了集群节点的31657(HTTPS端口),才会触发该报错。需要调整负载均衡转发规则:
- 负载均衡80端口 → 转发到所有集群节点的
32666端口(ingress HTTP服务端口) - 后续配置HTTPS时,再将负载均衡443端口 → 转发到所有集群节点的
31657端口(ingress HTTPS服务端口)
2. 验证ingress侧配置有效性
修改负载均衡配置前,可以先跳过负载均衡,直接测试集群内ingress HTTP服务是否正常,确认后端配置无问题:
curl -v -H "Host: web.app" http://<任意集群节点IP>:32666
如果该请求能正常返回web-app的响应内容,说明你的Deployment、Service、Ingress配置都没有问题,仅需要调整负载均衡规则即可。
额外说明
你当前的Ingress配置中已经添加了nginx.ingress.kubernetes.io/ssl-redirect: "false"注解,已经关闭了HTTP自动跳转HTTPS的逻辑,不需要额外调整ingress相关配置。后续需要配置SSL认证时,仅需要给Ingress资源补充tls字段关联证书,再调整ssl-redirect注解为true即可。
内容的提问来源于stack exchange,提问作者andreas.teich
相关产品推荐
相关产品推荐

