全链路灰度有两种使用方式,本文介绍如何在ASM中使用全链路灰度的泳道模式。
前提条件
- 已创建ASM企业版或旗舰版实例,且实例版本为最新版。具体操作,请参见创建ASM实例。
- 已创建Kubernetes托管版集群。具体操作,请参见创建Kubernetes托管版集群。
- 已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
- 已创建ASM网关,并暴露HTTP协议和公网IP。具体操作,请参见创建入口网关服务。
- 通过kubectl连接ACK集群和ASM实例。具体操作,请参见通过kubectl工具连接集群和通过kubectl连接ASM实例。
功能介绍
灰度发布的核心思想是根据请求内容或者请求流量的比例将线上流量的一小部分转发至新版本,待灰度验证通过后,逐步调大新版本的请求流量,是一种循序渐进的发布方式。全链路灰度治理策略主要专注于整个调用链,它不关心链路上经过具体哪些微服务,流量控制视角从服务转移至请求链路上,仅需要少量的治理规则即可构建出从网关到整个后端服务的多个流量隔离环境,有效保障了多个服务顺利安全发布以及服务多版本并行开发,进一步促进业务的快速发展。
本文示例场景如下,图中有三个泳道s1、s2、s3,分别包含三个服务mocka、mockb、mockc。在ASM控制台部署泳道后,查看各个泳道的流量分布是否符合预期。

步骤一:部署示例服务
- 为default命名空间开启自动注入。
- 在ACK集群中执行如下命令,部署示例服务。
kubectl apply -f https://raw.githubusercontent.com/AliyunContainerService/asm-labs/main/fulllink-gray/swimlane/v1/application-v1.yaml kubectl apply -f https://raw.githubusercontent.com/AliyunContainerService/asm-labs/main/fulllink-gray/swimlane/v2/application-v2.yaml kubectl apply -f https://raw.githubusercontent.com/AliyunContainerService/asm-labs/main/fulllink-gray/swimlane/v3/application-v3.yaml
步骤二:创建泳道组和对应泳道
- 创建泳道组。
- 创建s1、s2、s3泳道,并分别绑定v1、v2、v3版本。本文以创建s1泳道为例进行说明,请参照以下步骤创建s2和s3泳道。
- 创建各个泳道对应的引流规则。
步骤三:验证全灰度链路功能是否生效
本文以s1和s2泳道进行验证说明,您可以参照以下步骤自行验证s3泳道。
- 执行以下命令,查看s1泳道的访问效果。预期输出:
通过Header-> mocka(version: v1, ip: 10.0.250.213)-> mockb(version: v1, ip: 10.0.250.234)-> mockc(version: v1, ip: 10.0.250.220)
x-asm-prefer-tag: s1
声明流量应该流向泳道s1下的相关服务,由预期输出得到,符合预期。 - 执行以下命令,查看s2泳道的访问效果。预期输出:
通过Header-> mocka(version: v2, ip: 10.0.250.229)-> mockb(version: v2, ip: 10.0.250.237)-> mockc(version: v2, ip: 10.0.250.238)
x-asm-prefer-tag: s2
声明流量应该流向泳道s2下的相关服务,由预期输出得到,符合预期。