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

如何为Istio URI正则表达式模式设置否定条件

Istio虚拟服务配置:仅转发非v2的/guest流量

你的问题出在原正则的匹配逻辑上:\w*只能匹配字母、数字和下划线,没法覆盖/guest/address/list这类带多级/的路径,而且限制了guest/后的字符类型,导致多级路径无法被命中。下面给两种可行的解决方法:

方案一:用not规则排除v2流量(推荐,更直观易维护)

Istio支持在匹配条件里用not直接排除特定前缀的流量,同时补充精确匹配覆盖单独的路径:

http:
  # 匹配所有非/guest/v2开头的/guest相关请求
  - match:
      # 匹配/guest/开头但不是/guest/v2/开头的流量
      - uri:
          prefix: "/guest/"
        not:
          uri:
            prefix: "/guest/v2/"
      # 单独匹配/guest、/guest/profile、/guest/address这些精确路径
      - uri:
          exact: "/guest"
      - uri:
          exact: "/guest/profile"
      - uri:
          exact: "/guest/address"
    route:
      - destination:
          port:
            number: 8080
          host: my-guest.svc
  # 给v2流量返回403拒绝
  - match:
      - uri:
          prefix: "/guest/v2/"
      - uri:
          exact: "/guest/v2"
    fault:
      abort:
        httpStatus: 403
        percentage:
          value: 100.0

方案二:修正正则表达式

如果一定要用正则,调整为匹配所有不以/guest/v2开头的/guest路径,同时支持多级子路径:

http:
  - match:
      - uri:
          regex: "^/guest(?!/v2)(/.*)?$"
    route:
      - destination:
          port:
            number: 8080
          host: my-guest.svc
  # 拒绝v2流量
  - match:
      - uri:
          regex: "^/guest/v2(/.*)?$"
    fault:
      abort:
        httpStatus: 403
        percentage:
          value: 100.0

正则解释

^/guest(?!/v2)(/.*)?$:

  • ^/guest:锁定以/guest开头的路径
  • (?!/v2):否定前瞻,确保/guest后面不会紧跟着/v2
  • (/.*)?:可选的后续路径段(包括多级/),问号允许路径到/guest就结束(匹配/guest本身)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:50:25