Files
davidpaulyoung/content/post/2017-11-07-istio-traffic-shifting.md
2026-05-14 14:06:21 -06:00

4.7 KiB
Raw Permalink Blame History

layout, title, subtitle, description, excerpt, date, author, image, categories, tags, URL
layout title subtitle description excerpt date author image categories tags URL
post 使用Istio实现应用流量转移   "本文翻译自istio官方文档" 本任务将演示如何将应用流量逐渐从旧版本的服务迁移到新版本。通过Istio可以使用一系列不同权重的规则10%20%,··· 100%)将流量平缓地从旧版本服务迁移到新版本服务。 本任务将演示如何将应用流量逐渐从旧版本的服务迁移到新版本。通过Istio可以使用一系列不同权重的规则10%20%,··· 100%)将流量平缓地从旧版本服务迁移到新版本服务。 2017-11-07     "赵化冰" /img/istio-traffic-shifting/crossroads.png
Tech
Istio
/2017/11/07/istio-traffic-shifting/

关于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 中的步骤关闭应用程序。

进阶阅读