AWS网络负载均衡器(NLB)绑定的弹性IP无法正常工作问题求助
遇到这种情况我之前也碰过,大概率是NLB的弹性IP配置或者子网相关的规则没到位,给你梳理几个常见的原因和排查方向:
弹性IP未正确关联到NLB的子网ENI
NLB在每个关联的公有子网中都会创建一个专属的弹性网络接口(ENI),你需要把静态弹性IP绑定到对应子网的NLB ENI上,而不是单纯给子网分配EIP或者绑定到其他资源上。如果只是分配了EIP但没关联到NLB的ENI,这个IP根本不会被NLB接管,自然访问会返回空响应。
排查方式:- 打开EC2控制台的「弹性IP」页面,查看该EIP的「关联对象」,确认是NLB的ENI(描述会标注为Network Load Balancer的ENI);
- 也可以进入NLB的「描述」页面,在「可用区」列表里查看对应子网是否已显示关联的弹性IP。
绑定EIP的子网路由/安全配置异常
当你访问这个静态EIP时,流量会进入对应子网的NLB节点,如果该子网的路由表没有正确指向互联网网关(公有子网必须有0.0.0.0/0指向IGW的路由),或者网络ACL、安全组限制了入站/出站流量,就会导致回包失败,出现ERR_EMPTY_RESPONSE。而用NLB DNS访问时,解析到了另一个配置正常的子网IP,所以能正常访问。
排查方式:- 检查该子网的路由表,确认存在指向互联网网关的默认路由;
- 确认子网的网络ACL允许你使用的端口(比如HTTP/80、HTTPS/443)的入站和出站流量;
- 检查NLB的安全组和后端目标实例的安全组,确保双向流量都被允许。
绑定EIP的子网对应后端目标健康检查失败
如果该子网内的后端目标(比如EC2实例、ECS服务)健康检查未通过,NLB会把这个子网的节点从服务池中移除,即使你访问对应的EIP,也没有可用的后端节点响应请求,从而返回空响应。而DNS解析到的另一个子网的目标是健康的,所以能正常访问。
排查方式:进入NLB的「目标组」页面,查看目标组的健康检查状态,确认绑定EIP的子网对应的目标实例/端点都是健康的。弹性IP与NLB子网的可用区不匹配
弹性IP是和可用区绑定的,如果你的EIP创建时选择的可用区和NLB关联的子网所在可用区不一致,绑定操作可能会出现隐性问题,导致IP无法正常工作。
排查方式:确认弹性IP的可用区和NLB绑定的子网的可用区完全一致,若不一致,建议重新创建对应可用区的EIP再进行绑定。
备注:内容来源于stack exchange,提问作者revy

