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

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

修复后的验证流程

  1. 重新应用修正后的配置文件:
    kubectl apply -f ingress.yaml
    kubectl apply -f posts-depl-svc.yaml
    
  2. 检查Pod状态,确保posts-depl的Pod处于Running:
    kubectl get pods
    
  3. 检查Service是否关联到Pod,查看Endpoints字段是否有Pod的IP:
    kubectl describe service posts-clusterip-srv
    
  4. 检查Ingress的后端配置是否正确:
    kubectl describe ingress ingress-srv
    
  5. 确保本地hosts文件已映射posts.com到Ingress控制器的外部IP:
    找到Ingress控制器的外部IP:
    kubectl get svc -n ingress-nginx
    
    然后在本地hosts文件(Windows为C:\Windows\System32\drivers\etc\hosts,Linux/macOS为/etc/hosts)添加:
    <Ingress控制器外部IP> posts.com
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:45:57