带有标头和 url 匹配的 Istio VirtualService 规则

Ash*_*rma 1 istio

我如何为我的 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
Run Code Online (Sandbox Code Playgroud)

use*_*547 5

第一个路由中的匹配意味着你有一个包含两个条件的列表,结合逻辑 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 标头,第二个匹配,url2 AND 标头,第三个 url1,第四个 url2,第五个捕获所有其余部分。

或者将 url 与 Regex 匹配,因此该 Regex 也可以表示多个 URL。