Gcloud Kubernetes升级至v1.7.12后Nginx无法找到上游主机求助
排查Nginx Pod无法找到上游Gunicorn主机的问题
别慌,集群升级后碰到服务依赖问题挺常见的,咱们一步步拆解排查:
1. 先确认Gunicorn服务的基础状态
首先得确保Gunicorn本身是正常运行的,对应的Service也没出问题:
- 先查Gunicorn Pod的运行状态:
得保证所有Gunicorn Pod都是kubectl get pods -n <你的命名空间> | grep gunicornRunning状态,没有重启、崩溃或者Pending的情况。 - 再检查Gunicorn的Service配置:
确认Service的kubectl get svc -n <你的命名空间> | grep gunicornCLUSTER-IP是正常分配的,而且PORT(S)和Nginx配置里的上游端口完全一致(比如Gunicorn常用的8000端口)。 - 直接在Nginx Pod里测试Gunicorn Service的解析:
如果ping不通或者解析失败,大概率是集群DNS出问题了——升级时DNS组件偶尔会出现异常。kubectl exec -it <nginx-pod-name> -n <你的命名空间> -- ping gunicorn-svc
2. 核对Nginx配置里的上游地址
升级后会不会配置文件被改动了?或者原本的配置就有隐患?
- 查看Nginx Pod里的代理配置文件(比如
/etc/nginx/conf.d/proxy.conf,具体路径看你的部署):
重点确认上游配置是指向Gunicorn的Service名称,而不是固定的Pod IP(Pod重建后IP会变,正常应该用Service名做域名解析):kubectl exec -it <nginx-pod-name> -n <你的命名空间> -- cat /etc/nginx/conf.d/your-proxy.conf
如果配置里写的是旧的Pod IP,那肯定会找不到上游——这是新手常踩的坑。正确的上游配置示例:
upstream gunicorn_backend { server gunicorn-svc:8000; # 这里必须是Service名称+端口 }
3. 检查集群DNS组件的健康状态
Kubernetes里的Service发现全靠CoreDNS(旧版本是kube-dns),升级时这个组件很容易出问题:
- 查看kube-system下的DNS Pod状态:
确保所有DNS Pod都是kubectl get pods -n kube-system | grep dnsRunning状态,没有反复重启的情况。 - 验证DNS解析是否正常,用一个测试Pod来测:
如果解析失败,那就是DNS服务的问题,可以尝试重启DNS Pod:kubectl run -it --rm dns-test --image=busybox:1.28 -- nslookup gunicorn-svc.<你的命名空间>.svc.cluster.local
集群会自动重建DNS Pod,之后再测试解析。kubectl delete pods -n kube-system <dns-pod-name>
4. 排查网络策略或防火墙限制
升级后会不会默认启用了网络策略,或者节点防火墙规则被修改了?
- 查看当前命名空间的网络策略:
如果有新的网络策略,可能是它阻止了Nginx Pod访问Gunicorn的流量,可以先临时删除策略试试是否恢复。kubectl get networkpolicies -n <你的命名空间> - 要是节点上有防火墙(比如iptables、firewalld),可以检查是否有拦截集群内部流量的规则——不过这个可能需要运维权限,如果你没有的话,可以联系负责基础设施的同事帮忙确认。
5. 核对Service选择器与Pod标签的匹配度
有时候升级后,Gunicorn Pod的标签可能被误改,导致Service找不到对应的Pod:
- 查看Gunicorn Service的选择器:
kubectl describe svc <gunicorn-svc-name> -n <你的命名空间> | grep Selector - 再查看Gunicorn Pod的标签:
确保两者的键值对完全匹配,比如Service选择器是kubectl describe pod <gunicorn-pod-name> -n <你的命名空间> | grep Labelsapp: gunicorn,Pod标签也必须有app: gunicorn。
先从这几个方向查,基本能定位到问题。比如如果DNS解析失败,就聚焦修复DNS;如果标签不匹配,调整标签或者Service选择器就行。
内容的提问来源于stack exchange,提问作者cr8ivecodesmith
相关产品推荐
相关产品推荐

