Skip to content

Latest commit

 

History

History
89 lines (77 loc) · 2.48 KB

6-6流量控制-实现服务AB测试.md

File metadata and controls

89 lines (77 loc) · 2.48 KB

通过Istio提供的服务路由功能,我们可以根据请求的信息轻松实现A/B测试。本节演示根据用户使用的浏览器来展示不同版本的Web界面。当用户使用Firefox浏览器访问时,会得到Vue版本实现的前端界面;当用户使用其他浏览器访问时,会得到React版本实现的前端界面。配置示例如下:

1 apiVersion: networking.istio.io/v1alpha3
 2 kind: Gateway
 3 metadata:
 4   name: istio-lab-gateway
 5 spec:
 6   selector:
 7     istio: ingressgateway # use Istio default gateway implementation
 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: VirtualService
32 metadata:
33   name: istio-lab
34 spec:
35   hosts:
36   - "*"
37   gateways:
38   - istio-lab-gateway
39   http:
40   - match:
41     - uri:
42         prefix: /env
43     route:
44     - destination:
45         host: service-python
46   - match:
47     - uri:
48         prefix: /
49       headers:
50         user-agent:
51           regex: ".*?(Firefox).*?"
52     route:
53     - destination:
54         host: service-js
55         subset: v2
56   - route:
57     - destination:
58         host: service-js
59         subset: v1

第46~55行定义的路由规则表明,当用户的请求携带的user-agent请求头正则匹配Firefox时,转发请求到sevice-js服务的v2版本。

第56~59行定义了默认的路由规则,当上面的条件都不符合时,把请求转发到sevice-js服务的v1版本。

通过上面的路由规则就会实现,当用户使用Chrome浏览器访问时,会得到React版本实现的前端界面;当用户使用Firefox浏览器访问时,会得到Vue版本实现的前端界面。这样就轻松实现用户界面的A/B版本测试。

【实验】

1)创建A/B测试路由规则:

 kubectl apply -f istio/route/gateway-js-user-agent-v1-v2.yaml

2)浏览器访问。

通过浏览器访问地址http://192.168.26.31:32470/,并多次点击“发射”按钮。

发现使用Chrome浏览器与使用Firefox浏览器会得到不同的界面。

3)清理:

kubectl delete -f istio/route/gateway-js-user-agent-v1-v2.yaml