默认情况下,当服务有多个版本时,请求流量会以轮询方式发送给多个版本,我们可以把流量按百分比分配给多个服务版本,来实现服务的逐渐过渡升级。我们可以使用如下的方式配置路由规则:
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