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

首次Kubernetes部署失败求助:YAML配置问题排查

排查Kubernetes应用Ingress访问错误的步骤

按以下顺序逐步排查,定位问题所在:

1. 确认Ingress Controller已部署并运行

Ingress资源只是流量转发规则,必须搭配对应的Ingress Controller(比如nginx-ingress)才能生效。执行以下命令检查:

kubectl get pods -n ingress-nginx

如果没有任何运行中的Pod,说明你还没部署Ingress Controller,需要先完成这一步(比如用helm或官方yaml部署nginx-ingress)。

2. 验证Pod与Service的基础连通性

先排除Pod和Service层面的问题:

  • 检查Pod状态:确保所有副本正常运行
    kubectl get pods
    
    输出里STATUS列必须是Running,如果有CrashLoopBackOff或其他异常,先查看Pod日志定位启动问题:kubectl logs <pod-name>。
  • 检查Service与Pod的关联:查看Service的端点是否存在Pod IP
    kubectl describe service app-service
    
    找到Endpoints字段,如果是空值,说明Deployment的Pod标签和Service的selector不匹配(你的配置里标签是app: learning-app-pod,看起来匹配,但可以用kubectl get pods --show-labels确认Pod实际标签)。
  • 集群内测试Service访问:用临时Pod测试Service是否能返回正常响应
    kubectl run -it --rm --image=busybox:1.36 curl-test -- curl app-service:8012
    
    如果这里返回错误,说明问题出在Pod或Service,和Ingress无关,先解决这部分。

3. 检查Ingress配置与状态

  • 查看Ingress的同步状态和事件:
    kubectl describe ingress app-ingress
    
    检查Events字段,看是否有Ingress Controller返回的错误(比如规则同步失败)。
  • 路径匹配与重写问题:
    你的Ingress配置里,/abc路径会把完整的/abc请求转发给Pod,如果应用没有对应的/abc路由,就会返回404。这种情况下需要添加路径重写注解,以nginx-ingress为例,修改ingress.yaml:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: app-ingress
      labels:
        name: app-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      rules:
      - host: localhost
        http:
          paths:
          - pathType: Prefix
            path: "/(|$)(.*)"
            backend:
              service:
                name: app-service
                port: 
                  number: 8012
          - pathType: Prefix
            path: "/abc(/|$)(.*)"
            backend:
              service:
                name: app-service
                port: 
                  number: 8012
    
    这个配置会把/abc/xxx重写为/xxx转发给应用,适配只处理根路径的应用。

4. 本地访问的网络配置问题

  • 如果用Minikube:需要执行minikube tunnel暴露Ingress的LoadBalancer端口,之后用kubectl get ingress获取的ADDRESS访问,而非直接用localhost。
  • 如果用Docker Desktop:确认Ingress Controller的端口已映射到本地80端口,或者直接访问Ingress的ADDRESS。
  • 检查hosts文件:如果指定了host: localhost,确保localhost指向Ingress Controller的IP(部分环境可能需要手动添加)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:40:20