Istio 虚拟服务正则表达式 uri 不工作

Istio virtual service regex uri is not working

在虚拟服务中,我已将 2 条路径路由到我的服务,如下所示 -

- match:
    - uri:
        prefix: /jaeger/
    - uri:
        regex: \/oauth2\/.*jaeger.*
    route:
    - destination:
        host: oauth2-proxy
        port:
          number: 80

但是当我在路径 /oauth2/callback?code=3QxQLUqCwxVtH_GS6mWteICfisIe32yE7RE6wQIZZVw&state=wmZSZ0BHMHq3vmS_1YBWIn72pG6FkChFQbNUNipGotQ%3A%2Fjaeger%2F

上发送请求时网关 returns 404

现在,我也可以只使用前缀 /oauth2/ 来处理此类 URL,但目前我有多个应用程序正在通过它们自己的 oauth2-proxies 进行身份验证,并且此正则表达式将匹配所有这些。所以我需要使用一个正则表达式,其中包含其中的应用程序名称,例如 jaeger 就是这种情况。

我什至检查了 regex101 这个路径确实匹配我使用的正则表达式。

此外,当我使用正则表达式时网关成功路由请求 \/oauth2\/.*。但正如我所解释的,我也不能使用这个正则表达式。我在这里遗漏了什么吗?

编辑: 经过进一步测试,我发现如果删除“?”从路径中,istio 接受它是有效的并将请求转发给服务。 我也尝试了正则表达式 /oauth2\/callback\?code=.*jaeger.* 但这也不起作用。

我没有意识到“?”标记 URL 的结尾,之后的所有内容都是查询参数。 Istio 也提供查询参数的匹配。以下代码适用于我的案例 -

  - match:
    - uri:
        prefix: /jaeger/
    - uri:
        regex: \/oauth2\/callback?.*
      queryParams:
        state: 
          regex: .*jaeger.*
    route:
    - destination:
        host: oauth2-proxy
        port:
          number: 80