• 流量转移
    • 开始之前
    • 应用基于权重的路由
    • 理解原理
    • 清理
    • 相关内容

    流量转移

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

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

    开始之前

    • 按照安装指南中的说明安装 Istio。

    • 部署 Bookinfo 示例应用程序。

    • 查看流量管理概念文档。

    应用基于权重的路由

    如果尚未应用目标规则,请按照应用默认目标规则中的说明进行操作。

    • 首先,运行此命令将所有流量路由到各个微服务的 v1 版本。

    Zip

    1. $ kubectl apply -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
    • 在浏览器中打开 Bookinfo 站点。网址为 http://$GATEWAY_URL/productpage,其中 $GATEWAY_URL 是 ingress 的外部 IP 地址,其描述参见 Bookinfo 文档。

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

    • 使用下面的命令把 50% 的流量从 reviews:v1 转移到 reviews:v3

    Zip

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

    等待几秒钟以让新的规则传播到代理中生效。

    • 确认规则已被替换:
    1. $ kubectl get virtualservice reviews -o yaml
    2. apiVersion: networking.istio.io/v1alpha3
    3. kind: VirtualService
    4. metadata:
    5. name: reviews
    6. ...
    7. spec:
    8. hosts:
    9. - reviews
    10. http:
    11. - route:
    12. - destination:
    13. host: reviews
    14. subset: v1
    15. weight: 50
    16. - destination:
    17. host: reviews
    18. subset: v3
    19. weight: 50
    • 刷新浏览器中的 /productpage 页面,大约有 50% 的几率会看到页面中出带 红色 星级的评价内容。这是因为 v3 版本的 reviews 访问了带星级评级的 ratings 服务,但 v1 版本却没有。

    在目前的 Envoy sidecar 实现中,可能需要刷新 /productpage 很多次–可能 15 次或更多–才能看到正确的流量分发的效果。您可以通过修改规则将 90% 的流量路由到 v3,这样能看到更多带红色星级的评价。

    • 如果您认为 reviews:v3 微服务已经稳定,你可以通过应用此 virtual service 规则将 100% 的流量路由到 reviews:v3

    Zip

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

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

    理解原理

    在这项任务中,我们使用 Istio 的权重路由功能将流量从旧版本的 reviews 服务迁移到新版本。请注意,这和使用容器编排平台的部署功能来进行版本迁移完全不同,后者使用了实例扩容来对流量进行管理。

    使用 Istio,两个版本的 reviews 服务可以独立地进行扩容和缩容,而不会影响这两个服务版本之间的流量分发。

    如果想了解支持自动伸缩的版本路由的更多信息,请查看使用 Istio 进行金丝雀部署 。

    清理

    • 删除应用程序路由规则。

    Zip

    1. $ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
    • 如果您不打算探索任何后续任务,请参阅 Bookinfo 清理中的说明来关闭应用程序。

    相关内容

    Istio as a Proxy for External Services

    Configure Istio ingress gateway to act as a proxy for external services.

    Multi-mesh deployments for isolation and boundary protection

    Deploy environments that require isolation into separate meshes and enable inter-mesh communication by mesh federation.

    Secure Control of Egress Traffic in Istio, part 3

    Comparison of alternative solutions to control egress traffic including performance considerations.

    Secure Control of Egress Traffic in Istio, part 2

    Use Istio Egress Traffic Control to prevent attacks involving egress traffic.

    Secure Control of Egress Traffic in Istio, part 1

    Attacks involving egress traffic and requirements for egress traffic control.

    Version Routing in a Multicluster Service Mesh

    Configuring Istio route rules in a multicluster service mesh.