流量转移
该任务使用新的 v1alpha3 流量管理 API。旧版本的API已被弃用,并将在下一个Istio版本中删除。 如果您需要使用旧版本,请点击此处的文档。
本任务将演示如何逐步将流量从一个版本的微服务迁移到另一个版本。 例如,您可以将流量从旧版本迁移到新版本。
开始之前
关于这个任务
一个常见的用例是将流量从一个版本的微服务逐渐迁移到另一个版本。 在Istio中,您可以通过配置一系列规则来实现此目标,
这些规则将一定百分比的流量路由到一个或另一个服务。 在此任务中,您将先分别向 reviews:v1
和 reviews:v3
各发送50%流量。
然后,您将通过向 reviews:v3
发送100%的流量来完成迁移。
应用基于权重的路由
首先,运行此命令将所有流量路由到
v1
版本的各个微服务。$ istioctl create -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
在浏览器中打开 Bookinfo 站点。 URL为
http://$GATEWAY_URL/productpage
,其中$GATEWAY_URL
是 ingress 的外部IP地址, 其描述参见 Bookinfo。请注意,不管刷新多少次,页面的评论部分都不会显示评级星号。这是因为 Istio 被配置为将 reviews 服务的的所有流量都路由到了
reviews:v1
版本, 而该版本的服务不会访问带星级的 ratings 服务。使用下面的命令把50%的流量从
reviews:v1
转移到reviews:v3
:$ istioctl replace -f @samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml@
等待几秒钟以让新的规则传播到代理中生效。
确认规则已被替换:
$ istioctl get virtualservice reviews -o 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
刷新浏览器中的
/productpage
页面,大约有50%的几率会看到页面中出带红色星级的评价内容。这是因为v3
版本的reviews
访问了带星级评级的ratings
服务,但v1
版本却没有。在目前的Envoy sidecar实现中,可能需要刷新
/productpage
很多次–可能15次或更多–才能看到流量分发的效果。您可以通过修改规则将90%的流量路由到v3,这样看到更多带红色星级的评价。如果您认为
reviews:v3
微服务已经稳定,你可以通过应用此 virtual service 将100%的流量路由到reviews:v3
:$ istioctl replace -f @samples/bookinfo/networking/virtual-service-reviews-v3.yaml@
现在,当您刷新
/productpage
时,您将始终看到带有红色星级评分的书评。
了解发生了什么
在这项任务中,我们使用Istio的加权路由功能将流量从旧版本的 reviews
服务迁移到新版本。请注意,这和使用容器编排平台的部署功能来进行版本迁移完全不同,后者使用了实例扩容来对流量进行管理。
使用Istio,两个版本的 reviews
服务可以独立地进行扩容和缩容,并不会影响这两个版本服务之间的流量分发。
如果想了解支持自动伸缩的版本路由的更多信息,请查看使用 Istio 的 Canary Deployments 。
清理
删除应用程序路由规则。
$ istioctl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
如果您不打算探索任何后续任务,请参阅 Bookinfo 清理 的说明关闭应用程序。
See also
Istio v1alpha3 路由 API 介绍,动机及其设计原则。
介绍更安全,低风险的部署和发布到生产。
描述基于 Istio 的 Bookinfo 示例的简单场景。
描述基于 Istio Bookinfo 示例的简单场景。
使用 Istio 创建自动缩放的金丝雀部署。
在 Istio 中配置从网格内访问外部服务的流量路由。