按比例分配分配新旧版本流量
VirtualService:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 75
- destination:
host: reviews
subset: v2
weight: 25
|
DestinationRule :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: reviews
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
subsets:
- name: v1
labels:
version: v1
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
- name: v2
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
|
根据请求源 pod 的 label 路由
使用 sourceLabels
规则,可以根据源 pod 的 label 进行路由。这里用了 version
这个 label。即根据pod的应用版本进行路由。
这样的路由规则实际是使用于发起调用方的 sidecar。
VirtualService:
1
2
3
4
5
6
7
8
9
10
11
12
|
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- match:
- sourceLabels:
app: reviews
version: v2
|
有趣的是,看这个 Istio Issue:integration test for “sourceLabels are checked against a Service, not the Pod as documented”, 社区曾计划停止使用sourceLabels
这个规则,后来又因使用者太多,取消了这个计划。
参考
- https://medium.com/microsoftazure/canary-release-strategy-using-kubernetes-istio-helm-fb49c0406f07
- https://istio.io/v0.8/docs/concepts/traffic-management/rules-configuration/
- https://istio.io/latest/docs/reference/config/networking/destination-rule/#Subset
- https://istio.io/latest/docs/reference/config/networking/virtual-service/