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

Kubernetes中Nginx Ingress访问前端出现502 Bad Gateway错误

问题:K3s环境下Nginx Ingress返回502 Bad Gateway,前端Pod正常运行

我在安装了K3s的Linux虚拟机上部署了Nginx Ingress Controller,目标是为前端服务配置HTTPS,但通过Ingress地址app.192.168.[something].nip.io访问应用时,持续出现502 Bad Gateway错误。

相关信息

  • 前端Service详情(kubectl describe svc输出)
  • 集群所有Pod状态信息
  • kubectl get svc -o wide执行结果

Nginx Ingress错误日志

connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.223.229, server: app.192.168.[something].nip.io, request:
"GET / HTTP/2.0", upstream:  "http://10.43.141.56:3000/", host: "app.192.168.[something].nip.io"

前端Pod处于正常运行状态,但不清楚下一步排查方向。

Ingress资源配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/service-upstream: "true"
spec:
  ingressClassName: nginx
  tls:
  - secretName: dailygrind-tls
    hosts:
    - app.192.168.[something].nip.io
  rules:
  - host: app.192.168.[something].nip.io
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: frontend
            port:
              number: 3000

排查步骤

1. 验证Service与Pod的关联有效性

执行kubectl get endpoints frontend,查看Service对应的Pod端点列表:

  • 如果端点为空,说明Service的标签选择器与Pod标签不匹配,检查两者的labels字段是否一致
  • 如果端点存在,确认IP和端口与前端Pod的实际配置对应

2. 集群内部直接测试前端Pod连通性

进入集群内任意可执行curl的Pod(比如Ingress Controller的Pod),执行:

curl http://10.43.141.56:3000

(替换为错误日志中的upstream IP)

  • 如果连接被拒绝,说明:
    • 前端容器内的服务未监听3000端口,检查Pod的容器配置,确认应用监听的是0.0.0.0:3000(不能仅监听127.0.0.1)
    • 存在NetworkPolicy限制了Ingress Controller到前端Pod的流量,检查集群内的NetworkPolicy规则

3. 核对Service端口配置

对比Service的spec.ports与前端Pod的容器端口:

  • 确认Service的port和targetPort(如果未指定则默认与port一致)与Pod暴露的容器端口完全匹配

4. 临时调整Ingress的service-upstream注解

当前配置了nginx.ingress.kubernetes.io/service-upstream: "true",该注解会让Ingress直接转发到Service的ClusterIP而非后端Pod。临时移除该注解后重新部署Ingress,测试访问是否正常:

  • 如果恢复正常,说明Service本身存在转发故障,回到步骤1重新排查Service与Pod的关联
  • 如果仍报错,问题大概率出在Pod内部服务或网络策略

5. 排除TLS证书干扰

虽然502错误通常与证书无关,但可临时关闭TLS配置进行测试:

  • 注释Ingress配置中的tls字段,用HTTP访问app.192.168.[something].nip.io
  • 如果HTTP访问正常,再检查dailygrind-tls Secret的证书和密钥是否有效,执行kubectl describe secret dailygrind-tls确认格式正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:18:38