5. 设置 Istio 的流量管理组件

Istio 中流量管理的一个核心优势是允许动态请求路由。动态请求路由通常应用于金丝雀部署和蓝/绿部署等。Istio 流量管理中的两个关键资源是虚拟服务目标规则

  • 虚拟服务:拦截并将流量重定向到你的 Kubernetes Service 上。这样,你可以将部分请求流量分配到不同的服务上。你可以使用这些服务来定义一组路由规则,用于主机寻址。
  • 目标规则:作为唯一可信来源,表明哪些服务版本可用于接收虚拟服务的流量。你可以使用这些资源来定义策略,这些策略适用于路由发生后用于服务的流量。

本文介绍如何在示例 BookInfo 应用中添加与 reviews 微服务对应的虚拟服务示例。此服务的目的是在 reviews 服务的两个版本之间划分流量。

在这个示例中,我们将流量带到 reviews 服务中并拦截流量,这样,50% 的流量会流向服务的 v1,另外 50% 的流量会流向 v2

部署这个虚拟服务后,我们将生成流量,并通过 Kiali 可视化看到流量平均路由到服务的两个版本中。

要为 reviews 服务部署虚拟服务和目标规则:

  1. 点击 ☰ > 集群管理

  2. 转到安装了 Istio 的集群,然后单击 Explore

  3. 在安装了 Istio 的集群中,点击左侧导航栏中的 Istio > DestinationRules

  4. 单击创建

  5. 复制并粘贴下面的 DestinationRule YAML。

  6. 单击创建

  7. 单击以 YAML 文件编辑并使用此配置:

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: DestinationRule
    3. metadata:
    4. name: reviews
    5. spec:
    6. host: reviews
    7. subsets:
    8. - name: v1
    9. labels:
    10. version: v1
    11. - name: v2
    12. labels:
    13. version: v2
    14. - name: v3
    15. labels:
    16. version: v3
  8. 单击创建

然后,部署提供利用 DestinationRule 的流量路由的 VirtualService:

  1. 单击侧导航栏中的 VirtualService
  2. 单击使用 YAML 文件创建
  3. 复制并粘贴下面的 VirtualService YAML。
  4. 单击创建
  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: reviews
  5. spec:
  6. hosts:
  7. - reviews
  8. http:
  9. - route:
  10. - destination:
  11. host: reviews
  12. subset: v1
  13. weight: 50
  14. - destination:
  15. host: reviews
  16. subset: v3
  17. weight: 50
  18. ---

结果:生成流到该服务的流量时(例如,刷新 Ingress Gateway URL),你可以在 Kiali 流量图中看到流到 reviews 服务的流量被平均分配到了 v1v3

后续步骤

生成和查看流量