赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. Serverless应用引擎(新版)
  4. 操作指南
  5. 微服务治理
  6. 全链路灰度
  7. 基于云原生API网关实现全链路灰度

基于云原生API网关实现全链路灰度

  • 全链路灰度
  • 发布于 2025-04-17
  • 0 次阅读
文档编辑
文档编辑

通过SAE提供的全链路灰度功能,您可以轻松实现全面的流量控制,而无需更改您的业务代码。本文主要介绍如何配置基于云原生API网关的全链路灰度,并实现端到端的灰度部署。

名词解释

  • 云原生API网关:云原生API网关是兼容K8s Ingress标准的下一代网关产品,将传统的API网关、流量网关、微服务网关、安全网关功能合并,支持ACK容器服务和Nacos等多种服务发现方式,支持多种认证登录方式快速构建安全防线。具体介绍,请参见什么是云原生API网关。

  • 泳道:为相同版本应用定义的一套隔离环境。只有满足了流控路由规则的请求流量才会路由到对应泳道里的打标应用。一个应用可以属于多个泳道,一个泳道可以包含多个应用,应用和泳道是多对多的关系。

  • 泳道组:泳道的集合。泳道组的作用主要是为了区分不同团队或不同场景。

  • 基线环境:未打标的应用属于基线环境,是其他环境的兜底环境。

场景示例

本文通过模拟真实的调用链路为您演示基于云原生API网关以实现全链路灰度功能。您无需修改任何业务代码,只需要给入口应用设置流量规则,该流量的标签会通过链路透传到下一个应用中。在每个应用的调用过程中,符合规则的流量会优先调用到对应的灰度应用,如果没有对应的灰度应用则会自动切换回基线应用。

各测试应用如下所示:

测试应用:全链路灰度演示程序.zip,其中包含A、B和C三个后端应用,这三个后端应用既可以用作基线应用的部署,也可以用作灰度应用的部署。

后端应用

基线应用

灰度应用

灰度应用上的标签

A

sae-a

sae-a-a1

alicloud.service.tag:g1

sae-a-a2

alicloud.service.tag:g2

B

sae-b

sae-b-b2

alicloud.service.tag:g2

C

sae-c

sae-c-c1

alicloud.service.tag:g1

sae-c-c2

alicloud.service.tag:g2

流量分发示意图如下所示:

image

正常流量调用链路:

API服务网关 -> 应用sae-a -> 应用sae-b -> 应用sae-c。

标签流量调用链路:

  • t=g1流量:API服务网关 -> 应用sae-a-a1 -> 应用sae-b -> 应用sae-c-c1。

  • t=g2流量:API服务网关 -> 应用sae-a-a2 -> 应用sae-b-b2 -> 应用sae-c-c2。

前提条件

  • 已开通MSE微服务治理专业版或企业版。具体操作,请参见开通MSE微服务治理。

  • 已创建云原生API网关实例。具体操作,请参见创建网关实例。

  • 已创建MSE Nacos实例和命名空间。具体操作,请参见创建实例和创建命名空间。

重要

云原生API网关实例和基线应用可以使用同一个VPC,也可以使用不同的VPC。如果这些实例不在同一个VPC中,您需要自行配置网络,确保它们之间能够互相通信,例如,您可以使用阿里云的云企业网或其他网络连接产品来实现跨VPC通信。

使用限制

  • 全链路灰度仅适用于2023年11月08日起新建的微服务应用。

  • 全链路灰度功能仅支持在新版控制台使用。

  • 由于全链路灰度功能整合了标签路由功能(此处指的是MSE微服务治理的标签路由,与MSE云原生网关的标签路由无关),因此不推荐已经加入全链路灰度的应用配置金丝雀发布和标签路由规则。

    限制项与限制值

    限制项

    限制值

    备注

    网关服务来源类型

    MSE Nacos和K8s Service

    基于云原生API网关的全链路灰度目前只支持MSE Nacos和K8s Service两种来源。

    云原生API网关版本

    大于等于2.0.1版本

    对于2.0.1以下的版本,需要在云原生API网关控制台的实例页面手动升级引擎版本。

    Spring Cloud版本

    Spring Cloud Edgware及以上版本

    无。

    Dubbo版本

    2.5.3~2.7.8

    Dubbo 3.0及以上版本当前处于灰度中,如有场景需求,请提工单联系MSE技术支持。

    客户端类型

    • Resttemplate

    • Spring Cloud OpenFeign

    无。

    Java应用JDK版本

    目前支持JDK 6、7、8版本应用接入

    JDK 11版本当前处于灰度中,如有场景需求,请提工单联系MSE技术支持。

    负载均衡类型

    • Ribbon 2.0.x及以上版本

    • LoadBalancer 3.0.x及以上版本

    无。

    Spring Cloud Gateway版本

    Spring Cloud Gateway 2.1.0.RELEASE及以上版本

    无。

1. 部署基线应用并为其开通微服务治理功能

1.1 部署基线应用

创建sae-a、sae-b和sae-c三个基线应用。本文只介绍关键步骤,具体的操作步骤,请参见应用部署。

  1. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间,最后单击创建应用。

    xxQdc1LHvq

  2. 在应用基础信息向导页,在基础信息设置区域和容量设置区域配置相关信息,然后单击下一步:高级设置。

    本示例中,选择通过上传代码包的形式部署sae-a、sae-b和sae-c三个基线应用。
  3. 找到并展开服务注册发现区域,Nacos注册中心服务发现选择MSE Nacos专业版,并选择目标MSE Nacos实例和命名空间。其余高级配置,请参见高级配置。

    Up8Nvvt7ye

    重要

    这三个基线应用均使用同一个MSE Nacos实例和命名空间。

  4. 单击创建应用。

1.2 为基线应用开通微服务治理功能

重要

全链路灰度为MSE微服务治理专业版功能,链路中所有涉及应用均需开启微服务治理功能才能使用。

在应用列表页面,单击应用名称,在左侧导航栏选择微服务治理 > 应用概览,单击开启微服务治理。

说明
  • 应用开通的微服务治理功能的版本与MSE版本保持一致。

  • 如果您的应用未接入MSE商业版,请参见一键升级微服务治理功能文档一键升级微服务治理功能。

  • 开启过程应用的所有实例将触发一次重启,请在业务低峰期进行操作。

3JVeLD4e3p

开启过程需要1~2分钟,请您耐心等待。

2. 部署灰度应用

基于基线应用部署灰度应用:

  • 其中基线应用sae-a部署两个灰度应用,分别为sae-a-a1应用和sae-a-a2应用。

  • 其中基线应用sae-b部署一个灰度应用,为sae-b-b1。

  • 其中基线应用sae-c部署两个灰度应用,分别为sae-c-c1应用和sae-c-c2应用。

具体操作步骤,如下所示。

  1. 在应用列表页面,单击基线应用右侧的CBDwvZhrJR图标,然后单击创建灰度应用。

    说明

    如果您没有开启基线应用的微服务治理功能,则无法创建灰度应用。开启步骤,请参见为基线应用开通微服务治理功能。

  2. 在应用基本信息向导页,配置以下信息,然后单击下一步:高级设置。

    1. 在基础信息设置区域,设置灰度应用名称并选择以镜像或代码包的方式部署灰度应用。具体操作,请参见应用部署。

      说明
      • 灰度应用的命名空间配置会自动继承基线应用的相关配置,因此您无需对其进行额外修改。

      • 应用部署方式也会自动继承基线应用的部署方式。在本示例中,您无需重新上传代码包进行部署,但在实际的生产环境中,请根据需要进行相应的配置调整。

    2. 在灰度标签区域,设置标签值。本示例灰度应用标签的配置,请参见场景示例。

      cpMNLt6IRK

    3. 在容量设置区域,配置单实例规格和实例数。

  3. 在高级设置向导页,根据实际需求配置相关功能。具体操作,请参见高级配置。

    说明

    灰度应用的服务发现功能会自动继承基线应用的相关配置,因此您无需对其进行额外修改。

  4. 单击创建应用。

3. 创建云原生API网关路由

  1. 灰度应用创建完成后,返回应用列表页面,单击左侧导航栏的命名空间,然后在命名空间页面,单击基线应用和灰度应用所在的命名空间名称。

  2. 进入目标命名空间后,在左侧导航栏单击网关路由,然后单击创建网关路由。

  3. 在创建路由页面创建云原生API网关路由。本文只介绍关键步骤,详细配置说明,请参见为应用设置路由规则(API网关)。

    说明

    本文中的配置仅适用于本示例。在生产环境中,请根据实际需求进行相应的配置调整。

    1. 选择网关类型为云原生API网关。

    2. 网关实例选择在前提条件中已创建的网关实例。

    3. 路径(Path)选择为前缀是/。

    4. 服务来源选择MSE Nacos。

    5. MSE Nacos实例和MSE Nacos命名空间选择与基线应用相同的MSE Nacos实例和命名空间。

      MLdFMKL57f

    6. 使用场景选择单服务场景。

    7. 后端服务的应用名称选择为sae-a,服务名称选择为sc-A,服务协议为HTTP,服务端口为20001。

  4. 单击保存。

4. 创建泳道组及泳道

4.1 创建泳道组

  1. 云原生API网关创建成功后,返回命名空间页面,在左侧导航栏选择微服务治理 > 全链路灰度,在全链路灰度页面选择目标命名空间,然后单击创建泳道组及泳道。

    wCisG7DnY9

  2. 在弹出的创建泳道组面板,配置以下参数信息,然后单击确定。

    1. 自定义泳道组名称。

    2. 入口类型选择云原生API网关。

    3. 泳道组流量入口选择在前提条件中创建的云原生API网关实例。

    4. 泳道组涉及应用选择所有的基线应用。

    8IxrzCljwr

4.2 创建泳道

在整个泳道组内,支持创建基于按内容灰度的泳道和基于按比例灰度的泳道。然而,一旦第一个泳道创建成功,后续创建的泳道将无法更改灰度模式。

以下表格中的示例均为本文场景的配置示例。在实际的生产环境中,请根据具体需求进行相应的调整。

创建基于按内容灰度的泳道

按照以下说明创建两个泳道。

  1. 在全链路灰度页面,单击点击创建第一个分流泳道。

    重要

    第一个泳道创建完成后,单击创建泳道来创建第二个泳道。

  2. 在弹出的创建泳道面板,配置以下参数信息,然后单击确定。

    X34JYON2rm

    配置项

    示例

    说明

    泳道名称

    • 第一个泳道名称:test-1

    • 第二个泳道名称:test-2

    自定义泳道名称,每条泳道名称不能重复。

    泳道标签

    • 第一个泳道的标签:g1

    • 第二个泳道的标签:g2

    在下拉列表中选择需要给请求打标的标签值,此标签为创建灰度应用时配置的标签。

    泳道状态

    两个泳道的状态均为开启。

    泳道状态是默认开启的。

    灰度模式

    两个泳道的灰度模式均选择按内容灰度。

    选择按内容灰度,此模式的具体说明,请参见控制台。

    灰度条件

    • 第一个泳道的灰度条件:

      • 以下条件同时满足

      • 参数类型:Header

      • 参数:t

      • 条件:==

      • 值:g1

    • 第二个泳道的灰度条件:

      • 以下条件同时满足

      • 参数类型:Header

      • 参数:t

      • 条件:==

      • 值:g2

    当请求满足所配置的灰度条件时,会被打上前面指定的泳道标签。

    • 支持以下两种筛选条件:

      • 以下条件同时满足:当请求都满足下面的条件时,才会被打上灰度标签。

      • 以下条件任意满足:当请求满足下面的任意一个条件时,都会被打上灰度标签。

    • 支持通过以下几个参数字段进行条件筛选:

      • 参数类型:支持Header、Cookie和Parameter。

      • 参数:支持自定义。

      • 条件:支持==、!=、in、百分比、正则匹配和前缀匹配。

      • 值:支持自定义。

创建基于按比例灰度的泳道

按照以下说明创建两个泳道。

  1. 在全链路灰度页面,单击点击创建第一个分流泳道。

    重要

    第一个泳道创建完成后,单击创建泳道来创建第二条泳道。

  2. 在弹出的创建泳道面板,配置以下参数信息,然后单击确定。

    8hiyAU8B9d

    配置项

    示例

    说明

    泳道名称

    • 第一个泳道名称:test-1

    • 第二个泳道名称:test-2

    自定义泳道名称,每条泳道名称不能重复。

    泳道标签

    • 第一个泳道的标签:g1

    • 第二个泳道的标签:g2

    在下拉列表中选择需要给请求打标的标签值,此标签为创建灰度应用时配置的标签。

    泳道状态

    两个泳道的状态均为开启。

    泳道状态是默认开启的。

    灰度模式

    两个泳道的灰度模式均选择按比例灰度。

    选择按比例灰度,此模式的具体说明,请参见控制台。

    流量比例

    • 第一个泳道的流量比例:50%

    • 第二个泳道的流量比例:50%

    为所选路由或Path设置流量比例,在默认情况下,泳道内所有的路由或Path都将使用统一的流量比例。

5. 结果验证

5.1 访问测试

  1. 登录云原生API网关控制台,在左侧导航栏单击实例,在顶部菜单栏选择目标地域,然后单击您在前提条件中创建的API网关实例ID。

  2. 在API网关实例的概览页面,单击接入点页签,然后在访问域名及IP页签查看控制台免费提供的访问域名和实例IP。

    x70nyGpb1Q

    重要
    • 访问域名是网关实例的访问入口,在生产使用中,您需要将业务域名通过DNS服务CNAME至访问域名。直接通过访问域名访问每天有1000次访问限制,可用于测试,请勿直接用于生产。

    • 实例IP是网关对外提供服务的IP地址,但不建议您直接将业务域名映射到实例IP上。推荐您采用业务域名CNAME至访问域名的使用方式,访问域名会在多个IP间负载均衡,避免单IP单可用区故障。实例IP仅建议您在申请域名注册或配置IP黑白名单时使用。

  3. 复制访问域名或公网IP,在浏览器进行访问测试。

    本示例中使用域名访问的URL格式为:http://<访问域名>/<访问路径>。如:http://env-cu2c******/a。
    本示例中使用公网IP访问的URL格式为:http://<公网:80>/<访问路径>,如:http://8.147.XX.XX:80/a。

    wIcsfE5KT3

5.2 灰度流量验证

说明

您可以通过云原生API网关暴露出的公网IP地址进行访问验证。但是在生产环境中,不建议直接将业务域名映射到公网IP上,推荐将业务域名CNAME至环境二级域名进行使用。

按内容灰度流量验证

  1. 使用curl命令测试基线流量:

    #测试命令
    curl 8.130.XX.XX/a
    # 测试结果
    A[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C[192.168.XX.XX]
  2. 使用curl命令测试灰度流量,以参数类型选择Header为例:

    # 测试命令
    curl 8.130.XX.XX/a -H "tag: ${tag}" 
    
    # 测试结果
    A${tag}[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C${tag}[192.168.XX.XX]
    说明

    当参数带上tag: ${tag}时,会命中灰度标签,并向后透传。

按比例灰度流量验证

使用curl命令进行验证。

#测试命令
curl 8.130.XX.XX/a
# 测试结果
A[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C[192.168.XX.XX]
A${tag}[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C${tag}[192.168.XX.XX]

5.3 微服务治理可观测

在SAE控制台的全链路灰度页面,在泳道组及涉及的应用区域单击目标应用,在应用QPS监控区域,可查看对应泳道基线版本和灰度版本的流量情况。选择回放时间,展示所选时间对应的指标数据。

说明

您也可以在应用QPS监控区域单击流量详情,查看更为详细的信息。

IFK9aFF29x

相关文章

基于MSE云原生网关实现全链路灰度 2025-04-17 10:59

在微服务场景中,应用间的调用是随机的。当您部署的Spring Cloud应用或Dubbo应用存在升级版本时,可能会导致无法将具有一定特征的流量路由到应用的目标版本。通过SAE提供的全链路灰度能力,您无需修改业务代码,就可以实现端到端的全链路流量控制。泳道可以将应用的相关版本隔离成一个独立的运行环境。

基于Java服务网关实现全链路灰度 2025-04-17 10:59

通过SAE提供的全链路灰度功能,您可以在不更改业务代码的情况下轻松实现全面的流量控制。本文主要介绍如

基于云原生API网关实现全链路灰度 2025-04-17 10:59

通过SAE提供的全链路灰度功能,您可以轻松实现全面的流量控制,而无需更改您的业务代码。本文主要介绍如何配置基于云原生API网关的全链路灰度,并实现端到端的灰度部署。

使用云原生API网关配置基于K8s Service实现全链路灰度 2025-04-17 10:59

通过SAE提供的全链路灰度功能,您可以轻松实现全面的流量控制,而无需更改您的业务代码。本文主要介绍如何使用云原生API网关配置基于K8s Service的全链路灰度,并实现端到端

使用MSE云原生网关配置基于K8s Service的全链路灰度(邀侧) 2025-04-17 10:59

通过SAE提供的全链路灰度功能,您可以轻松实现全面的流量控制,而无需更改您的业务代码。本文主要介绍如何配置使用MSE云原生网关配置基于K8s Service的全链路灰度,并实现端

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号