文档

配置标签路由

更新时间:

标签路由通过给流量打标、给机器打标、增加路由能力,从而约束符合特征流量只调用到对应标签的节点上,实现按流量特征与机器标签路由的目的。标签路由可以作为蓝绿发布、灰度发布等场景的能力基础。

前提条件

应用的ACK集群中已经安装MSE微服务治理组件,且上下游应用均已接入MSE微服务治理。具体操作,请参见ACK微服务应用接入MSE治理中心微服务治理

使用限制

限制项限制值说明
Spring Cloud版本Spring Cloud Edgware及以上版本。该内容主要针对微服务治理中心,您的应用需要接入MSE服务治理中心。
Dubbo版本2.5.3~2.7.8该内容主要针对微服务治理中心,您的应用需要接入MSE服务治理中心。
客户端类型
  • RestTemplate
  • FeignClient
该内容主要针对微服务治理中心,您的应用需要接入MSE服务治理中心。
Java应用JDK版本目前支持JDK 1.6、1.7和1.8版本应用接入。该内容主要针对微服务治理中心,您的应用需要接入MSE服务治理中心。
负载均衡类型
  • Ribbon
  • LoadBalancer
该内容主要针对微服务治理中心,您的应用需要接入MSE服务治理中心。
Spring Cloud Gateway版本Spring Cloud Gateway 2.1.0.RELEASE+该内容主要针对微服务治理中心,您的应用需要接入MSE服务治理中心。
注册中心类型
  • Nacos
  • Eureka
  • ZooKeeper
该内容主要针对微服务治理中心,您的应用需要接入MSE服务治理中心。

应用场景

多版本开发测试

多个版本并行开发时,需要为每个版本准备一套开发环境。如果版本较多,开发环境成本会非常大。流量隔离方案可以在多版本开发测试时大幅度降低资源成本。

使用基于标签路由的全链路流量隔离机制,可以将特定的流量路由到指定的开发环境。例如,在开发环境1中,为应用B(V1.1)和应用D(V1.1)创建Tag1标签,并配置对应的路由规则。入口应用A调用B时,会判断流量是否满足路由规则。如果满足,路由到开发环境1中应用B的V1.1版本;如果不满足,路由到基线环境中的应用B的V1版本。应用C调用应用D时,同样根据流量决定路由到应用D的V1版本或V1.1版本。

多版本开发测试

相同应用的多版本间流量隔离

如果一个应用有多个版本在线上同时运行,部署在不同环境中,例如日常环境和特殊环境。那么可以使用标签路由对不同环境中的不同版本进行流量隔离,将秒杀订单流量或不同渠道订单流量路由到特殊环境,将正常的流量路由到日常环境。即使特殊环境异常,本应进入特殊环境的流量也不会进入日常环境,从而不会影响日常环境的使用。

相同应用的多版本间流量隔离

A/B Testing

线上有多个应用版本同时运行,期望对不同版本的应用进行A/B Testing。那么可以使用标签路由的全链路流量控制功能,将地域A的客户流量路由到V1版本,地域B的客户流量路由到V1.1版本。通过对不同版本的验证,达到降低新产品或新特性的发布风险,为产品创新提供保障的目的。

A/B Testing

操作场景

本文以spring-cloud-a为例,分别给应用打上tag1和tag2两个标签,将应用划分为2个分组。

如果请求符合您配置的特征,会调用到您指定标签的节点;如果没有匹配上任何规则,则按照设定的流量比例调用到对应节点。

在ACK中为应用接入MSE微服务治理并设置标签

  1. 登录容器服务控制台
  2. 在左侧导航栏,选择集群,然后单击目标集群名称。
  3. 在左侧导航栏,选择工作负载 > 无状态
  4. 无状态页面右上角,单击使用镜像创建
  5. 创建应用页面分别创建两个无状态应用spring-cloud-a-tag1和spring-cloud-a-tag2。

    创建无状态应用的详细步骤,请参见创建无状态工作负载Deployment

    本文仅介绍为spring-cloud-a-tag1和spring-cloud-a-tag2创建标签路由相关的参数。

    参数

    说明

    集群

    选择已经安装了MSE微服务治理的集群。

    副本数量

    按示例,设置为1。

    镜像名称

    选择您构建的镜像即可。您也可以选择预先构建好的镜像registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1

  6. 为应用spring-cloud-a-tag1和spring-cloud-a-tag2接入MSE微服务治理,并设置标签。

    1. 返回无状态(Deployment)页面,选择命名空间,找到创建的应用(spring-cloud-a-tag1和spring-cloud-a-tag2),在操作列单击更多,在列表中单击查看YAML

      image..png
    2. 编辑YAML对话框分别为spring-cloud-a-tag1和spring-cloud-a-tag2在spec > template > metadata下添加以下labels,接入MSE微服务治理。

      labels:
        msePilotAutoEnable: "on"
        msePilotCreateAppName: "<your-app-name>"
      说明

      需要将<your-app-name>替换为您在MSE微服务治理实际使用的应用名称,即spring-cloud-a。

    3. 编辑YAML对话框为spring-cloud-a-tag1和spring-cloud-a-tag2分别添加标签alicloud.service.tag: tag1alicloud.service.tag: tag2

      image..png

在MSE微服务治理中为应用创建标签路由

  1. 登录MSE治理中心控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择治理中心 > 应用治理

  3. 应用列表页面,先选择对应的微服务命名空间,再搜索在ACK创建的应用名称spring-cloud-a,并单击进入。

    image..png
  1. 在spring-cloud-a的流量治理页面单击标签路由页签查看当前的标签路由配置。

    image..png
  2. 标签路由列表右侧单击流量分配,设置各标签的流量比例,然后单击保存

    image..png
  3. 标签路由列表选择标签,然后单击流量规则下方的添加创建标签路由配置参数,最后单击确定即可完成标签路由的创建。

    image..png
    说明

    标签路由优先采用流量规则里的路由条件,如果满足该流量规则,则会去该规则对应标签的Pod,否则按照流量比例去对应标签的Pod。

    标签路由参数说明:

    参数

    说明

    路由名称

    标签路由规则名称,例如test-springcloud

    应用

    显示应用名称。

    标签

    显示在ACK中为应用设置的标签。

    应用实例

    显示spring-cloud-a应用中设置了该标签的应用实例的IP及端口。

    流量规则

    框架类型

    包含Spring CloudDubbo,根据应用实际框架选择。

    • Spring Cloud:仅支持设置URL的Path,例如/getIp

    • Dubbo:支持选择服务和接口。

    条件模式

    包含同时满足下列条件满足下列任一条件,根据实际需求选择。

    条件列表

    可以分别设置Parameter、Cookie和Header三种类型的参数。例如:

    • Parameter:name=xiaoming

    • Cookie:hello = "world" 或 "world2"

结果验证

本文仅通过一个示例介绍如何为应用创建标签路由,您可以为应用参照配置,然后根据实际业务需求进行验证。

  • 默认100%流量会按照规则,调用到tag1节点。

    image..png
  • 匹配规则的流量,会调用到对应标签的节点。

    image..png
  • 本页导读 (1)
文档反馈