是否可以将 virtualService 和 Destination 应用到指定版本的 POD

时间:2021-05-14 04:56:00

标签: istio

我有两个 http 服务 A 和 B,每个服务有两个版本 v1 和 v2。

如果 A(v1) 调用 B,例如。使用http://b:8080,B(v1)和B(v2)都可以接听电话。

当 A (v2) 调用 B 时,只有 B (v2) 得到调用。

在这种情况下,我应该如何定义 virtualService 和 Destination 规则?

1 个答案:

答案 0 :(得分:2)

您需要将流量来自何处的 pod 与 sourceLabels 进行匹配,并将其路由到特定的 subsets。下面是一个示例:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: route-av1-bv1-2
spec:
  hosts:
  - service-b
  http:
#Match the traffic from App-A-version-1 towards App-B versions 1 & 2
  - match:
    - sourceLabels:
        app: av1
    - route:
      - destination:
          host: service-b
          subset: v1
    - route:
      - destination:
          host: service-b
          subset: v2  
#Match the traffic from App-A-version-2 towards only App-B-version-2
  - match:
    - sourceLabels:
        app: av2
    - route:
      - destination:
          host: service-b
          subset: v2

还有DestinationRule

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: route-av1-bv1-2
spec:
  host: service-b
  subsets:
  - name: v1
    labels:
      app: bv1
  - name: v2
    labels:
      app: bv2

Istio traffic management 部分很好地描述了 VirtualServiceDestinationRule 以及一些很好的例子。

相关问题