Fargate上Network Load Balancer始终无法处于健康状态排查
Fargate服务健康检查失败问题排查与解决
核心原因
你使用NetworkLoadBalancedFargateService部署服务时,默认健康检查配置可能与服务类型(TCP/HTTP)不匹配,或存在网络、安全组限制,导致目标组健康检查失败。
具体解决步骤
1. 修正健康检查配置
针对TCP服务(你的实际需求)
NLB目标组默认的TCP健康检查仅验证端口能否建立连接,可显式配置确保参数适配:
// 获取自动创建的目标组,调整健康检查为TCP协议 loadBalancedFargateService.getTargetGroup().configureHealthCheck(new HealthCheck.Builder() .protocol(Protocol.TCP) .port("traffic-port") // 使用与流量一致的端口 .interval(Duration.seconds(30)) .timeout(Duration.seconds(5)) .healthyThresholdCount(2) .unhealthyThresholdCount(2) .build());
针对HTTP示例(测试场景)
amazon/amazon-ecs-sample镜像运行Apache服务,需配置HTTP健康检查验证根路径:
loadBalancedFargateService.getTargetGroup().configureHealthCheck(new HealthCheck.Builder() .protocol(Protocol.HTTP) .path("/") .port("80") .healthyHttpCodes("200") .build());
2. 检查安全组规则
确保Fargate任务的安全组允许NLB目标组访问容器端口:
- 入站规则添加:允许来自NLB安全组的TCP流量(端口80或自定义TCP端口)
- 若任务需拉取镜像,确认子网有NAT网关或公网访问能力,保证容器能正常启动
3. 验证容器服务状态
通过ECS任务日志确认容器是否正常启动并监听指定端口:
# 查看目标日志组 aws logs describe-log-streams --log-group-name /aws/ecs/[你的集群名称]/[你的服务名称] # 获取日志内容 aws logs get-log-events --log-group-name /aws/ecs/[你的集群名称]/[你的服务名称] --log-stream-name [日志流ID]
若日志显示容器未启动或端口未监听,需检查镜像有效性、容器配置是否正确。
4. 确认网络配置
如果任务部署在私有子网:
- 子网必须关联NAT网关,确保容器能拉取外部镜像
- 若使用公网NLB,任务所在子网需配置路由到互联网
内容的提问来源于stack exchange,提问作者rjdkolb
相关产品推荐
相关产品推荐

