Skip to content

Latest commit

 

History

History
109 lines (97 loc) · 3.06 KB

6-7流量控制-灰度发布与AB测试结合.md

File metadata and controls

109 lines (97 loc) · 3.06 KB

在真实的生产环境中,可能需要根据用户信息、应用版本等信息进行灰度发布,比如我们可能只想在安卓手机用户中挑选部分用户进行灰度测试,这时候我们就需要把灰度发布和A/B测试进行结合,来达到目的。路由配置示例如下:

 1 apiVersion: networking.istio.io/v1alpha3
 2 kind: Gateway
 3 metadata:
 4   name: istio-lab-gateway
 5 spec:
 6   selector:
 7     istio: ingressgateway 
 8   servers:
 9   - port:
10       number: 80
11       name: http
12       protocol: HTTP
13     hosts:
14     - "*"
15 ---
16 apiVersion: networking.istio.io/v1alpha3
17 kind: DestinationRule
18 metadata:
19   name: service-js
20 spec:
21   host: service-js
22   subsets:
23   - name: v1
24     labels:
25       version: v1
26   - name: v2
27     labels:
28       version: v2
29 ---
30 apiVersion: networking.istio.io/v1alpha3
31 kind: DestinationRule
32 metadata:
33   name: service-python
34 spec:
35   host: service-python
36   subsets:
37   - name: v1
38     labels:
39       version: v1
40   - name: v2
41     labels:
42       version: v2
43 ---
44 apiVersion: networking.istio.io/v1alpha3
45 kind: VirtualService
46 metadata:
47   name: istio-lab
48 spec:
49   hosts:
50   - "*"
51   gateways:
52   - istio-lab-gateway
53   http:
54   - match:
55     - uri:
56         prefix: /env
57       headers:
58         user-agent:
59           regex: ".*?(Firefox).*?"
60     route:
61     - destination:
62         host: service-python
63         subset: v1
64       weight: 70
65     - destination:
66         host: service-python
67         subset: v2
68       weight: 30
69   - match:
70     - uri:
71         prefix: /env
72     route:
73     - destination:
74         host: service-python
75         subset: v1
76   - route:
77     - destination:
78         host: service-js
79         subset: v1

第54~68行的路由规则定义表示,对于使用Firefox浏览器访问/env的用户请求,会有30%概率的请求转发到service-python的v2版本,70%的请求转发到v1版本。

第69~75行的路由规则定义表示,对于使用其他浏览器访问/env的用户请求只会转发到service-python的v1版本。

第76~79行定义了默认了路由规则,当没有规则匹配时,使用此默认路由。当访问除了/env的链接时,请求转发到service-js的v1版本。

通过如上的路由规则配置,就可以实现对于使用Firefox浏览器的用户进行灰度上线service-python服务v2版本的需求。

【实验】

1)创建路由规则:

kubectl apply -f istio/route/virtual-service-python-ab-canary.yaml

2)浏览器访问。

此时打开浏览器访问http://192.168.26.31:32470/ ,并多次点击“发射”按钮,如果你使用的是Firefox浏览器,就会看到大部请求都会落到service-python服务的v1版本,只有部分请求落到service-python服务的v2版本。如果使用其他浏览器访问,就会看到所有请求只会落到service-python服务的v1版本。

3)清理:

kubectl delete -f istio/route/virtual-service-python-ab-canary.yaml