Kubernetes配置Nginx Ingress出现502 Bad Gateway问题求助
Kubernetes Nginx Ingress 502 Bad Gateway 排查方案
针对你配置的Ingress和Service出现502错误,按以下步骤逐一排查:
1. 验证后端Pod状态与标签匹配
首先确认对应Service关联的Pod是否正常运行,且标签与Service的selector一致:
- 查看
hello-v1相关Pod:
确保Pod状态为kubectl get pods -l app=hello-v1Running,且标签包含app=hello-v1。 - 同理检查
hello-v2的Pod:kubectl get pods -l app=hello-v2
2. 检查Service与Pod的关联(Endpoints)
Service通过Endpoints关联Pod,如果Endpoints为空,说明没有匹配到Pod:
- 查看Service的Endpoints信息:
在输出的kubectl describe service hello-v1-svcEndpoints部分,确认有Pod的IP地址列出。如果为空,检查Pod的标签是否与Service的spec.selector完全一致。
3. 验证Pod内应用的可用性
确认Pod内的服务确实在targetPort(8080)上监听并正常响应:
- 进入Pod内部测试本地访问:
如果返回非200状态或连接失败,说明Pod内的应用未正常启动,或端口配置错误。kubectl exec <hello-v1-pod-name> -- curl localhost:8080
4. 检查Ingress Controller日志
Nginx Ingress Controller的日志会直接显示后端连接失败的原因(如连接拒绝、超时等):
- 先找到Ingress Controller所在的命名空间(通常是
ingress-nginx)和Pod名称:kubectl get pods -n ingress-nginx - 查看日志:
搜索kubectl logs -n ingress-nginx <controller-pod-name>502或connection refused等关键词,定位具体错误原因。
5. 测试集群内部Service的可达性
从Ingress Controller Pod内部直接访问Service,验证集群网络连通性:
kubectl exec -n ingress-nginx <controller-pod-name> -- curl hello-v1-svc.default.svc.cluster.local:80
如果访问失败,说明Service或Pod存在网络问题;如果成功,问题可能出在Ingress配置或外部访问的DNS/hosts解析。
6. 确认Ingress配置与IngressClass匹配
- 检查集群中是否存在名为
nginx的IngressClass:
确保Ingress Controller已关联该IngressClass(通常在Controller的部署配置中通过kubectl get ingressclasses--ingress-class=nginx参数指定)。 - 查看Ingress的状态与事件:
确认Events中没有同步失败的错误信息。kubectl describe ingress ingress
7. 验证外部访问的DNS/Hosts配置
确保你的本地机器已将v1.peladonerd.local和v2.peladonerd.local解析到Ingress Controller的外部IP:
- 查看Ingress Controller的外部IP:
kubectl get service -n ingress-nginx ingress-nginx-controller - 在本地
hosts文件中添加对应映射(以Linux/macOS为例,文件路径为/etc/hosts):<ingress-external-ip> v1.peladonerd.local <ingress-external-ip> v2.peladonerd.local
内容的提问来源于stack exchange,提问作者Edgar Alejandro Fernndez Avila
相关产品推荐
相关产品推荐

