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

NestJS混合微服务部署AWS EKS时TCP主机名配置及连接异常排查

NestJS混合模式TCP微服务连接失败(ECONNREFUSED 0.0.0.0:8080)排查方案

核心问题拆解

应用部署正常、HTTP REST API可用,但TCP的@messagePattern无法工作,报错connect ECONNREFUSED 0.0.0.0:8080,问题集中在TCP服务的可访问性配置和调用地址上,以下是针对性排查和解决步骤:

1. 主机名配置错误

当前TCP_HOST设为0.0.0.0是正确的监听配置(表示监听容器内所有网卡),但调用方不能用0.0.0.0作为目标地址:

  • 在K8s集群内部调用:必须使用微服务对应的K8s服务名称(如evaluation-service.default.svc.cluster.local,同namespace可简化为evaluation-service)或服务的ClusterIP;
  • 同Pod内调用:改用localhost作为目标地址;
  • 外部调用:需通过NodePort/LoadBalancer暴露,或配置Nginx Ingress的TCP转发(默认Ingress仅处理HTTP流量)。

2. Docker与K8s端口配置缺失

必须确保TCP端口被正确暴露和映射:

  • Dockerfile:添加EXPOSE 8080声明容器要暴露的TCP端口;
  • K8s Deployment:在containers.ports字段明确配置TCP端口映射:
    ports:
      - containerPort: 8080
        name: tcp-evaluation
        protocol: TCP
    
    这一步是K8s服务发现能识别TCP端口的前提。

3. 网络与安全组配置

  • 集群内部通信:AWS EKS的节点安全组需允许Pod之间的TCP 8080端口通信;
  • 外部TCP访问:若需从集群外调用,需:
    1. 开放NodePort/LoadBalancer对应端口的安全组规则;
    2. 配置Nginx Ingress Controller的TCP转发:
      • 在Ingress Controller的ConfigMap中添加端口映射:
        data:
          "8080": "default/evaluation-service:8080"
        
      • 在Ingress Controller的Deployment中添加对应端口的hostPort或nodePort配置。

4. 端口冲突检查

当前TCP_CORE_PORT和TCP_EVALUATION_PORT均为8080:

  • 若两个微服务部署在同一个Pod,会导致端口占用冲突,必须修改其中一个微服务的端口;
  • 若部署在不同Pod,需确认各自的Deployment端口配置无重叠。

快速修复步骤

  1. 调整调用方的目标地址,替换0.0.0.0为K8s服务名称或ClusterIP;
  2. 补全Dockerfile的EXPOSE声明和K8s Deployment的端口配置;
  3. 检查集群内部安全组规则,确保Pod间TCP 8080端口通信被允许;
  4. 若为外部调用,配置Nginx Ingress的TCP转发规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:05:34