5.3.3 流量转移
生产环境中经常需要将旧版本的流量转移到新版本,在本任务中,您将会把50%的流量发送到reviews:v1
,另外50%的流量发送到reviews:v3
。然后,再把100%的流量发送到reviews:v3
来完成迁移。
1 前置条件
- 安装好
Istio
- 部署
bookinfo
示例 - 应用默认目标规则
kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml
2 应用基于权重的路由
2.1 将所有流量路由到v1版本
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
2.2 浏览器测试
打开浏览器访问http://${GATEWAY_URL}/productpage
,这时不管刷新多少戏,页面都不会显示评价星级内容。因为istio被配置为将所有流量都路由到reviews:v1
版本。
2.3 把50%的流量从reviews:v1
转移到reviews:v3
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
virtualservice.networking.istio.io/reviews configured
应用完需要等待几秒中,等待新的规则下发到envoy代理中。
2.4 确认规则已经生效
kubectl get virtualservice reviews -o yaml
2.5 测试效果
打开浏览器,打开bookinfo应用,反复刷新页面,大约有 50% 的几率会看到页面中出带 红色 星级的评价内容(v3)
2.6 流量100%迁移到v3
经过测试v3版本已经没有问题,这是把流量全部转到v3上来
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml
virtualservice.networking.istio.io/reviews configured
再次刷新bookinfo
页,您将始终看到带有 红色 星级评分的书评。
3 原理
在这项任务中,我们使用Istio
的权重路由功能将reviews
服务的流量迁移到新版本。请注意,这和使用容器编排平台的部署功能来进行版本迁移完全不同,后者使用了实例扩容来对流量进行管理。
使用Istio
,两个版本的reviews
服务可以独立地进行扩容和缩容,而不会影响这两个服务版本之间的流量分发。
4 清理
删除应用程序路由规则
kubectl delete -f samples/bookinfo/networking/virtual-service-all-v1.yaml