具有 header 和 url 匹配的 Istio VirtualService 规则
Istio VirtualService rule with header and url matching
我如何为我的 VirtuelService 编写规则,使 url “/v1/myservice” 和 header “x-client-id: test” 的流量应该路由到 “my-service-v2-dev”,否则带有 url “/v1/myservice” 和任何 header 的流量应该路由到 “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,你必须将它移动到一个条件,它可以包括一个 header 和 uri 条件,并与 AND 组合。
见
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,第五场比赛,剩下的。
或者将 url 与 Regex 匹配,这样多个 URL 也可以由该 Regex 表示。
我如何为我的 VirtuelService 编写规则,使 url “/v1/myservice” 和 header “x-client-id: test” 的流量应该路由到 “my-service-v2-dev”,否则带有 url “/v1/myservice” 和任何 header 的流量应该路由到 “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,你必须将它移动到一个条件,它可以包括一个 header 和 uri 条件,并与 AND 组合。
见
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,第五场比赛,剩下的。
或者将 url 与 Regex 匹配,这样多个 URL 也可以由该 Regex 表示。