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
问题定位与修复方案
注解拼写错误:Ingress配置中
nginx.ingress.kuberenetes.io/rewrite-target的kuberenetes拼写错误,正确应为kubernetes。这个错误会导致重写规则完全不生效,请求无法正确转发到后端服务,是404的核心原因。修正后需重新应用Ingress配置:kubectl apply -f <your-ingress-file.yaml>验证重写规则适配: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"后端服务连通性验证:在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检查Ingress资源状态:查看Ingress资源的事件日志,确认配置是否被正确加载:
kubectl describe ingress ingress-service
内容的提问来源于stack exchange,提问作者Jowz
相关产品推荐
相关产品推荐

