微服务引擎MSE

通过自建网关实现全链路灰度

2025-05-28 08:22:29

用户可以基于微服务治理在不修改任何业务代码的情况下,实现全链路灰度的流量控制。本文介绍用户如何通过自建网关实现全链路灰度功能。

前提条件

1、 用户已开通微服务治理中心企业版。

2、 用户已开通云容器引擎。

背景信息

在微服务架构下,一次需求可能会同时修改多个微服务应用。在发布应用时,通常将这些应用划分为同一个分组,使灰度流量始终在灰度应用中流转。当上游有灰度流量时,会通过引流的方式将灰度流量引导至灰度分组,在此次链路调用过程中,如果存在一些微服务没有灰度环境,那这些请求在下游时依然能回到灰度环境中,以此实现全链路灰度。

通过使用微服务治理中心,可以在不修改业务代码的情况下,轻松实现全链路灰度。本文介绍如何通过自建网关实现全链路灰度。

部署Demo应用

准备自建入口网关msgc-zuul,准备应用msgc-app-a,msgc-app-b和msgc-app-c。调用过程是msgc-app-a –> msgc-app-b -> msgc-app-c。

步骤1:在云容器引擎集群中安装微服务治理插件

1、登录“云容器引擎”控制台

2、在左侧菜单栏选择“集群”,点击目标集群

3、 在集群管理页面点击“插件”-“插件市场”,选择“cubems”插件安装 

步骤2:为应用开启微服务治理能力

1、 登录“云容器引擎”控制台

2、 左侧菜单栏选择“集群”,点击目标集群

3、 在集群管理页面点击“工作负载”-“无状态”,选择目标命名空间 

4、 在Deployment列表页选择指定Deployment,并点击“全量替换”,进入Deployment编辑页

5、 在Deployment编辑页点击“显示高级设置”,新增“Pod标签”: mseCubeMsAutoEnable:on, 随后新增“Pod注解”,mse.appName:app-a,mse.enable:true

6、 完成分别为app-a-gray、app-b-gray和app-c-gray应用添加标签。

7、 完成编辑后点击“提交”,重新发布容器即可接入。

app-a应用的配置:

基线:

 

灰度:

 

 

app-b应用的配置

基线:

 

灰度:

 

 

app-c应用的配置:

基线:

 

灰度:

 

zuul应用的配置:

 

step1 创建泳道组

1、登录微服务治理控制台

2、在左侧导航栏选择全链路灰度,点击创建泳道组

3、在创建泳道组也页面,设置泳道组相关参数,然后单击确定

 

step2 创建泳道

1、找到目标泳道组页面,点击创建第一个分流泳道

2、设置泳道名称,选择目标应用所属标签,创建泳道

 

应用场景一:通过设置泳道组路由规则,实现全链路灰度。

设置路由规则,通过前端访问传过来不同的Header,在自建网关通过header判断将流量路由到指定的泳道。

 

结果验证:

通过自建网关访问app-a->app-b->app-c。

1、访问基线环境,不带上参数名为tag的header,流量路由到基线环境。

curl http://localhost/a/callA

 

2、访问灰度环境,带上tag=gray的header,流量会自动路由到灰度泳道。

curl –H “tag:gray” http://localhost/a/callA

 

基于上述实践,可以看到,当前端请求带上tag=gray的header时,会路由到灰度环境。

路由规则除了设置Header以外,还可以通过设置Cookie、Parameter和Body Content实现流量路由。下面演示通过设置Parameter实现标签路由。

 

设置路由规则,通过前端访问传过来不同的Parameter,在自建网关通过Parameter判断将流量路由到指定的泳道。

 

结果验证:

通过自建网关访问app-a->app-b->app-c。

1、访问基线环境,当member不等于12345时,流量路由到基线环境。

curl http://localhost/a/callA?memberId=123

 

 

2、访问灰度环境,带上memberId=12345的参数,流量会自动路由到灰度泳道。

curl http://localhost/a/callA?memberId=12345

 

基于上述实践,可以看到,当前端请求带上memberId=12345的参数,会路由到灰度环境。


i7N3uFGdCNPK