AWS Fargate无法访问互联网拉取镜像失败 停留在PENDING状态排查
故障根因分析
最高概率原因:Fargate安全组未放行出方向流量
你提供的安全组配置仅配置了入方向80端口来自负载均衡安全组的访问规则,未显式配置出方向规则。terraform-aws-modules/security-group/aws v4.x版本若未显式指定任何egress规则,会默认禁用所有出方向流量,导致Fargate无法访问公网拉取镜像:
- 拉取Docker Hub镜像需要出方向TCP 443端口访问公网镜像仓库
- DNS解析需要出方向UDP 53端口访问VPC DNS服务器
同子网EC2能正常访问公网,是因为EC2绑定的安全组出方向规则默认放行了所有流量,和Fargate使用的安全组规则不一致。
其他可能原因
- VPC未开启DNS解析支持:虽然你配置了
enable_dns_hostnames = true,但需确认VPC的enable_dns_support参数也为true(该参数在terraform aws vpc模块中默认值为true,可手动核对) - 公有子网的公网IP分配实际失效:可在ECS控制台查看运行失败的任务详情,确认是否成功分配到公网IP
- Fargate平台版本兼容性问题:使用过老的Fargate平台版本可能存在网络适配异常,建议升级到最新稳定版平台版本
排查解决步骤
- 首先修改Fargate安全组配置,添加出方向放行规则,示例Terraform配置如下:
module "fg_sg" { source = "terraform-aws-modules/security-group/aws" version = "~> 4.0" name = "${var.namespace}-sg" vpc_id = module.vpc.vpc_id ingress_with_source_security_group_id = [ { rule = "http-80-tcp" source_security_group_id = module.lb_sg.security_group_id } ] // 新增出方向规则,允许所有出站流量,生产环境可按需收敛到指定端口和目标地址 egress = [ { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } ] }
- 应用配置后重新部署Fargate服务,验证是否可以正常拉取镜像
- 若问题仍存在,登录AWS控制台查看VPC属性,确认
DNS解析和DNS主机名两项均为启用状态 - 查看失败的Fargate任务详情,确认公网IP已正常分配,且子网路由表确实绑定了IGW的默认路由
内容的提问来源于stack exchange,提问作者Barry White
相关产品推荐
相关产品推荐

