Azure应用网关对接AKS Traefik Ingress多站点时出现随机502 Bad Gateway错误
故障根因分析
从错误日志中的timeTaken_d=0.004远低于配置的180秒超时,可排除后端服务响应超时的可能性,结合健康检查状态正常的特征,核心故障原因为Azure应用网关(AGW)与Traefik Ingress的TCP长连接空闲超时配置不匹配,触发连接复用异常:
- Azure AGW V2默认启用后端连接池复用,默认后端连接空闲超时时间为30秒
- Traefik默认的HTTP长连接空闲超时时间通常小于30秒(默认值为18秒)
当业务请求的空闲间隔超过Traefik的超时阈值后,Traefik会主动关闭空闲TCP连接,但AGW侧仍然判定该连接存活,继续复用该连接发送新请求,此时会收到Traefik返回的RST包或错误响应,AGW直接返回502 Bad Gateway。待AGW清理掉失效连接后,新建连接的请求可正常处理,就会出现访问时好时坏的现象。
健康检查不受影响的原因是健康检查的请求间隔通常小于Traefik的空闲超时,连接一直保持存活,不会触发异常。
次要可能诱因:
- AGW的HTTP Setting未正确传递用户请求的原始Host头,Traefik多站点路由规则匹配失败返回502
- Traefik的全局/单后端最大连接数配置过低,流量峰值时连接被拒绝返回502
修复方案
1. 对齐两端空闲超时配置(必做)
调整Traefik的长连接空闲超时时间,使其大于等于AGW侧的后端连接空闲超时时间即可解决绝大多数同类问题:
- 若使用Helm部署Traefik 2.x,修改values.yaml对应配置:
ports: websecure: tls: enabled: true transport: respondingTimeouts: idleTimeout: 40s # 大于AGW默认的30秒即可,若AGW侧调过超时需对应调大
- 可选同步调大AGW侧HTTP Setting中的「连接超时」参数,最大支持调整到240秒。
2. 校验Host头传递配置
多站点部署场景下需确保AGW传递原始Host头给Traefik:
- 进入对应HTTP Setting配置页,关闭「从后端地址中选取主机名」选项
- 开启「用原始请求的主机名作为主机头」选项,保存后生效。
3. 排查Traefik连接数限制
调整超时后仍有异常时,检查Traefik连接相关配置:
- 检查Traefik启动参数中
--maxIdleConnsPerHost、--maxOpenConnsPerHost的阈值,过低则适当调大 - 查看Traefik Pod日志,确认502发生时是否存在
connection refused、too many open connections类报错。
4. 临时验证方案
可临时在AGW的HTTP Setting中关闭「连接复用」选项,观察502错误是否消失,该操作仅用于验证根因,关闭连接复用会增大建连开销,不建议长期开启。
内容的提问来源于stack exchange,提问作者Matrix
相关产品推荐
相关产品推荐

