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

GKE Autopilot中ingress-nginx rewrite-target路径无效问题求助

GKE Autopilot下Ingress-Nginx rewrite-target配置异常问题

环境信息

  • GKE Autopilot版本:v1.25.5-gke.2000
  • Ingress-Nginx Helm版本:4.5.0

问题情况

替换原生GCE负载均衡器为ingress-nginx后,不配置rewrite-target时Ingress可正常工作,但添加该注解后出现异常:

  • 日志先显示配置验证通过,随后报错路径无效
  • 非正则路径(如/swagger/index.html)可正常访问,但host.example.com/admin/portal/swagger.index.html无法访问

原Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  namespace: something
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
  - secretName: ingress-ssl
    hosts:
    - host.example.com
  rules:
  - host: host.example.com
    http:
      paths:
      - path: "/admin/portal(/|$)(.*)"
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              name: http
      - path: /
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              name: http

错误日志

"successfully validated configuration, accepting" ingress="something/ingress-nginx"
ingress something/ingress-nginx contains invalid path /admin/portal(/|$)(.*)

问题原因及修复方案

核心问题

  1. PathType不匹配:你设置了pathType: Prefix,但路径使用了正则表达式语法,而Prefix类型仅支持简单前缀匹配,不允许包含(、|这类正则特殊字符,因此控制器判定路径无效。
  2. 未开启正则匹配开关:Ingress-Nginx默认不会将路径解析为正则表达式,必须添加专门注解启用该功能。

修改后的配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  namespace: something
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 开启正则匹配支持
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  tls:
  - secretName: ingress-ssl
    hosts:
    - host.example.com
  rules:
  - host: host.example.com
    http:
      paths:
      - path: "/admin/portal(/|$)(.*)"
        # 改用ImplementationSpecific,让Ingress-Nginx自行处理路径匹配逻辑
        pathType: ImplementationSpecific
        backend:
          service:
            name: api-service
            port:
              name: http
      - path: /
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              name: http

说明

  • 添加nginx.ingress.kubernetes.io/use-regex: "true"后,Ingress-Nginx会将路径当作正则表达式解析,/admin/portal(/|$)(.*)的写法就合法了。
  • 将正则路径的pathType改为ImplementationSpecific,该类型允许Ingress控制器(此处为Ingress-Nginx)自定义路径匹配规则,适配正则使用场景。
  • 修改后,host.example.com/admin/portal/swagger.index.html会被重写为/swagger.index.html转发到api-service,即可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:46:06