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

原生K8s YAML运行正常,封装为Helm Chart部署后Nginx报上游连接拒绝错误

问题排查方案

1. 优先核对Service选择器与Pod标签的匹配性

你当前Service的selector配置是同时匹配microservice: {{ .Values.microservice }}和Helm默认生成的example.selectorLabels,原生YAML部署时可能没有同时要求这两个标签,导致Service找不到对应的后端Pod。

  • 执行命令查看当前运行Pod的标签:kubectl get pod -n <你的业务命名空间> --show-labels
  • 执行命令查看Service的选择器配置:kubectl describe svc -n <你的业务命名空间> <你的Service名称>
  • 检查Service的selector字段是否完全匹配Pod的labels,只要有一个键值对不匹配,Service就不会将流量转发到对应Pod,就会出现503错误。

如果不匹配,两种修复方案:

  • 方案1:在Deployment的Pod模板labels中补充microservice: {{ .Values.microservice }}字段,和Service的selector对齐
  • 方案2:删除Service的selector中microservice: {{ .Values.microservice }}这一行,只用默认的selectorLabels匹配

2. 核对ExternalName Service的目标域名是否正确

你的ExternalName指向的是example.example-tpvs.svc.cluster.local,需要确认:

  • Helm部署的Service所在的命名空间是否为example-tpvs
  • Helm生成的Service名称是否为example,如果你的Helm release名称不是默认的,{{ include "example.fullname" . }}生成的名称会带release前缀,比如你用helm install test ./chart部署,生成的Service名称就是test-example,这时候ExternalName的域名就不对了,需要修改为对应生成的Service全名。

3. 验证Service连通性

如果前两步都没问题,执行下面的命令验证服务是否可达:

  • 启动临时测试Pod:kubectl run -it --rm debug --image=busybox:1.28 --restart=Never -- sh
  • 在测试Pod内执行命令访问业务Service:wget -O- http://<你的Service名称>.<你的业务命名空间>.svc.cluster.local

如果访问不通,说明Service到Pod的链路有问题,再进一步排查Pod端口是否真的监听了80:

  • 执行命令进入业务Pod:kubectl exec -it <你的Pod名称> -n <你的业务命名空间> -- sh
  • 执行命令检查端口监听:netstat -tunlp | grep 80,确认你的应用确实在监听0.0.0.0:80,而不是127.0.0.1:80

内容的提问来源于stack exchange,提问作者José Pablo Medina Grande

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:07