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

Kubernetes Ingress资源路径无法正确传递至后端服务求助

问题原因

当前配置里的nginx.ingress.kubernetes.io/rewrite-target: /会把所有匹配/api/user-management/前缀的请求,直接重写到后端服务的根路径/,完全丢弃了/api/user-management/之后的路径内容,所以不管访问/api/user-management/test还是其他子路径,后端收到的都是/请求。

解决方案

用Nginx Ingress的正则捕获组功能,保留路径的剩余部分并传递给后端服务。修改后的Ingress配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: user-management-ingress
  annotations:
    # 通过捕获组保留路径后缀,$2对应第二个捕获组的内容
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: react-frontend
            port:
              number: 80
      # 正则匹配:捕获/api/user-management/之后的所有路径内容
      - path: /api/user-management(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: user-management
            port:
              number: 80
配置说明
  1. 路径正则:/api/user-management(/|$)(.*)
    • (/|$):匹配路径末尾的斜杠或路径结束,避免误匹配类似/api/user-management-other的路径
    • (.*):捕获/api/user-management/之后的所有内容,对应rewrite-target中的$2
  2. rewrite-target:/$2会把捕获到的路径后缀拼接到后端服务的根路径后,比如访问/api/user-management/test,后端收到的请求路径是/test
  3. pathType:设置为ImplementationSpecific,因为使用了正则表达式,Kubernetes原生的Prefix或Exact类型不支持正则语法,需要交给Nginx Ingress Controller处理匹配逻辑
验证步骤
  1. 应用修改后的Ingress配置:
    kubectl apply -f your-ingress-file.yaml
    
  2. 等待Ingress Controller更新配置后,测试访问:
    curl http://your-domain/api/user-management/test
    
    此时后端服务应能正确接收/test路径的请求
其他注意事项
  • 确保Nginx Ingress Controller版本在v0.22.0及以上,该版本开始支持正则捕获组功能
  • 如果后端服务期望接收完整的/api/user-management/test路径,可以把rewrite-target调整为/api/user-management/$2,根据实际需求修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:42:35