流量切换

此任务演示如何将流量从微服务的一个版本切换到另一个版本。

一个常见的用例是将流量从微服务旧版本逐步迁移到新版本。在 Istio 中,您可以通过配置一系列路由规则来实现此目标,这些规则将一定百分比的流量从一个目标重定向到另一个目标。

在此任务中,您将使用 50% 的流量发送到 reviews:v1,50% 的流量发送到 reviews:v3。然后,您将通过将 100% 的流量发送到 reviews:v3 来完成迁移。

开始之前

应用基于权重的路由

  1. 要开始,请运行以下命令将所有流量路由到v1版本
压缩
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
  1. 在浏览器中打开 Bookinfo 站点。URL 为http://$GATEWAY_URL/productpage,其中$GATEWAY_URL是入口的外部 IP 地址,如Bookinfo文档中所述。

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

  2. 使用以下命令将 50% 的流量从reviews:v1转移到reviews:v3

压缩
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml@
  1. 等待几秒钟以使新规则生效,然后确认规则已被替换
$ kubectl get virtualservice reviews -o yaml
apiVersion: networking.istio.io/v1
kind: VirtualService
...
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 50
    - destination:
        host: reviews
        subset: v3
      weight: 50
  1. 刷新浏览器中的/productpage,您现在大约有 50% 的时间会看到红色的评分星级。这是因为reviewsv3版本访问了评分星级服务,但v1版本没有。

  2. 假设您认为reviews:v3微服务稳定,您可以通过应用此虚拟服务将 100% 的流量路由到reviews:v3

压缩
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-v3.yaml@
  1. 刷新/productpage几次。现在您将始终看到每个评论的书评都带有红色的评分星级。

了解发生了什么

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

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

有关使用自动缩放进行版本路由的更多信息,请查看博文文章使用 Istio 进行金丝雀部署

清理

  1. 删除应用程序路由规则
压缩
$ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
  1. 如果您不打算探索任何后续任务,请参考Bookinfo 清理说明以关闭应用程序。
这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!