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

Kubernetes Pod启动正常但访问时出现Nginx 502 Bad Gateway错误求助

Kubernetes Ingress返回502 Bad Gateway问题排查与解决

已知信息

  • Pod已正常启动,但访问site.myname.com时显示nginx的502错误
  • 已执行排查:核对Dockerfile端口、Pod标签,调整端口/命名空间配置,对比可用YAML文件

针对性排查步骤

1. 验证Service与Pod的连通性

先确认Service到Pod的链路是否正常:

  • 启动测试Pod并访问Service端口:
kubectl run -it --rm --image=busybox:1.36 test-pod -n my-name
wget -O- http://my-name:5000
  • 若访问失败,检查容器端口监听状态:
kubectl exec -it <pod-name> -n my-name -- netstat -tulpn

确认5000端口处于LISTEN状态

  • 核对Service selector与Pod标签是否完全匹配:
kubectl get service my-name -n my-name -o jsonpath='{.spec.selector}'
kubectl get pod -n my-name -o jsonpath='{.items[0].metadata.labels}'

确保app: my-name标签无大小写、空格等差异

2. 查看Ingress Controller日志

获取nginx-ingress控制器的错误详情:

kubectl logs -n kube-system -l app=nginx-ingress -c nginx-ingress-controller

重点关注与site.myname.com、my-name Service相关的错误,常见原因包括后端无可用端点、连接被拒绝、TLS配置异常等

3. 检查Endpoints状态

确认Service已关联到正常的Pod端点:

kubectl get endpoints my-name -n my-name
  • 若ADDRESSES为空:说明Service selector未匹配到Pod,回到步骤1核对标签
  • 若有地址但仍无法访问:检查Pod网络策略、节点防火墙是否限制了端口访问

4. 验证应用监听地址

环境变量SOMEURLS配置为http://*:5000;http://*:5105,部分应用可能实际仅监听回环接口,需验证:

# 容器内访问localhost
kubectl exec -it <pod-name> -n my-name -- curl http://localhost:5000
# 用Pod IP访问
kubectl exec -it <pod-name> -n my-name -- curl http://<pod-ip>:5000

若localhost可访问但Pod IP不行,说明应用需修改为监听0.0.0.0而非127.0.0.1

5. 核对TLS证书配置

当前YAML存在明显配置冲突:

  • Certificate的dnsNames为"my-name",但Ingress TLS的hosts是"site.myname.com",域名不匹配会导致cert-manager无法签发有效证书,进而引发Ingress转发异常

修改后的Certificate配置示例:

# LetsEncrypt certificate
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: my-name
  namespace: my-name  # 需与Ingress同命名空间
  labels:
    env: "Test"
spec:
  secretName: my-name
  dnsNames:
    - "site.myname.com"  # 与Ingress域名保持一致
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer

验证证书状态:

kubectl get certificate my-name -n my-name

确保状态为Ready


额外优化点

  • 当前PodDisruptionBudget未指定namespace,默认创建在default空间,无法匹配my-name空间的Pod,可添加namespace: my-name或删除该冗余配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:29:52