EKS集群配置ingress-nginx NLB处理HTTPS请求时报502错误如何解决
EKS集群Ingress-Nginx返回502 Bad Gateway排查解决步骤
- 验证后端服务基础连通性
先确认apigateway服务本身可正常访问:执行kubectl get svc apigateway确认服务端口配置无误,再启动一个临时测试Pod,在Pod内执行curl -kv https://apigateway:1234验证请求是否能正常拿到返回。如果该测试请求失败,先排查apigateway Pod是否处于Running状态、容器监听地址是否为0.0.0.0而非127.0.0.1、同VPC内安全组是否放开了1234端口的访问权限。 - 修正Ingress注解配置
你当前使用的Ingress-Nginx v1.0+版本中,nginx.ingress.kubernetes.io/secure-backends注解已废弃,建议先删除该冗余配置。如果你的apigateway服务使用自签名TLS证书,Ingress-Nginx默认会校验证书合法性,校验失败就会返回502,需要新增注解关闭后端证书校验:
如需开启后端证书校验,可额外配置nginx.ingress.kubernetes.io/ssl-verify: "false"nginx.ingress.kubernetes.io/backend-certificate-auth注解挂载对应的CA证书。 - 查看Ingress-Nginx控制器日志定位具体错误
先执行kubectl get pods -n ingress-nginx获取Ingress-Nginx控制器的Pod名称,再执行kubectl logs -n ingress-nginx <控制器Pod名称>查看日志,搜索502关联的错误记录:
若出现connect() failed (111: Connection refused)说明后端服务拒绝连接,若出现SSL_do_handshake() failed说明后端TLS握手失败,若出现no route to host说明集群内部网络不通,可根据具体错误进一步排查。 - 验证NLB链路配置
确认你使用的TLS终结型NLB的目标组健康检查状态为Healthy,若目标组显示Unhealthy,需检查Ingress-Nginx Pod是否正常运行、EKS节点安全组是否放开了NLB来源的80/443端口访问权限,同时确认域名解析的NLB CNAME地址无配置错误。 - 核对端口映射规则
检查apigatewayService的targetPort配置是否和容器实际监听的端口一致,若targetPort配置与容器监听端口不匹配,也会导致请求转发失败返回502。 - 排查网络访问限制
确认集群内没有配置网络策略禁止Ingress-Nginx命名空间的Pod访问apigateway服务所在命名空间的1234端口,同时EKS集群的安全组规则允许内部流量互通。
内容的提问来源于stack exchange,提问作者Fhuad Balogun
相关产品推荐
相关产品推荐

