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

如何在Ingress规则中仅对根路径重写目标地址?

解决根路径重写、其他路径正常访问的Ingress配置问题

你的需求是仅根路径/重写到/somePath,其余路径保持原样转发,现有配置未达预期是因为多Ingress规则冲突、正则配置不完整导致的,下面给出正确方案和问题分析:

正确的单Ingress配置方案

将所有规则合并到一个Ingress资源中,利用Nginx Ingress的匹配优先级与正则规则实现需求:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-test-web-app
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/upstream-vhost: "example.com"
    # 若Controller支持per-path注解,可移除此处全局重写,给根路径单独配置;否则保留全局重写
    nginx.ingress.kubernetes.io/rewrite-target: /somePath
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - test.example.com
      secretName: tls-example
  rules:
    - host: test.example.com
      http:
        paths:
          # 精确匹配根路径,触发重写
          - path: ^/$
            pathType: ImplementationSpecific
            backend:
              service:
                name: webapp
                port:
                  name: http
          # 正则匹配所有非根路径,直接转发不重写
          - path: /(.+)
            pathType: ImplementationSpecific
            backend:
              service:
                name: webapp
                port:
                  name: http

关键细节说明

  1. 合并Ingress资源:避免多Ingress规则冲突,确保匹配顺序可控。Nginx Ingress会优先匹配更精确的正则规则(如^/$),再处理通配规则。
  2. 根路径精确匹配:用正则^/$精准匹配根路径,配合全局rewrite-target完成重定向;若你的Ingress Controller支持per-path注解,也可以给根路径单独配置nginx.ingress.kubernetes.io/rewrite-target: /somePath,避免全局重写影响其他路径。
  3. 非根路径正则匹配:/(.+)会匹配所有/xxx、/xxx/yyy这类包含子路径的请求,直接转发到后端服务的对应路径,保证原有路径逻辑正常。

你之前配置的问题分析

  1. 多Ingress规则冲突:两个Ingress指向同一域名时,部分Ingress Controller合并规则会优先匹配第一个Ingress的Prefix: /(该规则会匹配所有请求,包括根路径),导致第二个Ingress的精确匹配规则被忽略,重写不生效。
  2. 正则配置缺陷:单独给ingress-test-web-app-other配置/(.+)时,根路径/因不满足至少一个字符的正则要求,无法被匹配,直接返回404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:45:34