istio - 具有标头和 url 匹配的 Istio VirtualService 规则
问题描述
我如何为我的 VirtuelService 编写规则,使带有 url “/v1/myservice” 和标头 “x-client-id: test” 的流量应该路由到 “my-service-v2-dev”,否则带有 url “/v1”的流量/myservice”,并且任何标头都应该路由到“my-service-dev”下面是我的代码,它没有按预期工作,所有流量都将转到“my-service-v2-dev”。
谁能帮助我,让我知道我在这里犯了什么错误?提前致谢。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-public-dev
namespace: my-dev
spec:
gateways:
- my-public-dev
hosts:
- my-public-dev.com.digital
http:
- match:
- headers:
x-client-id:
exact: test
- uri:
prefix: /v1/myservice/
name: myservice-v2-route
route:
- destination:
host: my-service-v2-dev
port:
number: 8080
- match:
- uri:
prefix: /v1/myservice/
name: myservice-v1-route
route:
- destination:
host: my-service-dev
port:
number: 8888
解决方案
第一条路线中的匹配意味着您有两个条件的列表,结合逻辑 OR.. 如果要使用 AND,则必须将其移动到一个条件,该条件可以包括标题和 uri 条件,并与和。
看
https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPMatchRequest
https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPRoute
(回应评论)对于更复杂的匹配,您可以通过逻辑操作拆分条件,例如第一个匹配url1 AND header,第二个匹配,url2 AND header,第三个url1,第四个url2,第五个catch all。
或者将 url 与 Regex 匹配,因此该 Regex 也可以表示多个 URL。
推荐阅读
- android - 执行函数后如何获取对象的值?
- sql - 在 id 介于 DB2 sql 中该组的最小和最大 id 之间时插入行
- java-ee-6 - Java EE 在创建 servlet - 此行有多个标记
- amazon-web-services - 部署 efs 模板时出现 YAMLException
- android - 如何通过单击 Android Kotlin 中 RecyclerView 内的缩略图来加载全尺寸图像
- sql - 在 SQL 中使用递归 CTE 遍历前序树
- laravel - 隐藏数据透视表 Laravel 的一些嵌套属性
- wpf - PowerShell WPF DataGrid:将所选行着色为绿色/红色,并在按钮单击时将其设置为只读
- python - 在从属任务中引发异常后如何终止多处理(在 Linux 下)?
- graphql - 如何在将突变提交到数据库之前执行指令?