版本流量路由是指将流量按照比例路由到服务的不同版本,适用于灰度发布和A/B测试等场景。本文介绍如何使用Istio资源实现版本流量路由。
前提条件
步骤一:创建网关规则
网关规则(Gateway)定义了在网格出入口操作的负载均衡器,用于接收传入或传出的HTTP/TCP连接。下文介绍如何创建网关规则,并将其绑定到入口网关。
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择,然后单击创建。 
- 在创建页面,进行以下配置,然后单击创建。 - 关于配置项的详情,请参见网关规则(Gateway)CRD说明。 - 配置项 - 说明 - 基本信息 - 配置命名空间为default,网关规则的名称为bookinfo-gateway。 - 作用网关实例 - 配置标签名为istio,标签值为ingressgateway。 - 对外提供服务 - 配置名称为http,端口为80,协议为HTTP,服务为*。  - 以上配置对应的网关规则YAML如下。 
步骤二:创建虚拟服务
虚拟服务(VirtualService)定义流量路由规则和请求转发策略。创建虚拟服务后,您可以通过/productpage、/static、/login、/logout、/api/v1/products路径访问Bookinfo应用。
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择,然后单击创建。 
- 在创建页面,进行以下配置,然后单击创建。 - 关于配置项的详情,请参见虚拟服务(Virtual Service)CRD说明。 - 配置项 - 说明 - 基本信息 - 命名空间 - 本示例选择default。 - 名称 - 自定义虚拟服务的名称。 - 作用范围 - 打开作用于指定网关规则开关,单击请选择网关规则。 
- 在请选择网关规则对话框,选中bookinfo-gateway,单击  图标,然后单击确定。 图标,然后单击确定。
- 关闭作用于所有Sidecar开关。 
 - 所属服务 - 单击选择所属网关服务域名,在选择所属网关服务域名对话框,选中*,单击  图标,然后单击确定。 图标,然后单击确定。- HTTP路由 - 路由名称 - 单击HTTP路由,单击添加路由,自定义路由名称。 - 请求匹配规则 - 重复单击添加请求匹配规则,配置如下五条规则: - 打开匹配请求的URI开关,配置匹配方式为精确,匹配内容为/productpage。 
- 打开匹配请求的URI开关,配置匹配方式为前缀,匹配内容为/static。 
- 打开匹配请求的URI开关,配置匹配方式为精确,匹配内容为/login。 
- 打开匹配请求的URI开关,配置匹配方式为精确,匹配内容为/logout。 
- 打开匹配请求的URI开关,配置匹配方式为前缀,匹配内容为/api/v1/products。 
 - 路由目的地 - 单击添加路由目的地,配置服务名称为productpage,端口为9080。  - 以上配置对应的虚拟服务YAML如下。 
步骤三:访问Bookinfo应用
- 获取入口网关地址。 - 方式一:通过ASM控制台- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在入口网关页面,获取服务地址。 
 - 方式二:通过容器服务管理控制台- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在服务页面顶部,选择命名空间为istio-system,在External IP列,查看istio-ingressgateway对应的80端口的IP地址。 
 
- 在浏览器地址栏,输入http://{入口网关服务的IP地址}/productpage,持续刷新页面10次,访问Bookinfo应用。 - 每次刷新都会访问reviews服务的v1、v2和v3版本。您可以看到reviews服务三个版本出现的比例接近1:1:1。  
步骤四:创建版本路由规则
- 创建目标规则,按版本给reviews服务进行分组,分为v1、v2、v3子集。 - 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择,然后单击创建。 
- 在创建页面,进行以下配置,然后单击创建。 - 关于配置项的详情,请参见目标规则(Destination Rule)CRD说明。 - 配置项 - 说明 - 基本信息 - 配置命名空间为default,自定义目标规则的名称,配置服务名称为reviews。 - 服务版本(子集) - 单击服务版本(子集),重复单击添加服务版本(子集),配置如下三个版本。 - 版本1:配置版本名称为v1,单击添加标签,配置标签名为version,标签值为v1。 
- 版本2:配置版本名称为v2,单击添加标签,配置标签名为version,标签值为v2。 
- 版本3:配置版本名称为v3,单击添加标签,配置标签名为version,标签值为v3。 
  - 以上配置对应的目标规则YAML如下。 
 
- 创建虚拟服务,将10%流量路由到reviews服务的v1版本,40%流量路由到reviews服务的v2版本,50%流量路由到reviews服务的v3版本。 - 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择,然后单击创建。 
- 在创建页面,进行以下配置,然后单击创建。 - 配置项 - 说明 - 基本信息 - 命名空间 - 本示例选择default。 - 名称 - 自定义虚拟服务的名称。 - 作用范围 - 打开作用于所有Sidecar开关。 - 所属服务 - 单击添加所属服务,在添加所属服务对话框,配置命名空间为default,在添加所属服务区域,选中reviews服务,单击  图标,然后单击确定。 图标,然后单击确定。- HTTP路由 - 路由名称 - 单击HTTP路由,单击添加路由,自定义路由名称。 - 路由目的地 - 重复单击添加路由目的地,配置如下三个路由目的地。 - 配置服务名称为reviews,版本为v1,权重为10。 
- 配置服务名称为reviews,版本为v2,权重为40。 
- 配置服务名称为reviews,版本为v3,权重为50。 
  - 以上配置对应的虚拟服务YAML如下。 
 
步骤五:验证版本流量路由是否成功
在浏览器地址栏,输入http://{入口网关服务的IP地址}/productpage,持续刷新页面10次。
若reviews服务的v1、v2、v3三个版本出现的比例接近1:4:5,表明版本流量路由成功。