ECS Fargate上Flask容器无响应,ALB因健康检查失败注销任务
问题:ECS Fargate任务无法响应ALB健康检查及外部请求
我在ECS Fargate中运行两个部署了基础Flask应用的任务,应用监听5000端口,但应用负载均衡器(ALB)因健康检查失败持续注销这些任务。
已确认以下配置均正常:
- ECS任务已分配公网IP地址;
- 通过
aws ecs execute-command进入任务验证,Flask应用正在正常运行; - ECS任务定义中已明确配置5000端口的端口映射;
- ECS服务的负载均衡器配置中指定了容器端口为5000;
- ALB关联的安全组允许5000端口TCP入站流量,且出站流量允许
ip_protocol="-1"的0.0.0.0/0; - ALB目标组配置为允许5000端口HTTP流量,
target_type=ip; - ALB监听器将80端口入站流量路由至上述目标组;
- ECS任务部署在关联了
0.0.0.0/0路由表的公网子网中。
但任务运行后出现以下异常:
telnet和curl请求均超时;nmap -Pn扫描显示所有1000个端口均处于不可达状态。
请问为何ECS任务完全无法响应任何交互?该如何调试?
问题原因及解决方案
核心问题根源
- ECS任务安全组配置缺失:若未在ECS任务定义中指定安全组,AWS会自动生成默认安全组,该组默认拒绝所有入站流量,直接导致ALB无法访问任务的5000端口,外部请求也无法到达任务。
- ECR通信端口未开放:未使用PrivateLink时,ECS任务需要访问ECR拉取镜像,此时任务安全组必须开放443端口的出站流量,否则任务可能无法正常启动或维持运行状态。
调试与修复步骤
- 配置ECS任务安全组:
- 在ECS任务定义中指定自定义安全组,需包含以下规则:
- 允许ALB所在安全组的5000端口TCP入站流量(保证ALB能发起健康检查和转发请求);
- 若需要外部直接访问,可按需开放5000端口的公网入站流量;
- 开放443端口的出站流量(用于ECR镜像拉取、AWS API调用等)。
- 若使用默认安全组,需手动修改其入站规则,允许ALB的IP段或安全组访问5000端口。
- 在ECS任务定义中指定自定义安全组,需包含以下规则:
- 验证任务内部连通性:
通过aws ecs execute-command进入任务后,执行curl localhost:5000确认应用自身可正常响应;同时尝试访问外部服务(如curl https://amazon.com),验证出站流量是否正常。 - 核对ALB健康检查配置:
确认健康检查的路径、端口、超时时间与Flask应用实际配置匹配,例如Flask默认根路径/是否返回200状态码。 - 检查子网路由配置:
确认公网子网的路由表已正确指向互联网网关(IGW),确保任务的公网IP能正常对外通信。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

