版本流量路由是指将流量按照比例路由到服务的不同版本,适用于灰度发布和A/B测试等场景。本文介绍如何使用Istio资源实现版本流量路由。

前提条件

步骤一:创建网关规则

创建网关规则,并绑定入口网关。

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理
  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 网关规则,然后单击创建
  3. 创建页面,进行以下配置。
    1. 基本信息区域,配置命名空间default,网关规则的名称bookinfo-gateway
    2. 作用网关实例区域,配置标签名istio标签值ingressgateway
    3. 对外提供服务区域,配置名称http端口80协议HTTP服务*
      网关规则
  4. 单击预览,查看网关规则对应的YAML文件,确认无误后,单击确认,然后在创建页面下方,单击创建

步骤二:创建虚拟服务

创建虚拟服务后,您可以通过/productpage/static/login/logout/api/v1/products路径访问Bookinfo应用。

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理
  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择流量管理中心 > 虚拟服务,然后单击创建
  3. 创建页面的基本信息区域,进行以下配置。
    配置项说明
    命名空间本示例选择default
    名称自定义虚拟服务的名称。
    作用范围
    1. 打开作用于指定网关规则开关,单击请选择网关规则
    2. 请选择网关规则对话框,选中bookinfo-gateway,单击添加图标,然后单击确定
    3. 关闭作用于所有Sidecar开关。
    所属服务单击选择所属网关服务域名,在选择所属网关服务域名对话框,选中*,单击添加图标,然后单击确定
    创建虚拟服务
  4. 单击HTTP路由,单击添加路由,自定义路由名称,单击添加请求匹配规则,打开匹配请求的URI开关,配置匹配方式精确匹配内容/productpage
  5. 重复单击添加请求匹配规则,打开匹配请求的URI开关,然后分别配置匹配方式前缀匹配内容/static;配置匹配方式精确匹配内容/login;配置匹配方式精确匹配内容/logout;配置匹配方式前缀匹配内容/api/v1/products
    虚拟服务
  6. 单击添加路由目的地,配置服务名称productpage端口9080
    路由
  7. 单击预览,查看虚拟服务对应的YAML文件,确认无误后,单击确认,然后在创建页面下方,单击创建

步骤三:访问Bookinfo应用

  1. 获取入口网关地址。
    1. 登录容器服务管理控制台,在左侧导航栏选择集群
    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务
    3. 服务页面顶部,选择命名空间istio-system,查看istio-ingressgateway右侧外部端点列下80端口的IP地址。
  2. 访问Bookinfo应用。
    在浏览器地址栏,输入http://{入口网关服务的IP地址}/productpage,持续10次刷新页面。

    由于Bookinfo应用会轮流访问reviews服务的v1、v2、v3版本,可以看到3次页面无星星,3次页面显示黑星星,4次页面显示红色星星。

步骤四:创建版本路由规则

  1. 创建目标规则。
    创建目标规则,按版本给reviews服务进行分组,分为v1、v2、v3子集。
    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理
    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择流量管理中心 > 目标规则,然后单击创建
    3. 创建页面,配置命名空间default,自定义目标规则的名称,配置服务名称reviews
    4. 单击服务版本(子集),单击添加服务版本(子集),配置版本名称v1,单击添加标签,配置标签名version标签值v1
    5. 单击添加服务版本(子集),配置版本名称v2,单击添加标签,配置标签名version标签值v2
    6. 单击添加服务版本(子集),配置版本名称v3,单击添加标签,配置标签名version标签值v3
      目标规则
    7. 单击预览,查看目标规则对应的YAML文件,确认无误后,单击确认,然后在创建页面下方,单击创建
  2. 创建虚拟服务。
    创建虚拟服务,将10%流量路由到reviews服务的v1版本,40%流量路由到reviews服务的v2版本,50%流量路由到reviews服务的v3版本。
    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理
    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择流量管理中心 > 虚拟服务,然后单击创建
    3. 创建页面,配置命名空间default,自定义虚拟服务的名称,在所属服务区域,单击添加所属服务
    4. 添加所属服务对话框,配置命名空间default,在添加所属服务区域,选中reviews服务,单击添加图标,然后单击确定
    5. 单击HTTP路由,单击添加路由,自定义路由名称,单击添加路由目的地,配置服务名称reviews版本v1权重10
    6. 单击添加路由目的地,配置服务名称reviews版本v2权重40
    7. 单击添加路由目的地,配置服务名称reviews版本v3权重50
      虚拟服务2
    8. 单击预览,查看虚拟服务对应的YAML文件,确认无误后,单击确认,然后在创建页面下方,单击创建

步骤五:验证版本流量路由是否成功

在浏览器地址栏,输入http://{入口网关服务的IP地址}/productpage,持续10次刷新页面。

您可以看到Bookinfo应用的页面1次显示无星星,4次显示黑星星,5次显示红色星星。说明10%流量路由到reviews服务的v1版本,40%流量路由到reviews服务的v2版本,50%流量路由到reviews服务的v3版本。输出结果符合预期,表明版本流量路由成功。