使用AWS ALB及aws-load-balancer-controller时出现502 Bad Gateway错误求助
故障根因分析
- 端口配置不匹配:Deployment定义中
containerPort配置为80,但Service的targetPort指向8080,两者不一致会导致aws-load-balancer-controller同步目标组规则时出现校验偏差,引发偶发流量转发失败。从ALB日志可以看到target_status_code为-、response_processing_time为-1,符合ALB请求无法送达后端目标的典型特征,和之前排查的请求未到业务服务的结论一致。 - 健康检查配置不合理:当前ALB健康检查间隔设置为300秒(5分钟),节点或Pod出现异常时最长需要5分钟才会被ALB从目标组中摘除,异常实例会持续接收流量导致502。
- 控制器版本缺陷:你使用的aws-load-balancer-controller v2.1.3版本存在目标组规则同步延迟、异常残留旧目标IP的已知缺陷,当Pod发生重建、调度漂移时,ALB的目标组中会残留已经失效的IP/端口组合,请求路由到失效目标时直接返回502。
- 单副本部署风险:当前服务副本数为1,无冗余能力,当Pod发生微小抖动、进程重启或节点网络波动时,没有备用实例承接流量,直接触发502。
修复方案
- 修正端口配置一致性:先确认业务进程实际监听的端口,将Deployment的
containerPort和Service的targetPort配置统一:如果业务监听80,把Service的targetPort改为80;如果业务监听8080,把Deployment的containerPort改为8080。 - 优化ALB健康检查配置:修改Ingress注解,缩短健康检查间隔,增加异常阈值,加快异常节点摘除速度,参考配置如下:
alb.ingress.kubernetes.io/healthcheck-interval-seconds: '10' alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '5' alb.ingress.kubernetes.io/healthy-threshold-count: '2' alb.ingress.kubernetes.io/unhealthy-threshold-count: '2'
- 升级负载均衡控制器版本:将aws-load-balancer-controller升级到v2.4.1及以上稳定版本,修复目标组同步缺陷。
- 调整部署冗余配置:将服务副本数调整为至少2个,调度到不同可用区的节点上,避免单实例故障导致的流量中断。
- 可选优化:将Service类型从NodePort改为IP型,ALB直接路由到Pod IP,减少kube-proxy转发链路,降低网络波动风险,需要在Ingress添加如下注解:
alb.ingress.kubernetes.io/target-type: ip
- 效果验证:所有配置调整完成后,持续观测ALB 5xx监控指标,10分钟内无新增502即可确认修复生效。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

