默认情况下,当服务有多个版本时,请求流量会以轮询方式发送给多个版本,我们可以把流量按百分比分配给多个服务版本,来实现服务的逐渐过渡升级。我们可以使用如下的方式配置路由规则:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: service-node spec: host: service-node subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: service-node spec: hosts: - service-node http: - route: - destination: host: service-node subset: v1 weight: 20 - destination: host: service-node subset: v2 weight: 80
通过上面的配置,我们把service-node服务的v2版本权重设置为80,而把v1版本的权重设置为20。这样设置权重比值之后,对service-node服务的请求,会有80%的概率被路由到v2版本,只有20%的概率被路由到v1版本。
【实验】
1)创建Gateway和service-js的路由规则:
$ kubectl apply -f istio/route/gateway-js-v1.yaml
2)创建service-node的路由规则:
$ kubectl apply -f istio/route/virtual-service-node-v1-v2.yaml
3)浏览器访问。
此时打开浏览器访问http://11.11.11.112:31380/ ,并多次点击“发射”按钮,你会看到service-node服务请求大概率会路由到v2版本,只有少部分请求会落到v1版本上。
4)清理:
$ kubectl delete -f istio/route/gateway-js-v1.yaml $ kubectl delete -f istio/route/virtual-service-node-v1-v2.yaml