联动 TSE 云原生网关实现全链路灰度

最近更新时间:2024-04-24 10:38:01

我的收藏

使用场景

应用发布在软件开发过程中非常常见与频繁,但是变更过程容易引发故障。为了降低每次发布带来的变更风险,可以通过灰度发布策略来解决这一问题。灰度发布是一种软件发布策略,它允许您在生产环境中渐进式部署应用,新版本只对部分用户可见,在问题出现时尽量减少影响。在微服务体系架构中,服务间的依赖关系错综复杂,有时单个服务发版依赖多个服务同时运行联动,对这个新版本服务的上下游进行分组验证,这是微服务架构中特有的全链路灰度发布场景。
TSE 提供的全链路灰度能力,在不修改业务代码的情况下,可视化配置灰度规则,就可以构建出从网关到后端服务的端到端的全链路流量控制。泳道可以将应用灰度发布的版本隔离成一个独立的运行环境。通过设置泳道规则,可以将满足规则的请求流量路由到目标版本的应用。如下图所示,我们划分出一个或多个灰度环境,针对线上灰度版本1的所有服务,我们希望都能配置一定规则。当满足一定规则后,所有请求都会流入灰度环境1中。


名词解释

泳道组:一组泳道、服务、入口网关的集合,通常一个业务系统下的应用放在同一个泳道组中。
泳道:一组具有相同特性标签的服务实例节点的集合,是灰度发布规则的目的地。
基线:没有添加至任何泳道的服务节点为基线版本节点。
实例标签:TSE 北极星提供特定的泳道标签,标签 key 为“lane”,value 值为您自定义的「泳道标签值」。打上该标签的实例会自动添加至目标泳道中。

使用限制

支持的组件
版本限制
北极星
产品版本:企业版
引擎版本 >= v 1.18.0.0
微服务应用
北极星 SDK
版本 >= v 1.15.3
SpringCloud Tencent
SpringCloud Tencent 2023版本:>= 1.13.1-2023.0.0
SpringCloud Tencent Hoxton 版本:>= 1.14.0-Hoxton.SR12-RC2
网关
TSE 云原生网关
版本无限制
SpringCloud Gateway
SpringCloud Tencent 2023版本:>= 1.13.1-2023.0.0
SpringCloud Tencent Hoxton 版本:>= 1.14.0-Hoxton.SR12-RC2
消息队列
Ckafka
建设中
TDMQ-RocketMQ
建设中
TDMQ-Pulsar
建设中

前提条件

我们为您提供了全链路灰度 Demo ,请参见 Demo
全链路灰度能力需要您在客户端接入北极星服务注册发现、服务路由能力。
SpringCloud Tencent 应用接入,请参见 接入全链路灰度
Java Agent 接入请参见 通过 Java Agent 接入北极星

配置流程总览

步骤1:搭建业务系统基线版本
(1)部署业务应用基线版本。
(2)创建 TSE 云原生网关。
(3)关联 TSE 北极星注册中心,配置 TSE 云原生网关服务路由。
步骤2:搭建业务系统灰度环境
(1)部署业务应用灰度版本,并打上灰度标签。
(2)创建泳道组,配置业务系统的入口网关、业务应用。
(3)创建泳道并配置灰度规则,符合泳道规则的请求将被转发至泳道内。

步骤1:搭建业务系统基线版

(1)部署业务应用基线版本。

根据您自身的业务,准备好业务部署的资源,通过容器化部署虚拟机部署选择其中一种方式部署业务系统后端应用的基线版本。
容器化部署
创建 TKE 容器集群,请参见 创建 TKE 集群
在所选集群中,创建工作负载,完成业务应用部署,请参见 创建工作负载
虚拟机部署:
创建 CVM 虚拟机,请参见 创建 CVM 虚拟机
部署业务应用。

(2)创建 TSE 云原生网关。

创建 TSE 云原生网关,参见 创建 TSE 云原生网关

(3)关联 TSE 北极星注册中心,并配置服务和路由信息。

服务来源关联 TSE 北极星注册中心(PolarisMesh),并配置网关服务和路由信息,参见 使用云原生 API 网关访问北极星服务

步骤2:搭建业务系统灰度环境

如果业务应用要发布新版本,可以通过全链路灰度来同时验证不同应用的灰度版本,以确保发布上线的稳定性。

(1)部署业务应用灰度版本,并打上灰度标签。

根据您自身的业务,准备好业务部署的资源,通过容器化部署虚拟机部署选择其中一种方式部署业务系统后端应用的灰度版本
容器化部署
虚拟机部署
1. 创建 TKE 容器集群,请参见 创建 TKE 集群
2. 在所选集群中,创建工作负载,请参见 创建工作负载
3. 灰度打标:北极星提供灰度泳道标签,标签key为“lane”,value 值为您自定义的版本标签值。您可以在配置工作负载的过程中,设置启动参数或者设置环境变量(二选一)来配置灰度标签:
方案一:设置应用启动参数
Java -Dspring.cloud.tencent.metadata.content.lane=$(lane_value) -jar demo.jar
方案二:设置环境变量
设置环境变量:
SCT_METADATA_CONTENT_lane=$(lane_value)
说明:
$(lane_value)替换为您自定义的版本(泳道)标签,例如:grey、v2等。
4. 完成灰度版本部署。
1. 创建 CVM 虚拟机,请参见 创建 CVM 虚拟机
2. 灰度打标:北极星提供灰度泳道标签,标签 key 为“lane”,value 值为您自定义的「版本标签值」。您可以在配置工作负载的过程中,设置启动参数或者设置环境变量(二选一)来配置灰度标签:
方案一:设置应用启动参数
Java -jar -Dspring.cloud.tencent.metadata.content.lane=$(lane_value) demo.jar
方案二:设置环境变量
设置环境变量:
SCT_METADATA_CONTENT_lane=$(lane_value)
说明:
$(lane_value)替换为您自定义的版本(泳道)标签,例如:v2。
3. 完成灰度版本部署。

(2)创建泳道组,配置业务系统的入口网关、业务应用。

1. 侧边栏单击全链路灰度 > 新建泳道组,进入新建泳道组的页面。
2. 填写泳道组相关配置,配置入口网关、业务应用。

泳道组名称:允许数字、英文字母、点、短横线、下划线限制 64 个字符。
配置泳道入口:支持对接 TSE 云原生网关、微服务网关 SpringCloud Gateway、普通微服务应用。自动同步您在北极星所配置的泳道规则。
云原生网关:选择与北极星在相同地域和 vpc 下的网关实例,并选择业务系统入口服务。入口服务支持多选。
微服务网关 SpringCloud Gateway:选择作为系统入口的 SpringCloud Gateway 网关服务。支持多选。
微服务应用:选择作为系统入口的 SpringCloud Tencent 服务。支持多选。
配置泳道组服务
一般一个泳道组对应一个业务系统,可将业务系统中全部服务全部导入进来。
如果服务暂未注册,也支持手动添加。
3. 单击提交按钮,泳道组即被创建,可在泳道组列表中查看。

(3)创建泳道并配置灰度规则,符合泳道规则的请求将被转发至泳道内。

1. 侧边栏单击全链路灰度,在目标泳道组右上角单击创建泳道 ,进新建泳道的页面。
2. 填写泳道组相关配置,配置入口网关、业务应用。

创建泳道
泳道名称:允许数字、英文字母、短横线、下划线,限制 64 个字符。
描述:填写泳道的描述和用途。
泳道标签:填写灰度发布服务的泳道标签,北极星自动将符合该标签的服务自动添加至泳道。
使用示例:如上图,业务系统整体有10个服务,全部添加至泳道组。此次发布其中 2 个服务上线(service-consumer-2023,service-provider-2023),并配置 lane = grey 的标签。则这两个灰度版本实例自动添加至泳道。
泳道路由规则
灰度规则:
通过配置灰度规则,将符合灰度规则的流量染色并转发至目标泳道内。灰度规则将自动同步至泳道入口(TSE 云原生网关、SpringCloud Gateway、入口微服务)。
灰度规则参数支持请求头、请求方法、请求参数、请求 Cookie、请求路径、主调 IP。
规则生效关系:支持 与(满足全部条件)、或 (满足以上任意条件)。
规则匹配策略:支持宽松匹配与严格匹配策略,请根据您业务实际情况选择。
宽松匹配策略:若在泳道内匹配不到对应标签的节点,则降级路由至基线节点。
严格匹配策略:若在泳道内匹配不到对应标签的节点,则返回错误,流量固定在指定泳道内。
3. 单击提交,即可完成泳道的创建,在泳道组列表中可以查看泳道列表信息。
4. 单击 TSE 云原生网关 > 路由管理 > 服务 > 选择入口服务 > 灰度策略,查看泳道规则已同步至 TSE 云原生网关。至此已完成全部的规则配置。