我有两个 http 服务 A 和 B,每个服务有两个版本 v1 和 v2。
如果 A(v1) 调用 B,例如。使用http://b:8080,B(v1)和B(v2)都可以接听电话。
当 A (v2) 调用 B 时,只有 B (v2) 得到调用。
在这种情况下,我应该如何定义 virtualService
和 Destination 规则?
答案 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 部分很好地描述了 VirtualService
和 DestinationRule
以及一些很好的例子。