使用Nginx的EKS负载均衡器偶发请求缓慢问题排查求助
1. Classic LB 连接复用配置
Classic LB默认空闲连接超时60秒,如果Nginx Ingress和LB之间没做好长连接复用,会导致LB频繁创建新连接,引发偶发延迟。可以给Ingress Controller的ConfigMap添加以下配置开启长连接:
http-snippet: | upstream keepalive 32; server-snippet: | proxy_http_version 1.1; proxy_set_header Connection "";
同时查看CloudWatch的RequestCount、BackendConnectionErrors指标,排查是否存在连接队列溢出的情况。
2. 私有子网NAT网关/路由瓶颈
EC2在私有子网依赖NAT网关与公有子网LB通信,如果NAT网关的带宽或连接数接近上限,会导致部分请求延迟。检查CloudWatch的NAT Gateway指标:ActiveConnectionCount、BytesOutToDestination是否触达阈值,是否存在ErrorPortAllocation错误。另外确认私有子网路由表是否正确指向NAT网关,LB安全组与EC2安全组是否配置了互通规则。
3. Nginx Ingress Pod资源与调度
检查Ingress Controller Pod是否运行在资源紧张的节点上——用kubectl top pods查看CPU/内存使用率,确保Pod配置了合理的资源请求和限制。同时调整Nginx核心参数(比如worker_connections、worker_processes),适配节点硬件能力,避免并发请求处理不过来。
4. Classic LB健康检查优化
健康检查配置不合理会导致LB将请求转发到刚恢复或状态不稳定的节点,引发偶发延迟。确保健康检查使用轻量路径(比如/healthz),调整检查间隔和超时时间,避免节点频繁被标记为不健康。查看CloudWatch的HealthyHostCount指标,确认是否存在节点健康状态频繁波动的情况。
5. 跨AZ请求延迟优化
如果LB和EC2节点不在同一个可用区(AZ),跨AZ的网络开销可能导致偶发慢请求。可以将LB的负载均衡策略改为RoundRobin,尽量让请求落在同AZ的节点上;或者确保每个AZ都部署了Ingress Pod和LB节点。
6. 公有子网ELB标签验证
虽然你提到已配置elb标签,仍需确认标签格式是否正确:kubernetes.io/cluster/<你的集群名>: shared或owned,确保EKS能正确识别并管理LB资源。另外检查公有子网的路由表是否指向Internet Gateway,保证LB能正常对外提供服务。
内容的提问来源于stack exchange,提问作者Pavan

