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

EKS环境Nginx Ingress访问chatbot服务返回502错误问题咨询

故障说明

EKS集群搭配Nginx Ingress Controller部署业务时,develop命名空间下的chatbot服务通过Ingress暴露后持续返回502状态码,直接验证服务本身运行正常,Ingress侧报错日志为connect() failed (111: Connection refused) while connecting to upstream,对应后端地址为chatbot Pod的7070端口。
涉及的资源配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: develop
  name: chatbot-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - http:
        paths:
          - backend:
              service:
                name: chatbot
                port:
                  number: 7070
            pathType: Prefix
            path: /
      host: api.example.com
---
apiVersion: v1
kind: Service
metadata:
  name: chatbot
  namespace: develop
spec:
  selector:
    app: chatbot
  ports:
    - port: 7070
      targetPort: 7070
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: chatbot
  namespace: develop
spec:
  selector:
    matchLabels:
      app: chatbot
  template:
    metadata:
      labels:
        app: chatbot
    spec:
      containers:
        - name: chatbot
          image: chatbot 
          imagePullPolicy: Always
          envFrom:
            - secretRef:
                name: chatbot-secret
          ports:
            - containerPort: 7070
根因判断

从日志可以确认Nginx Ingress已经正确识别Ingress规则、成功从Service关联到后端Pod IP,不存在路由配置错误、Service找不到后端的问题,111 Connection refused代表TCP请求已经到达Pod所在网络栈,但目标端口没有正常接收连接,90%以上的概率是以下原因导致:

  • chatbot应用默认绑定了127.0.0.1本地回环地址,没有绑定0.0.0.0,导致只有Pod内部本地访问能连通,跨网络命名空间的Ingress流量访问7070端口时会被直接拒绝,这也是“本地测服务正常但Ingress访问不通”的最高频诱因。
  • 应用实际监听端口和配置声明的7070不一致,比如启动时被环境变量、配置文件覆盖为其他端口,导致7070端口无进程监听。
  • 未配置就绪探针,应用还未完成启动、端口还没开始监听时,Pod就已经被加入Service后端端点列表,Ingress提前转发流量导致连接拒绝。
排查与修复步骤

按以下顺序操作即可定位并解决问题:

  1. 确认Service端点匹配正常
    执行命令查看Service关联的后端地址,确认和实际运行的chatbot Pod IP一致:
    kubectl get endpoints chatbot -n develop
    如果返回的端点列表为空,检查Service的selector.app值和Pod的label是否完全一致,修正拼写、空格类的匹配错误。
  2. 验证Pod端口跨命名空间连通性
    启动临时调试Pod,从集群网络内部直接访问chatbot Pod的7070端口,绕开Ingress和Service验证连通性:
    kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- curl http://<替换为上一步查到的chatbot Pod IP>:7070
    如果这里同样返回连接拒绝,直接进入chatbot容器排查端口监听状态:
    kubectl exec -it <chatbot Pod名称> -n develop -- ss -tulnp
  • 如果返回结果中7070端口的监听地址为127.0.0.1:7070,修改chatbot应用的启动参数/配置文件,将监听地址改为0.0.0.0:7070,重新构建镜像发布即可。
  • 如果返回结果中没有7070端口的监听记录,检查应用启动日志,确认实际监听端口,将Deployment的containerPort、Service的targetPort、Ingress的service port三个配置统一为应用实际监听的端口。
  1. 补充就绪探针避免启动阶段异常
    在Deployment的容器配置段增加TCP就绪探针,确保只有应用端口正常监听后才会接收流量:
readinessProbe:
  tcpSocket:
    port: 7070
  initialDelaySeconds: 5
  periodSeconds: 10
验证方式

等Pod滚动重启完成后,先通过临时调试Pod访问Pod IP+端口确认连通正常,再通过api.example.com域名访问服务,502错误即可消除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:51:26