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

如何修复Kubernetes Ingress多API配置中的404 NotFound问题?

问题分析与修复方案

问题根源

当前Ingress配置中,path: /catalog搭配pathType: Prefix时,Nginx Ingress会将完整请求路径(比如/catalog或/catalog/products)直接转发给后端myapp-catalog-service。如果你的后端服务本身只监听根路径/(而非/catalog),后端找不到对应端点就会返回404。

修复方案

方案1:启用路径重写(推荐)

通过Nginx Ingress的重写注解,将请求路径中的/catalog前缀剥离后转发给后端。修改后的配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-api-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: api.myapp.com
    http:
      paths:
      - pathType: Prefix
        path: /catalog(/|$)(.*)
        backend:
          service:
            name: myapp-catalog-service
            port: 
              number: 80
      - pathType: Prefix
        path: /identity(/|$)(.*)
        backend:
          service:
            name: myapp-identity-service
            port: 
              number: 80

配置说明:

  • nginx.ingress.kubernetes.io/use-regex: "true":允许路径使用正则表达式匹配
  • path: /catalog(/|$)(.*):用正则捕获路径,/catalog后面的部分(包括空)会被匹配到$2分组
  • rewrite-target: /$2:将转发给后端的路径重写为/$2,比如:
    • 请求api.myapp.com/catalog → 转发到后端的/
    • 请求api.myapp.com/catalog/products/1 → 转发到后端的/products/1

方案2:调整后端服务路径(不推荐,除非必须)

如果可以修改后端服务的配置,让它直接监听/catalog路径(比如调整服务的路由前缀为/catalog),那么原Ingress配置无需修改就能正常工作。但这种方式会耦合Ingress路径和服务内部路由,灵活性较低。

验证方法

修改配置后,执行以下命令更新Ingress:

kubectl apply -f your-ingress-file.yaml

然后测试访问api.myapp.com/catalog,确认返回正常响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:31:07