我的AWS EKS配置哪部分异常?闲置后ALB访问Pod出现连接超时
故障原因分析
ALB侧空闲超时不匹配问题
你当前Ingress配置中通过alb.ingress.kubernetes.io/load-balancer-attributes将ALB空闲超时设为60秒,若你的微服务本身的TCP/HTTP keepalive超时时间大于60秒,会出现连接半开问题:ALB已经主动断开了闲置超过60秒的连接,但微服务侧仍认为该连接处于存活状态,闲置后首次请求会复用已被ALB销毁的旧连接,直接触发超时,完全匹配你反馈的故障现象。
Kubernetes配置遗漏问题
- 缺少Pod健康检查配置:你提供的Deployment中未配置
livenessProbe(存活探针)和readinessProbe(就绪探针),当微服务进程出现假死、线程阻塞但容器仍正常运行的情况时,K8s不会自动重启Pod,也会将异常Pod保留在Service的后端端点列表中,流量转发到异常Pod就会触发超时。 - ALB Ingress可选优化配置缺失:你当前使用NodePort类型的Service对接ALB,流量需要经过节点端口转发,多一层网络链路。如果未配置
alb.ingress.kubernetes.io/target-type注解,默认使用instance模式,若节点安全组未全量放通ALB网段的NodePort端口入站规则,也可能偶发超时。
微服务侧配置问题
若你的微服务默认开启了HTTP长连接,但长连接超时时间大于ALB的60秒,同样会触发前述的半开连接超时问题。
修复方案
- 补充Pod健康检查配置,在Deployment的containers配置段添加探针,示例如下:
livenessProbe: httpGet: path: /health/live # 替换为你的服务存活检查接口 port: 80 initialDelaySeconds: 10 periodSeconds: 30 readinessProbe: httpGet: path: /health/ready # 替换为你的服务就绪检查接口 port: 80 initialDelaySeconds: 5 periodSeconds: 10
- 对齐ALB与微服务的空闲超时时间:将微服务的HTTP/TCP长连接超时时间调整为小于ALB的60秒(比如设置为45秒),确保微服务主动先断开闲置连接,避免半开连接问题;也可根据业务需求适当调大ALB的空闲超时时间,最大值为4000秒。
- 优化ALB Ingress配置:添加
alb.ingress.kubernetes.io/target-type: ip注解,直接将ALB流量路由到Pod,省去NodePort转发链路,同时可将Service改为ClusterIP类型降低性能损耗。
- 优化ALB Ingress配置:添加
- 检查VPC配置:确认节点安全组放通了ALB所属网段到服务端口/NodePort端口的入站规则,VPC网络ACL未拦截临时端口的返回流量。
内容的提问来源于stack exchange,提问作者Sebastian Adamo
相关产品推荐
相关产品推荐

