AWS Fargate部署.NET Core项目遇ELB健康检查持续失败求助
解决AWS Fargate上.NET Core项目ELB健康检查失败问题
结合你描述的情况(任务公网IP可访问健康端点、已修改Dockerfile监听8080、同子网部署、过往同类部署成功),以下是针对性的排查和解决步骤:
核心排查方向
1. 同步端口配置(最易忽略的点)
- 确认ELB目标组的目标端口已改为8080:之前应用监听80,目标组可能保留了旧端口配置,需同步更新为8080
- 检查目标组健康检查的协议与路径:协议需和应用一致(HTTP/HTTPS),路径要和你通过公网IP访问的完全匹配(比如
/health,注意大小写、是否带斜杠) - 验证任务定义的容器端口:确保任务定义中容器暴露的端口是8080(awsvpc模式下无需主机端口映射,但需容器端口与目标组端口一致)
2. 安全组规则精准校验
- 确认Fargate任务的安全组:允许来自ELB安全组的入站流量到8080端口(不要仅开放0.0.0.0/0,需限定ELB安全组,且端口是8080而非旧的80)
- 确认ELB的安全组:允许AWS健康检查源IP(AWS内部网段)访问8080端口,同时出站规则允许所有流量(确保健康检查响应能返回)
3. 子网与路由配置验证
- 检查新子网的路由表:公网子网需有指向Internet Gateway的路由,私网子网需有指向NAT Gateway的路由,确保ELB与Fargate任务能互通
- 开启子网的DNS解析和DNS主机名属性:ELB需要解析Fargate任务的IP地址,这两个属性未开启会导致通信失败
4. 目标组状态细节排查
- 进入ELB目标组,查看失败目标的具体状态信息(比如“连接超时”“HTTP 404”“拒绝连接”):
- 连接超时:优先排查安全组或子网路由
- HTTP错误:检查健康检查路径、端口是否匹配
- 拒绝连接:确认应用确实在监听8080端口
5. 验证Dockerfile端口配置生效
- 查看容器运行日志,确认应用输出类似
Now listening on: http://[::]:8080的信息,证明应用已正确监听8080 - 确保.NET Core应用的启动命令或配置指定了8080端口:比如在Dockerfile中使用
ENTRYPOINT ["dotnet", "YourApp.dll", "--urls=http://0.0.0.0:8080"],或在appsettings.json中配置"Urls": "http://0.0.0.0:8080"
内容的提问来源于stack exchange,提问作者ypbr
相关产品推荐
相关产品推荐

