无法连接AWS Network Load Balancer与ECS Fargate的技术求助
排查ECS Fargate + Network Load Balancer TCP连接失败(无流量日志)的方案
我之前碰到过几乎一模一样的问题,折腾了大半天终于解决了,给你列几个核心排查点,按顺序来大概率能定位到问题:
1. 先盯紧目标组的配置,这是最容易踩的坑
- 必须确认目标组的目标类型是IP:Fargate任务用的是私有IP而非EC2实例ID,要是选成了实例ID,NLB根本找不到你的容器,直接丢包连日志都不会有
- 协议/端口要完全匹配:NLB是四层负载均衡,目标组的监听端口必须和Fargate容器暴露的端口完全一致,差一个数字都不行
- 健康检查别瞎配:如果健康检查失败,NLB会把目标从可用列表里踢出去,自然不会转发流量。TCP类型的健康检查就是看端口是否能通,确保健康检查端口和容器端口一致,而且容器里的服务确实在监听这个端口
2. 检查NLB本身的安全组和VPC子网配置
- NLB的安全组要双向放行:一方面允许客户端来源的TCP流量(比如你用的80/443或者自定义端口),另一方面要允许NLB访问目标组的端口(也就是容器端口)
- 子网选对了吗?公网NLB必须选带公网路由的子网(绑定了IGW),内部NLB选私有子网就行。要是公网NLB选了私有子网,域名解析出来的是私有IP,公网客户端根本连不上,自然没日志
- VPC网络ACL别拖后腿:ACL是无状态的,要同时放行**入站(客户端→NLB)和出站(NLB→客户端)**的流量,还有NLB到容器的入站/出站流量,别只开了入站忘了出站
3. 先确认流量日志本身没问题
- 你说看不到日志,先检查NLB的流量日志是不是真的启用了:得指定一个S3桶,而且桶的权限要允许AWS ELB服务写入(需要给
elasticloadbalancing.amazonaws.com对应的写入权限) - 流量日志有延迟!一般要等5-10分钟才会生成S3文件,别刚测试完就去翻桶,可能还没同步上来
- 如果是TCP流量,正常的日志会记录
客户端IP:端口 → NLB IP:端口 → 容器IP:端口的链路,要是连日志条目都没有,说明流量根本没到达NLB,问题出在客户端到NLB的路径(比如DNS解析、路由、客户端安全组)
4. Fargate任务的网络配置别出错
- 必须用
awsvpc网络模式:Fargate只支持这个模式,要是选了别的(虽然也选不了)直接凉 - 任务的子网要和NLB在同一个VPC里:跨VPC的话得有对等连接或者中转网关,不然NLB根本访问不到容器的IP
- 检查任务的弹性网卡(ENI)状态:确认ENI正常分配了私有IP,并且绑定的安全组确实是你配置的允许所有流量的那个
5. 客户端侧的快速验证
- 先用
nslookup或者dig查NLB的域名,看解析出来的IP是不是符合预期(公网NLB应该是公网IP,内部NLB是私有IP) - 用
telnet <NLB-IP> <端口>或者nc -zv <NLB-IP> <端口>测试连接,看是直接超时还是拒绝连接——超时一般是路由/安全组问题,拒绝的话可能是NLB没找到可用目标 - 如果客户端在VPC内部,确认客户端所在子网的路由表能访问NLB的子网,并且客户端安全组允许访问NLB的端口
我当时踩的坑是目标组选了实例ID类型,改完IP类型之后立刻就通了。另外还有一次是NLB的子网没绑定IGW,公网客户端根本连不到NLB,日志自然一片空白。
内容的提问来源于stack exchange,提问作者Tim Ludwinski
相关产品推荐
相关产品推荐

