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
在虚拟服务中,我已将 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
现在,我也可以只使用前缀 /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