# 负载均衡算法

交通转移 3分钟阅读 页面测试

此任务向您展示如何逐步将流量从微服务的一个版本迁移到另一个版本。例如,您可以将流量从旧版本迁移到新版本。

一个常见的用例是将流量逐渐从一种微服务版本迁移到另一种。在Istio中,您可以通过配置一系列规则以将一定百分比的流量路由到一项服务或另一项服务来实现此目标。在此任务中,您将发送流量的50％reviews:v1和50％ reviews:v3。然后,您将100％的流量发送到来完成迁移reviews:v3。

在你开始之前 按照安装指南中的说明安装Istio 。

部署Bookinfo示例应用程序。

查看流量管理概念文档。

应用基于权重的路由 如果尚未应用目标规则,请按照"应用默认目标规则"中的说明进行操作。 首先,运行此命令将所有流量路由到v1每个微服务的版本。

$ kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml

在浏览器中打开Bookinfo网站。URL为[http://$GATEWAY\_URL/productpage,其中$GATEWAY\_URL是入口的外部IP地址,如Bookinfo文档中所述。](http://$gateway_url/productpage,%E5%85%B6%E4%B8%AD$GATEWAY_URL%E6%98%AF%E5%85%A5%E5%8F%A3%E7%9A%84%E5%A4%96%E9%83%A8IP%E5%9C%B0%E5%9D%80,%E5%A6%82Bookinfo%E6%96%87%E6%A1%A3%E4%B8%AD%E6%89%80%E8%BF%B0%E3%80%82)

请注意,无论您刷新多少次,页面的评论部分都不会显示星级。这是因为您将Istio配置为将评论服务的所有流量路由到该版本,reviews:v1并且该服务的该版本无法访问星级评分服务。

使用以下命令将50％的流量从传输reviews:v1到reviews:v3:

$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml

等待几秒钟,以使新规则传播。

确认规则已被替换:

$ kubectl get virtualservice reviews -o yaml apiVersion: networking.istio.io/v1beta1 kind: VirtualService ... spec: hosts:

*   reviews

    http:
* route:
  *   destination:

      &#x20; host: reviews

      &#x20; subset: v1

      weight: 50
  *   destination:

      &#x20; host: reviews

      &#x20; subset: v3

      weight: 50

/productpage在浏览器中刷新,现在您会看到大约50％的时间显示为红色星形。这是因为的v3版本reviews访问星级评定服务,但v1版本不访问。

使用当前的Envoy Sidecar实施,您可能需要刷新 /productpage很多次(也许15次或更多次)才能看到正确的分发。您可以修改规则以路由90％的流量,v3以更频繁地看到红色星星。 假设您确定reviews:v3微服务稳定,则可以reviews:v3通过应用此虚拟服务将100％的流量路由到:

$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml

现在,当您刷新时,/productpage您将始终看到每个评论带有红色星级的书评。

了解发生了什么 在此任务中,您reviews使用Istio的加权路由功能将流量从旧版本的服务迁移到了新版本。请注意,这与使用容器编排平台的部署功能进行版本迁移非常不同,后者使用实例缩放来管理流量。

使用Istio,您可以允许服务的两个版本分别reviews独立地向上和向下扩展,而不影响它们之间的流量分配。

有关具有自动缩放功能的版本路由的更多信息,请查看博客文章Canary Deployments using Istio。

清理 删除应用程序路由规则:

$ kubectl delete -f samples/bookinfo/networking/virtual-service-all-v1.yaml

如果您不打算探索任何后续任务,请参考 Bookinfo清理说明以关闭应用程序。
