AWS Network Load Balancer多子网下请求仅50%成功,求解决方案
公网NLB仅50%请求成功的排查与解决
问题背景
公网Network Load Balancer(NLB)关联subnet-A和subnet-B两个子网,配置了80/443端口监听器,对应目标组已成功注册运行中的Fargate服务IP并建立连接。但通过DNS访问时,仅约50%请求成功——原因是NLB DNS返回两个对应子网的公网A记录,解析到其中一个IP时会超时。补充:两个子网路由均指向Internet Gateway,当前未开启跨区负载均衡,疑问是否必须开启该功能解决问题。
核心分析
NLB的每个关联子网会分配独立的公网IP,DNS会轮询返回这两个IP。出现50%超时,本质是其中一个子网对应的NLB节点无法正常将流量转发到目标实例,和跨区负载均衡没有直接的“必须开启”关联。
排查与解决步骤
- 检查目标组健康状态:进入EC2控制台的目标组页面,查看两个子网内的目标实例是否都处于
健康状态。如果Fargate服务仅部署在其中一个子网,另一个子网的NLB节点找不到健康目标,必然导致超时——这种情况需调整Fargate服务的部署子网,确保两个子网都有运行中的实例,或修改NLB仅关联有实例的子网。 - 验证安全组配置:
- NLB的安全组需允许公网(0.0.0.0/0)访问80、443端口;
- Fargate实例的安全组需允许NLB所在子网的CIDR或NLB的安全组访问对应业务端口;
- 测试单个NLB IP:直接访问两个NLB的公网IP,确认哪个IP超时,针对性排查该子网的问题:
- 检查子网路由表:确认0.0.0.0/0确实指向Internet Gateway,无其他阻断路由;
- 查看CloudWatch指标:监控NLB的
UnHealthyHostCount、TargetResponseTime等指标,定位节点或目标的异常;
- 关于跨区负载均衡:开启该功能后,NLB会跨子网转发流量到健康目标,但这是兜底方案,不是解决根源问题的必需操作。如果两个子网都有健康目标且配置正常,即使不开跨区负载均衡,请求也能正常分发。只有当某个子网的目标全挂时,跨区负载均衡才会把该子网的NLB流量转发到其他子网的健康目标。
内容的提问来源于stack exchange,提问作者iqueqiorio
相关产品推荐
相关产品推荐

