Nginx Ingress无法访问服务返回503错误,请求排查帮助
问题排查与修复方案
核心问题:YAML配置缩进错误
Kubernetes对YAML的缩进要求极为严格,你的两个配置文件都存在缩进问题,这是导致503错误和服务解析失败的根本原因:
1. Ingress配置的缩进错误
backend.service下的name和port没有正确缩进,导致Ingress无法识别后端服务:
错误片段:
backend: service: name: posts-clusterip-srv port: number: 7000
修正后:
backend: service: name: posts-clusterip-srv port: number: 7000
2. Service配置的缩进错误
Service部分的顶级字段(apiVersion、kind、spec)多了前置空格,导致YAML解析失败,Service根本没被正确创建:
错误片段:
--- apiVersion: v1 kind: Service metadata: name: posts-clusterip-srv spec: selector: app: posts
修正后:
--- apiVersion: v1 kind: Service metadata: name: posts-clusterip-srv spec: selector: app: posts ports: - name: posts protocol: TCP port: 7000 targetPort: 7000
其他问题说明与验证步骤
关于curl http://posts-clusterip-srv:7000解析失败
ClusterIP类型的服务仅在Kubernetes集群内部能通过DNS解析,集群外部直接执行这个命令肯定会失败。要测试服务可用性,建议在集群内部启动临时Pod测试:
kubectl run -it --rm --image=curlimages/curl curl-test -- curl http://posts-clusterip-srv:7000
修复后的验证流程
- 重新应用修正后的配置文件:
kubectl apply -f ingress.yaml kubectl apply -f posts-depl-svc.yaml - 检查Pod状态,确保
posts-depl的Pod处于Running:kubectl get pods - 检查Service是否关联到Pod,查看
Endpoints字段是否有Pod的IP:kubectl describe service posts-clusterip-srv - 检查Ingress的后端配置是否正确:
kubectl describe ingress ingress-srv - 确保本地
hosts文件已映射posts.com到Ingress控制器的外部IP:
找到Ingress控制器的外部IP:
然后在本地kubectl get svc -n ingress-nginxhosts文件(Windows为C:\Windows\System32\drivers\etc\hosts,Linux/macOS为/etc/hosts)添加:<Ingress控制器外部IP> posts.com
内容的提问来源于stack exchange,提问作者Negin
相关产品推荐
相关产品推荐

