Azure AKS中Nginx Ingress后端服务无法通过HTTPS访问求助
排查HTTPS访问失败的问题
针对你的AKS集群Ingress配置及服务环境,从以下几个方向排查定位问题:
1. SSL Passthrough 配置逻辑冲突
你启用了nginx.ingress.kubernetes.io/ssl-passthrough: "true"注解,该配置会将客户端的HTTPS流量直接透传给后端服务,Ingress层面不会做SSL终止操作。但你的Ingress规则里后端指向的是服务的80端口(HTTP),透传的HTTPS流量到后端HTTP端口后,服务无法解析HTTPS请求,必然导致访问失败。
调整方案:
- 若保留SSL Passthrough:将后端服务端口改为OrderService监听HTTPS的端口(比如443),确保后端服务确实在该端口提供HTTPS服务。
- 若无需SSL Passthrough:删除
ssl-passthrough注解,让Ingress在自身层面终止SSL,再转发HTTP流量到后端80端口,此时需确保TLS证书配置正确。
2. TLS证书配置缺失
你的Ingress spec中定义了tls块,但未指定secretName,Kubernetes需要明确使用哪个Secret存储HTTPS证书。若没有对应Secret,Ingress无法完成SSL终止(即便不用passthrough模式,也需证书支撑)。
检查与修复步骤:
- 执行
kubectl get secrets查看是否存在对应域名的证书Secret。 - 若不存在,创建包含证书和私钥的Secret:
kubectl create secret tls orderservice-tls --cert=path/to/your-cert.pem --key=path/to/your-private-key.pem
- 在Ingress的
tls块中补充secretName配置:
tls: - hosts: - orderservice.easetrip.net secretName: orderservice-tls
3. Nginx Ingress Controller 未启用SSL Passthrough
若坚持使用SSL Passthrough模式,需确认AKS上的Nginx Ingress Controller是否开启了该功能——默认情况下该功能是关闭的,需在部署时通过启动参数启用:
- 检查Ingress Controller的Deployment,确认是否包含
--enable-ssl-passthrough启动参数。 - 若未添加,更新Controller部署,追加该启动参数。
4. 网络端口与防火墙验证
- 确认AKS的Nginx Ingress Controller服务(通常为LoadBalancer类型)的443端口已对外开放,Azure网络安全组(NSG)允许443端口的入站流量。
- 执行
curl -v https://orderservice.easetrip.net测试,根据返回的具体错误信息(如证书错误、连接超时、502错误等)缩小排查范围。
5. 后端服务HTTPS配置验证
若使用SSL Passthrough模式,需确认OrderService的HTTPS配置正确性:
- 服务的容器端口是否暴露了HTTPS端口(如443)。
- Kubernetes Service是否正确指向该HTTPS端口。
- 可在集群内部直接测试后端服务的HTTPS端口连通性:
kubectl run -it --rm test-pod --image=curlimages/curl -- curl -v https://orderservice:443
内容的提问来源于stack exchange,提问作者Arshad Badar Khan
相关产品推荐
相关产品推荐

