7.3 把请求路由到服务的指定版本

上一章

7.5 根据请求信息路由到服务的不同版本

下一章

更多图书

7.4 根据服务版本权重拆分流量

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


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