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

Kubernetes Nginx Ingress返回404但后端服务正常的问题求助

解决Kubernetes Nginx Ingress返回404的排查步骤

1. 检查路径转发与后端路由的匹配性

当配置pathType: Prefix时,Nginx会将**完整请求路径(包括/posts)**转发给后端服务。如果你的query-srv服务仅监听根路径/而非/posts,就会返回404。

两种解决方式:

  • 调整后端服务的路由逻辑,支持/posts前缀的请求
  • 添加Ingress路径重写注解,转发时去掉/posts前缀:
    修改Ingress配置的metadata.annotations和path字段:
    metadata:
      name: ingress-serv
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/rewrite-target: /$1
    spec:
      rules:
      - host: posts.com
        http:
          paths:
            - path: /posts(/|$)(.*)
              pathType: Prefix  
              backend:
                service:
                  name: query-srv
                  port:
                    number: 4002
    

2. 验证Ingress资源的生效状态

执行命令查看Ingress的规则和事件:

kubectl describe ingress ingress-serv

重点检查Rules部分是否与配置一致,Events中是否存在服务找不到、端口不匹配等报错信息。

3. 测试Ingress Controller到后端服务的连通性

进入Nginx Ingress Controller的Pod,直接访问后端服务的ClusterIP验证:

# 获取Ingress Controller Pod名称
kubectl get pods -n ingress-nginx
# 进入Pod
kubectl exec -it <ingress-controller-pod-name> -n ingress-nginx -- /bin/bash
# 访问后端服务的目标路径
curl 10.97.137.162:4002/posts

如果这里返回404,说明后端服务本身不处理/posts路径;如果返回正常,问题出在Ingress的路径转发配置。

4. 确认本地DNS/hosts配置正确性

确保本地机器已将posts.com指向Kubernetes集群Ingress Controller的外部访问地址:

  • 若用NodePort,指向集群节点IP+NodePort端口
  • 若用LoadBalancer,指向负载均衡IP

执行curl -v posts.com/posts,确认请求确实发往了正确的地址。

5. 查看Ingress Controller日志定位问题

查看Nginx Ingress Controller的日志,可获取请求转发的详细信息:

kubectl logs -n ingress-nginx <ingress-controller-pod-name>

日志中会显示请求路径、转发的后端地址及返回状态码,帮助快速定位404的根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:19:52