Kubernetes 如何在Istio VirtualService正则表达式中实现逻辑OR? 问题
管道字符在Istio的Kubernetes 如何在Istio VirtualService正则表达式中实现逻辑OR? 问题,kubernetes,istio,Kubernetes,Istio,管道字符在Istio的VirtualService中似乎不起作用 下面的示例旨在基于用户代理头路由请求。来自移动设备的请求应转到myapp,来自桌面用户的请求应转到deskt app,由下一个匹配块处理。使用此正则表达式时,字段起作用: ^.*\b移动设备\b.*$ 但这种能力需要更复杂的正则表达式来识别移动用户。当我使用这些时,我的路线完全中断: ^.*\b(iPhone |像素)\b.*$ ^.*\b(iPhone像素)+\b.*$ ^.*\biPhone | Pixel\b.*$
VirtualService
中似乎不起作用
下面的示例旨在基于用户代理
头路由请求。来自移动设备的请求应转到myapp
,来自桌面用户的请求应转到deskt app
,由下一个匹配块处理。使用此正则表达式时,
字段起作用:
^.*\b移动设备\b.*$
^.*\b(iPhone |像素)\b.*$
^.*\b(iPhone像素)+\b.*$
^.*\biPhone | Pixel\b.*$
用户代理
头时,我希望将其路由到myapp
实际行为
我被路由到桌面应用程序
问题
如何在IstioVirtualService
regex模式中实现逻辑OR?这是我的问题还是我忽略了一些显而易见的事情
示例
VirtualService
apiVersion:networking.istio.io/v1alpha3
种类:虚拟服务
...
...
http:
-匹配:
-标题:
用户代理:
regex:“您的配置是正确的,因此问题必须出在regex上,或者用户代理的内容不同,请尝试一下
”^.*(iPhone | Pixel)。*$”
刚刚验证了当标题包含android或iphone时,以下配置是否正确路由:
- match:
- headers:
user-agent:
regex: '^.*(Android|iPhone).*$'
并通过以下方式进行测试:
[match]curl-H“用户代理:Mozilla/5.0(Linux;U;iPhone 4.4.2;en-us;)”
[不匹配]curl-H“用户代理:Mozilla/5.0(Linux;U;iPhone 4.4.2;en-us;)”…感谢您的回答!当我今天有机会的时候,我会尝试一下。不幸的是,在我能够验证这一点之前,这个项目就被否决了。谢谢@rinormaloku!这非常好。我用Firefox用户代理切换器和真实设备测试了这一点……它可以工作。
- match:
- headers:
user-agent:
regex: '^.*(Android|iPhone).*$'