【问题标题】:Istio VirtualService rule with header and url matching具有标头和 url 匹配的 Istio VirtualService 规则
【发布时间】:2020-11-28 16:35:57
【问题描述】:

我如何为我的 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

【问题讨论】:

    标签: istio


    【解决方案1】:

    第一个路由中的匹配意味着您有一个包含两个条件的列表,结合逻辑 OR.. 如果您想使用 AND,您必须将其移动到一个条件,该条件可以包括标题和 uri 条件和与 AND 结合使用。

    https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPMatchRequest

    https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPRoute

    (响应 cmets) 对于更复杂的匹配,您可以使用逻辑操作拆分条件,例如第一个匹配 url1 AND header,第二个匹配,url2 AND header,第三个 url1,第四个 url2,第五个全部捕获。

    或者用正则表达式匹配 url,这样多个 URL 也可以由该 Regex 表示。

    【讨论】:

    • 感谢您给我答复。我尝试使用下面的代码并且它可以工作。匹配:- headers:x-client-id:exact:test uri:prefix:/v1/tokenization/
    • 但是我还有一个不能这样工作的场景。场景是如果标头 x-client-id: test 存在并且 URL 前缀是 /v1/digital 和 /V2/digital 中的任何一个,则发送两个 my-service-v2-dev。否则,如果 URL 是 /v1/digital 和 /V2/digital 中的任何一个,则将其发送到 my-service-dev 。其余所有 URL 将被转发到 my-service-default。你怎么能处理这个。它有 AND 以及 OR 用于 url。
    • @AshishSharma 应该可以将网址与正则表达式匹配,以便或可以由该正则表达式表示。
    • 或者也可以用逻辑运算拆分条件,第一个匹配url1 AND header,第二个匹配,url2 AND header,第三个url1,第四个url2,第五个catch all。
    • 谢谢。你的建议对我很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2020-04-01
    • 2020-03-21
    • 1970-01-01
    • 2021-01-30
    • 2019-05-13
    • 1970-01-01
    相关资源
    最近更新 更多