简述
本部分将介绍如何逐步将流量从一个版本的微服务迁移到另一个版本。例如,将流量从旧版本迁移到新版本。一个常见的用例是将流量从一个版本的微服务逐渐迁移到另一个版本。在 Istio 中,您可以通过配置一系列规则来实现此目标,这些规则将一定百分比的流量路由到一个或另一个服务。在此任务中,您将 50% 的流量发送到 reviews:v1,另外 50% 的流量发送到 reviews:v3。然后将 100% 的流量发送到 reviews:v3 来完成迁移。
前提
- 正确安装Istio
- 部署示例应用Bookinfo
- 了解流量管理相关概念
应用基于权重的路由
首先,运行此命令将所有流量路由到 v1 版本的各个微服务。
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
YAML具体内容如下:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: details
spec:
hosts:
- details
http:
- route:
- destination:
host: details
subset: v1
---
在浏览器中打开 Bookinfo 站点。 URL 为 http://$GATEWAY_URL/productpage,其中 $GATEWAY_URL 是 ingress 的外部 IP 地址,其描述请参考部署Bookinfo章节。不管刷新多少次,页面的评论部分都不会显示评级星号,因版本的服务不会访问带星级的 ratings 服务。
使用下面的命令把 50% 的流量从 reviews:v1 转移到 reviews:v3。
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
YAML具体内容如下:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
等待几秒钟以让新的规则传播到代理中生效。
确认规则已被替换
kubectl get virtualservice reviews -o yaml
刷新浏览器中的 /productpage 页面,大约有 50% 的几率会看到页面中出带红色星级的评价内容。这是因为 v3 版本的 reviews 访问了带星级评级的 ratings 服务,但 v1 版本却没有。
如果您认为 reviews:v3 微服务已经稳定,你可以通过应用此 virtual service 将 100% 的流量路由到 reviews:v3。
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml
YAML具体内容如下:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v3
现在,当您刷新 /productpage 时,将始终看到带有红色星级评分的书评。
对比
本文介绍了使用 Istio 的加权路由功能将流量从旧版本的 reviews 服务迁移到新版本。请注意,这和使用容器编排平台的部署功能来进行版本迁移完全不同,后者使用了实例扩容来对流量进行管理。使用 Istio,两个版本的 reviews 服务可以独立地进行扩容和缩容,并不会影响这两个版本服务之间的流量分发。