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

ECS Fargate上Node.js gRPC服务ALB健康检查失败问题排查

ECS Fargate上gRPC服务ALB健康检查失败的解决方案
  • 修正服务监听地址:将gRPC服务的绑定地址从127.0.0.1:50051改为0.0.0.0:50051。容器内的127.0.0.1仅允许本地进程访问,Fargate任务需要监听所有可用网卡,才能让ALB的健康检查请求到达服务。

  • 确认ALB目标组协议类型:目标组必须选择gRPC协议,而非HTTP/HTTPS。ALB对gRPC服务的健康检查依赖gRPC协议解析,HTTP模式下无法正确识别/grpc.Health/Check路径的请求。

  • 核对健康检查端口与容器映射:确保目标组的健康检查端口与Fargate任务中容器暴露的端口一致,任务定义里需正确配置容器端口为50051(Fargate中主机端口可留空自动分配)。同时调整健康检查参数:超时时间建议设为5秒,间隔时间设为10秒,避免因gRPC请求处理耗时导致超时判定失败。

  • 验证TLS配置一致性:如果ALB的HTTPS监听做了TLS终止,目标组到后端Fargate任务的通信需使用明文gRPC(目标组协议为gRPC,端口50051,无需额外TLS配置);如果后端服务本身启用TLS,需确保服务端证书与ALB信任的证书一致,且目标组健康检查启用TLS加密。

  • 检查Health服务注册逻辑:确保代码中正确将Health服务实例注册到gRPC服务器,示例代码如下:

    const { health, Server, ServerCredentials } = require('@grpc/grpc-js');
    const server = new Server();
    
    const healthService = new health.HealthService();
    healthService.setStatus('grpc.health.v1.Health', health.healthStatus.SERVING);
    server.addService(health.healthService, healthService);
    
    server.bindAsync('0.0.0.0:50051', ServerCredentials.createInsecure(), (err, port) => {
      if (err) throw err;
      server.start();
    });
    

    本地测试可使用grpcurl工具:grpcurl -plaintext 127.0.0.1:50051 grpc.health.v1.Health/Check,确认返回{"status":"SERVING"}。

  • 检查安全组与VPC配置:Fargate任务的安全组需允许来自ALB安全组的入站流量(端口50051);ALB的安全组需允许出站流量到任务安全组(端口50051)。同时确认ALB与Fargate任务处于同一VPC的可通信子网内,路由表配置正确。

  • 验证Reflection服务可用性:执行grpcurl -plaintext 127.0.0.1:50051 list命令,确认输出包含grpc.health.v1.Health,说明Reflection服务正常注册,Health服务可被正确发现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:22:40