You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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任务完全无法响应任何交互?该如何调试?


问题原因及解决方案

核心问题根源

  1. ECS任务安全组配置缺失:若未在ECS任务定义中指定安全组,AWS会自动生成默认安全组,该组默认拒绝所有入站流量,直接导致ALB无法访问任务的5000端口,外部请求也无法到达任务。
  2. ECR通信端口未开放:未使用PrivateLink时,ECS任务需要访问ECR拉取镜像,此时任务安全组必须开放443端口的出站流量,否则任务可能无法正常启动或维持运行状态。

调试与修复步骤

  • 配置ECS任务安全组:
    1. 在ECS任务定义中指定自定义安全组,需包含以下规则:
      • 允许ALB所在安全组的5000端口TCP入站流量(保证ALB能发起健康检查和转发请求);
      • 若需要外部直接访问,可按需开放5000端口的公网入站流量;
      • 开放443端口的出站流量(用于ECR镜像拉取、AWS API调用等)。
    2. 若使用默认安全组,需手动修改其入站规则,允许ALB的IP段或安全组访问5000端口。
  • 验证任务内部连通性:
    通过aws ecs execute-command进入任务后,执行curl localhost:5000确认应用自身可正常响应;同时尝试访问外部服务(如curl https://amazon.com),验证出站流量是否正常。
  • 核对ALB健康检查配置:
    确认健康检查的路径、端口、超时时间与Flask应用实际配置匹配,例如Flask默认根路径/是否返回200状态码。
  • 检查子网路由配置:
    确认公网子网的路由表已正确指向互联网网关(IGW),确保任务的公网IP能正常对外通信。

内容的提问来源于stack exchange,提问作者alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:12:50