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

GKE集群Ingress-Nginx返回404 Not Found问题排查求助

GKE集群Nginx Ingress返回404 Not Found排查与解决

我是K8s新手,正在搭建GKE集群。之前用Service和前端镜像内置的Nginx实现了基本可用状态,但路由功能不正常,查资料后决定用Ingress组件。部署nginx-ingress后一直收到404 Not Found响应,反复排查无果,求助定位问题。

部署与配置信息

部署Ingress的命令

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml

Ingress配置文件

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    nginx.ingress.kubernetes.io/user-regex: "true"
    nginx.ingress.kuberenetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"
    nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,X-LANG,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Api-Key,X-Device-Id,Access-Control-Allow-Origin"
  
spec:
  rules:
  - http:
      paths:
      - path: /?(.*)
        pathType: Prefix
        backend:
          service:
            name: client-service
            port:
              number: 3000
      - path: /api/?(.*)
        pathType: Prefix
        backend:
          service:
            name: server-service
            port:
              number: 5000
  ingressClassName: nginx

客户端Service配置

apiVersion: v1
kind: Service
metadata:
  name: client-service
spec:
  ports:
    - port: 3000
      protocol: TCP
      targetPort: http-port
  selector:
    app: client
  type: ClusterIP

客户端Deployment配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
        - name: client
          image: jowz/client:v4.2
          ports:
            - containerPort: 3000
              name: http-port
  selector:
    matchLabels:
      app: client

当前集群状态

Pod状态

NAMESPACE       NAME                                                 READY   STATUS      RESTARTS   AGE
default         client-deployment-9ccf8cf87-27pvv                    1/1     Running     0          87m
default         mongodb                                              1/1     Running     0          21h
default         server-deployment-df679664f-q9fjw                    1/1     Running     0          87m
ingress-nginx   ingress-nginx-admission-create-tsp4n                 0/1     Completed   0          9m23s
ingress-nginx   ingress-nginx-admission-patch-q7spm                  0/1     Completed   1          9m23s
ingress-nginx   ingress-nginx-controller-86b55bb769-2bqs5            1/1     Running     0          9m24s
kube-system     event-exporter-gke-d4b7ff94-4st8l                    2/2     Running     0          21h
kube-system     fluentbit-gke-xlv7v                                  2/2     Running     0          21h
kube-system     gke-metrics-agent-fhnmq                              2/2     Running     0          21h
kube-system     konnectivity-agent-697c66b96-bvfdw                   1/1     Running     0          21h
kube-system     konnectivity-agent-autoscaler-864fff96c4-n9tlp       1/1     Running     0          21h
kube-system     kube-dns-autoscaler-758c4689b9-7gzx8                 1/1     Running     0          21h
kube-system     kube-dns-fc686db9b-hjl4d                             4/4     Running     0          21h
kube-system     kube-proxy-gke-octodemo-default-pool-20afc590-94qj   1/1     Running     0          21h
kube-system     l7-default-backend-9db4bd868-zgx8s                   1/1     Running     0          21h
kube-system     metrics-server-v0.5.2-66bbcdbffc-bmzp6               2/2     Running     0          21h
kube-system     pdcsi-node-fqzzl                                     2/2     Running     0          21h

Service状态

default         client-service                       ClusterIP      10.92.6.30     <none>          3000/TCP                     88m
default         kubernetes                           ClusterIP      10.92.0.1      <none>          443/TCP                      21h
default         mongodb-service                      ClusterIP      10.92.4.232    <none>          27017/TCP                    21h
default         server-service                       ClusterIP      10.92.15.190   <none>          5000/TCP                     88m
ingress-nginx   ingress-nginx-controller             LoadBalancer   10.92.2.242    35.235.98.121   80:30275/TCP,443:30487/TCP   10m
ingress-nginx   ingress-nginx-controller-admission   ClusterIP      10.92.13.144   <none>          443/TCP                      10m
kube-system     default-http-backend                 NodePort       10.92.14.152   <none>          80:30200/TCP                 21h
kube-system     kube-dns                             ClusterIP      10.92.0.10     <none>          53/UDP,53/TCP                21h
kube-system     metrics-server                       ClusterIP      10.92.11.249   <none>          443/TCP                      21h

测试结果

curl访问返回404

*   Trying 35.235.98.121:80...
* Connected to 35.235.98.121 (35.235.98.121) port 80 (#0)
> GET / HTTP/1.1
> Host: 35.235.98.121
> User-Agent: curl/7.81.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Tue, 18 Jul 2023 21:05:23 GMT
< Content-Type: text/html
< Content-Length: 146
< Connection: keep-alive
< 
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host 35.235.98.121 left intact

ping结果正常

--- 35.235.98.121 ping statistics ---
43 packets transmitted, 43 received, 0% packet loss, time 42063ms
rtt min/avg/max/mdev = 21.119/36.551/206.584/33.645 ms

问题定位与修复方案

  1. 注解拼写错误:Ingress配置中nginx.ingress.kuberenetes.io/rewrite-target的kuberenetes拼写错误,正确应为kubernetes。这个错误会导致重写规则完全不生效,请求无法正确转发到后端服务,是404的核心原因。修正后需重新应用Ingress配置:

    kubectl apply -f <your-ingress-file.yaml>
    
  2. 验证重写规则适配:Ingress-NGINX v1.1.0中,Prefix类型路径配合正则重写需确保规则逻辑正确。修正拼写后,可通过查看Ingress Controller生成的NGINX配置确认规则是否生效:

    kubectl exec -n ingress-nginx ingress-nginx-controller-86b55bb769-2bqs5 -- cat /etc/nginx/nginx.conf | grep -A 10 "location"
    
  3. 后端服务连通性验证:在Ingress Controller Pod内直接访问后端服务,确认服务本身是否正常响应:

    kubectl exec -n ingress-nginx ingress-nginx-controller-86b55bb769-2bqs5 -- curl client-service.default.svc.cluster.local:3000
    kubectl exec -n ingress-nginx ingress-nginx-controller-86b55bb769-2bqs5 -- curl server-service.default.svc.cluster.local:5000/api
    
  4. 检查Ingress资源状态:查看Ingress资源的事件日志,确认配置是否被正确加载:

    kubectl describe ingress ingress-service
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:17:05