您可以为部署在EDAS K8s环境中的Spring Cloud和Dubbo微服务应用配置全链路流量控制,将具有一定特征的流量路由到目标版本应用。
前提条件
为应用配置全链路流量控制,需要提前完成以下工作:
部署新版本应用或升级应用。具体操作,请参见升级和回滚应用概述(K8s)。
如果入口应用是Spring Cloud Gateway或Netflix Zuul微服务网关,需提前创建微服务网关并绑定EDAS微服务空间。
使用Spring Cloud Gateway作为入口网关时,需要Spring Cloud Gateway的版本在2.1.x及以上。
背景信息
本文以电商架构中的下单场景为例介绍全链路流控功能。
客户下单后流量从入口应用(或者微服务网关)进来,调用交易中心,交易中心再调用商品中心,商品中心调用下游的库存中心。
交易中心和商品中心各有两个新版本(1和2)在运行,需要对这两个新版本进行灰度验证。此时在入口应用(或者微服务网关)上期望将满足特定流控规则的请求流量路由到新版本,其余流量全部路由到线上(正式)版本。
创建泳道组
登录EDAS控制台。
在左侧导航栏选择 。
在全链路流量控制页面顶部菜单栏选择地域,在页面中选择目标微服务空间。
在全链路流量控制页面,单击创建。
如果您选择的微服务空间内已经创建过泳道组,则在选择泳道组文本框右侧,单击创建。
说明一个微服务空间内,最多创建2个泳道组。
在创建泳道对话框设置泳道组相关参数,然后单击确定。
配置项
描述
微服务空间
在全链路流量控制页面所选目标微服务空间,不可编辑。
泳道组名称
自定义设置泳道组的名称。支持大小写字母、数字、短划线(-)和下划线(_),长度不超过64个字符。
入口类型
选择入口应用(在EDAS部署应用/网关)。
入口应用
根据实际情况选择目标应用。
泳道组涉及所有应用
单击添加流控链路涉及应用,选择您的入口应用或入口网关所涉及的所有相关服务。
创建泳道组完成后,在全链路流量控制页面的泳道组涉及应用区域出现您所创建的泳道组。请检查入口应用和所涉及的应用是否正确,如需变更泳道组信息,请单击编辑并修改相关信息。
创建泳道
在全链路流量控制页面上方选择创建和泳道组时相同的微服务空间,然后底部单击创建泳道。
重要加入全链路流量控制的应用,将不再支持金丝雀发布。
在创建流控泳道面板设置流控泳道相关参数,然后单击确定。
配置项
描述
微服务空间
默认为在全链路流量控制页面选择的微服务空间,而且需要保证该微服务空间之前已经创建了泳道组,不可编辑。
流控泳道名称
自定义设置流控泳道的名称。支持大小写字母、数字、短划线(-)和下划线(_),长度不超过64个字符。
接收打标流量应用
单击添加泳道应用,在所属泳道组内选择应用。
说明您可以在同一个流控泳道选择多个应用,也可以为每个应用创建一个流控泳道。
不同规格的EDAS,泳道组和泳道的配额不一样。更多内容,请参见全链路流量控制简介。
创建泳道时,支持不设置接收打标流量应用,可在编辑泳道时设置接受打标流量应用。
流控规则
开关
流控路由开关,默认打开。
Path
HTTP相对路径,置空表示任意路径。请根据实际情况设置。
条件模式
请根据实际需要选择条件模式,包含同时满足下列条件和满足下列任一条件:
同时满足下列条件:必须同时满足设置的所有条件才能生效。
满足下列任一条件:只需满足任一条件即可生效。
条件列表
单击添加规则条件,可根据需要添加多项条件。您可以设置Cookie、Header、Parameter和等不同类型的条件。
本示例中添加的条件为:
参数类型为Parameter,参数env=red,即满足该条件时,流量进入到1.0版本的服务中。
参数类型为Parameter,参数env=blue,即满足该条件时,流量进入到2.0版本的服务中。
创建泳道成功后,在全链路流量控制页面的流控分配区域出现您所创建的泳道。请检查泳道名称、流控规则和打标应用是否正确,如需修改泳道信息,请单击编辑修改泳道相关信息。
可选:如需创建多条泳道,在流控分配区域,单击创建泳道并设置泳道相关参数。
说明一个泳道组内,最多支持创建5条泳道。
验证特征流量路由到目标应用
获取入口应用或者入口网关的负载均衡SLB的地址。
在应用管理>应用列表页面,单击入口应用的名称。
在应用总览页面的访问方式配置区域,复制并记录负载均衡SLB的地址。
在浏览器或者其他工具上多次访问泳道组内的打标应用。
假设在浏览器中输入http://ip:port/**?env=red访问交易中心应用,返回结果只会有一种,即表示实现了将特征流量路由到目标应用。
其中**是流控规则中的Path,env=red是流控规则中的条件。
A2[172.20.**.**] -> B2[172.20.**.**] -> C[172.20.**.**]
如何配置两个版本的相同应用
用相同的包创建两个相同的应用,且注册相同服务。
将其中一个应用拉入泳道,该应用即为灰度环境中的应用。然后用灰度版本的包在灰度环境中部署应用即得到两个版本的相同应用。