使用Istio实现应用流量转移
preview image

关于 Istio 的更多内容请参考 istio 中文文档

原文参见 Traffic Shifting

本任务将演示如何将应用流量逐渐从旧版本的服务迁移到新版本。通过 Istio,可以使用一系列不同权重的规则(10%,20%,··· 100%)将流量平缓地从旧版本服务迁移到新版本服务。

为简单起见,本任务将采用两步将流量从reviews:v1 迁移到 reviews:v3,权重分别为 50%,100%。

开始之前

请注意:本文档假设示采用 kubernetes 部署示例应用程序。所有的示例命令行都采用规则 yaml 文件(例如samples/bookinfo/kube/route-rule-all-v1.yaml)指定的 kubernetes 版本。如果在不同的环境下运行本任务,请将kube修改为运行环境中相应的目录(例如,对基于 Consul 的运行环境,目录就是samples/bookinfo/consul/route-rule-all-v1.yaml)。

基于权重的版本路由

  1. 将所有微服务的缺省版本设置为 v1.

    istioctl create -f samples/bookinfo/kube/route-rule-all-v1.yaml
    
  2. 在浏览器中打开 http://$GATEWAY_URL/productpage, 确认reviews 服务目前的活动版本是 v1。

    可以看到浏览器中出现 BooInfo 应用的 productpage 页面。 注意productpage显示的评价内容不带星级。这是由于reviews:v1不会访问ratings服务。

    请注意:如果之前执行过 配置请求路由 任务,则需要先注销测试用户“jason”或者删除之前单独为该用户创建的测试规则:

    istioctl delete routerule reviews-test-v2
    
  3. 首先,使用下面的命令把 50%的流量从reviews:v1转移到reviews:v3:

    istioctl replace -f samples/bookinfo/kube/route-rule-reviews-50-v3.yaml
    

    注意这里使用了istioctl replace而不是create

  4. 在浏览器中多次刷新productpage页面,大约有 50%的几率会看到页面中出现带红星的评价内容。

    请注意:在目前的 Envoy sidecar 实现中,可能需要刷新productpage很多次才能看到流量分发的效果。在看到页面出现变化前,有可能需要刷新 15 次或者更多。如果修改规则,将 90%的流量路由到 v3,可以看到更明显的效果。

  5. 当 v3 版本的reviews服务已经稳定运行后,可以将 100%的流量路由到reviews:v3

    istioctl replace -f samples/bookinfo/kube/route-rule-reviews-v3.yaml
    

    此时,以任何用户登录到productpage页面,都可以看到带红星的评价信息。

理解原理

在这个任务中,我们使用了 Istio 的带权重路由的特性将流量从老版本的reviews服务逐渐迁移到了新版本服务中。

注意该方式和使用容器编排平台的部署特性来进行版本迁移是完全不同的。容器编排平台使用了实例 scaling 来对流量进行管理。而通过 Istio,两个版本的reviews服务可以独立地进行 scale up 和 scale down,并不会影响这两个版本服务之间的流量分发。

想了解更多支持 scaling 的按版本路由功能,请查看 Canary Deployments using Istio

清理

  • 删除路由规则。

    istioctl delete -f samples/bookinfo/kube/route-rule-all-v1.yaml
    
  • 如果不打算尝试后面的任务,请参照 BookInfo cleanup 中的步骤关闭应用程序。

进阶阅读


TAGS
On this page