EKS集群Helm部署ArgoCD配置ALB Ingress访问返回502故障
问题根本原因
ALB返回502 Bad Gateway的核心原因是负载均衡无法和后端ArgoCD Pod正常建立通信,具体是三个配置错误导致的:
- 配置
alb.ingress.kubernetes.io/backend-protocol: HTTPS后,ALB会用HTTPS协议连接后端Pod,但ArgoCD默认使用自签名TLS证书,ALB默认会校验后端证书的合法性,自签名证书会直接导致TLS握手失败。 - 未配置自定义健康检查规则:ALB默认会用后端对应协议请求根路径
/做健康检查,既没有跳过自签名证书校验,也没有匹配ArgoCD实际提供的健康检查接口/healthz,会导致所有后端Pod被判定为不健康,ALB没有可用的转发目标。 - 现有Ingress资源未正常创建443监听器,从
kubectl get ing返回结果的PORTS 80字段就能确认,直接访问ALB 80端口时没有配置HTTP到HTTPS的跳转规则,也没有正确关联后端服务的对应端口。
修复方案
推荐直接在ALB层做TLS卸载,后端用HTTP协议通信,不需要处理自签名证书问题,配置更简单、排查成本更低,修改后的Ingress配置如下:
ingress: enabled: true annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internal alb.ingress.kubernetes.io/target-type: IP alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' # 开启HTTP自动跳转HTTPS alb.ingress.kubernetes.io/ssl-redirect: '443' alb.ingress.kubernetes.io/certificate-arn: "${cert}" alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-FS-1-2-Res-2020-10 # 后端用HTTP协议通信,TLS解密全在ALB层完成 alb.ingress.kubernetes.io/backend-protocol: HTTP # 配置正确的健康检查规则 alb.ingress.kubernetes.io/healthcheck-path: /healthz alb.ingress.kubernetes.io/healthcheck-port: traffic-port alb.ingress.kubernetes.io/success-codes: '200'
如果必须要端到端HTTPS(ALB到后端也走HTTPS),在原有配置基础上补充以下注解即可:
# 跳过后端自签名证书校验 alb.ingress.kubernetes.io/backend-healthcheck-verify-certificate: 'false' # 健康检查改用HTTPS协议,匹配ArgoCD健康检查接口 alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS alb.ingress.kubernetes.io/healthcheck-path: /healthz alb.ingress.kubernetes.io/success-codes: '200'
配置更新后等待2-3分钟,到AWS控制台查看ALB对应的目标组,所有节点状态变为Healthy即可正常访问。注意不要直接用ALB的DNS地址访问,需要把你配置的域名eks-test-alb-argocd.abc.com通过内网DNS解析或者本地hosts绑定到ALB地址,否则ArgoCD会因为Host头不匹配返回异常。
内容的提问来源于stack exchange,提问作者Omri
相关产品推荐
相关产品推荐

