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

Kubernetes Ingress配置问题:如何暴露多API路径

问题分析与修复方案

当前Ingress配置无法生效的核心原因是路径匹配规则与rewrite逻辑不匹配Service的实际API路径:

  • 现有path: /(/|$)(.*)的正则表达式会错误拆分请求路径,结合rewrite-target: /$2会导致转发到Service的路径丢失/api前缀,与Service提供的API路径完全不匹配。
  • 这种复杂且不合理的正则配置容易导致Nginx Ingress的路由规则解析异常,甚至无法匹配到任何请求。

具体修改点

  1. 移除不必要的正则配置:如果你的需求是直接通过http://<公网IP>/api/xxx访问Service对应的API,无需使用正则匹配,前缀匹配更简单可靠。
  2. 调整路径匹配规则:使用path: /api结合pathType: Prefix,匹配所有以/api开头的请求。
  3. 删除多余的rewrite注解:不需要修改请求路径,直接原封不动转发到Service即可。

修复后的完整Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: weather-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: weather-app
            port:
              number: 80

可选:正则匹配所有路径的配置

如果需要通过Ingress根路径(如http://<公网IP>/xxx)也能访问Service的API,或者需要更灵活的路径匹配,可以保留正则配置,但修正规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: weather-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: weather-app
            port:
              number: 80

该配置会将所有请求路径原封不动转发到Service,比如http://<公网IP>/api/employee会直接转发到Service的/api/employee。

验证步骤

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

kubectl apply -f <你的Ingress配置文件名>.yaml

等待1-2分钟让Ingress控制器同步规则,再用curl测试:

curl http://<公网IP>/api/weatherforecast
curl http://<公网IP>/api/employee/getemployeebyid/1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:32:26