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

Kubernetes Ingress返回404问题排查求助

Kubernetes Ingress 404 Not Found 问题排查

我正在配置Kubernetes集群的Ingress组件,用Postman测试端点时持续返回404 Not Found错误。已尝试切换HTTP与HTTPS协议测试,问题依旧。之前用localhost测试,现在改为acme.com作为路由URL。相关配置文件如下:

Ingress配置文件

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: acme.com
      http:
        paths:
          - path: /api/platforms
            pathType: Prefix
            backend:
              service:
                name: platforms-clusterip-service
                port:
                  number: 80
          - path: /api/c/platforms
            pathType: Prefix
            backend:
              service:
                name: commands-clusterip-service
                port:
                  number: 80

部署配置文件

Platforms服务部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: platforms-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: platformservice
  template:
    metadata:
      labels:
        app: platformservice
    spec:
      containers:
        - name: platformservice
          image: revlisc/platformservice:latest
---
apiVersion: v1
kind: Service
metadata:
  name: platforms-clusterip-service
spec:
  type: ClusterIP
  selector:
    app: platformservice
  ports:
  - name: platformservice
    protocol: TCP
    port: 80
    targetPort: 80

Commands服务部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: commands-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: commandservice
  template:
    metadata:
      labels:
        app: commandservice
    spec:
      containers:
        - name: commandservice
          image: revlisc/commandservice:latest
---
apiVersion: v1
kind: Service
metadata:
  name: commands-clusterip-service
spec:
  type: ClusterIP
  selector:
    app: commandservice
  ports:
  - name: commandservice
    protocol: TCP
    port: 80
    targetPort: 80

NodePort服务配置

apiVersion: v1
kind: Service
metadata:
  name: platformnpservice-srv
spec:
  type: NodePort
  selector:
    app: platformservice
  ports:
    - name: platformservice
      protocol: TCP
      port: 80
      targetPort: 80

排查与解决步骤

  1. 本地DNS映射配置
    编辑本地hosts文件,添加acme.com到Kubernetes节点IP的映射:

    # Windows路径:C:\Windows\System32\drivers\etc\hosts
    # Linux/macOS路径:/etc/hosts
    <你的K8s节点IP>  acme.com
    

    没有该映射的话,请求无法指向集群Ingress控制器。

  2. Ingress控制器状态验证
    执行命令确认Ingress控制器Pod正常运行:

    kubectl get pods -n ingress-nginx
    

    若Pod未就绪,先修复Ingress控制器部署。

  3. Ingress路径规则调整
    当前配置的rewrite-target: /结合Prefix路径类型会导致路径匹配异常。比如请求acme.com/api/platforms/v1会被重写为/v1,若后端服务期望原路径则返回404。建议修改Ingress配置:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-srv
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/use-regex: 'true'
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      rules:
        - host: acme.com
          http:
            paths:
              - path: /api/platforms(/|$)(.*)
                pathType: ImplementationSpecific
                backend:
                  service:
                    name: platforms-clusterip-service
                    port:
                      number: 80
              - path: /api/c/platforms(/|$)(.*)
                pathType: ImplementationSpecific
                backend:
                  service:
                    name: commands-clusterip-service
                    port:
                      number: 80
    

    该配置会将/api/platforms/xxx重写为/xxx,适配后端服务的接口路径;若后端服务接口本身包含/api/platforms,则移除rewrite-target注解即可。

  4. 后端服务可达性测试
    在集群内部测试后端Service是否正常响应:

    # 临时启动busybox Pod进入集群网络
    kubectl run -it --rm busybox --image=busybox:1.28 -- sh
    # 测试platforms服务接口
    wget -qO- http://platforms-clusterip-service/api/platforms
    # 测试commands服务接口
    wget -qO- http://commands-clusterip-service/api/c/platforms
    

    若此处返回404,说明问题出在后端服务本身,需检查服务的接口路径配置。

  5. Ingress资源状态检查
    执行命令确认Ingress资源已绑定正确的IP:

    kubectl get ingress ingress-srv
    

    确保ADDRESS字段显示Ingress控制器的IP或负载均衡器IP。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:05:12