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

ingress-nginx多路径场景下如何单独重写指定访问路径

解决方案

你可以通过创建独立的专属Ingress资源实现需求,完全不需要修改现有main-ingress的任何配置,也不会影响其他已有路由规则。

核心逻辑

Ingress资源的注解仅作用于当前资源本身,你可以单独创建一个只处理/servicex路径的Ingress,在该Ingress内配置重写规则,和原有Ingress完全隔离。

配置示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: servicex-route-ingress
  annotations:
    # 仅作用于当前Ingress的重写规则:将/servicex/后续路径拼接到/serviceb/之后
    nginx.ingress.kubernetes.io/rewrite-target: /serviceb/$2
    # 保持和原有Ingress一致的基础配置即可
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/proxy-body-size: "100m"
spec:
  tls:
  - hosts:
    - subdomain-a.domain.com
    secretName: domain-com-secret
  # 如果集群指定了ingressClassName,请和原有main-ingress保持一致
  # ingressClassName: nginx
  rules:
  - host: subdomain-a.domain.com
    http:
      paths:
        - path: /servicex(/|$)(.*)
          pathType: Prefix
          backend:
            service:
              name: b-service
              port:
                number: 80

生效后效果

  • 访问https://subdomain-a.domain.com/serviceb/* 完全沿用原有逻辑,无任何变更
  • 访问https://subdomain-a.domain.com/servicex/foo 会在服务端内部重写为/serviceb/foo由b-service响应,用户侧URL不会发生跳转

可选方案:无需新增Ingress的配置方式

如果你不想新增独立Ingress,也可以在现有main-ingress中调整,操作如下:

  1. 在原有main-ingress的annotations中新增:nginx.ingress.kubernetes.io/rewrite-target: /$2
  2. 在subdomain-a.domain.com的路径规则中新增如下配置:
- path: /servicex(/|$)(.*)
  pathType: Prefix
  backend:
    service:
      name: b-service
      port:
        number: 80

注意:该方案要求现有Ingress的所有其他路径都不需要重写逻辑,否则会影响已有路由,因此更推荐使用第一种独立Ingress的方案。

内容的提问来源于stack exchange,提问作者William Añez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:57:04