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

问题描述 投票:0回答:1

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

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

但是当我在路径上发送请求时网关返回404

/oauth2/callback?code=3QxQLUqCwxVtH_GS6mWteICfisIe32yE7RE6wQIZZVw&state=wmZSZ0BHMHq3vmS_1YBWIn72pG6FkChFQbNUNipGotQ%3A%2Fjaeger%2F

现在,我也可以使用前缀

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

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

此外,当我使用正则表达式

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

编辑: 经过进一步测试,我发现如果去掉“?”从该路径中,istio 接受该路径为有效并将请求转发到服务。 我也尝试了正则表达式

/oauth2\/callback\?code=.*jaeger.*
,但这也不起作用。

regex kubernetes istio istio-gateway
1个回答
1
投票

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

  - match:
    - uri:
        prefix: /jaeger/
    - uri:
        regex: \/oauth2\/callback\?.*
      queryParams:
        state: 
          regex: .*jaeger.*
    route:
    - destination:
        host: oauth2-proxy
        port:
          number: 80
© www.soinside.com 2019 - 2024. All rights reserved.