云原生网关新版全链路灰度迁移

在云原生网关升级到2.0.2版本后,您可以使用新版的全链路灰度能力,本文介绍从各种不同场景切换到新版全链路灰度的迁移路径。

背景

在云原生网关2.0.2版本上线前,您使用云原生网关作为入口进行全链路灰度时,必须使用指向单版本的标签路由作为基线路由。

在云原生网关升级到2.0.2版本后,您可以使用新版的全链路灰度能力,无需创建灰度路由,在大规模入口路由的场景下可以获得更好的性能与体验。

限制条件

  • 云原生网关版本大于等于2.0.2。

  • 需要将原有的标签路由改为完全条件一致的单服务路由。

环境准备

本文以下图中的微服务应用作为例子进行演示。应用中包含A、B、C三个应用,调用链路为 A -> B -> C,云原生网关访问入口应用A。

image

迁移路径

本文描述对于当前存在的泳道,如何平滑迁移到新的全链路灰度实现。

按内容

泳道迁移

老的泳道中,各泳道的比例配置如下图: header中color=gray时指向gray环境;color=blue时指向blue环境。

89606bd7bf601ff727a27f9728c0d7e4

步骤一:创建新的单服务路由

创建一条和原有路由匹配条件完全一致的单服务路由。根据当前的路由匹配规则,当匹配条件一致时,创建时间早的路由会生效,因此保持原有的请求条件会匹配到老的标签路由。

为了临时测试该单服务路由,为其额外增加一个匹配条件:请求Header中migrate=true

image

步骤二:验证原有灰度链路不受影响
  • 请求基线

    image

  • 请求gray泳道

    image

  • 请求blue泳道

    image

步骤三:创建新的全链路灰度泳道

完成网关升级,可以创建新的泳道,泳道规则和之前保持一致。

image

回到路由列表页,可以看到没有新的灰度路由被创建,作为基线的单服务路由有全链路灰度标记。

image

测试老的基线路由/灰度路由,可以正常生效。

image

image

image

测试新的基线路由,表现正常。

image

image

image

步骤四:路由切流

调整单服务路由的匹配规则,去掉请求Header中migrate=true的条件,发布路由。

image

下线原有基线标签路由。

image

验证灰度,依然正常。

image

image

重要

此时老的标签路由为下线状态,若切流过程中出现问题,可随时通过重新发布原有基线路由来执行回滚。

步骤五老泳道下线

若验证新的单服务路由正常,可以对老的泳道执行下线操作,彻底清除灰度路由。

回到全链路灰度,删除原有泳道。

image

可以观察到灰度路由已被删除。

image

删除原有基线标签路由,迁移完成。

image

按比例

泳道迁移

老的按比例泳道中,各泳道的比例配置如下图:gray环境分配30%流量,blue环境分配10%流量。

68a172c1e2a8400514d449e336f3a551

步骤一:创建新的单服务路由

创建一条和原有路由匹配条件完全一致的单服务路由。根据当前的路由匹配规则,当匹配条件一致时,创建时间早的路由会生效,因此保持原有的请求条件会匹配到老的标签路由。

为了临时测试该单服务,为其额外增加一个匹配条件:请求Header中migrate=true

image

步骤二:验证原有灰度链路不受影响

执行测试脚本,分流比例正常。

image

查看网关访问日志,可以看到依然匹配到的是基线路由a。

image

步骤三:创建新的全链路灰度泳道

完成网关升级,可以创建新的泳道,泳道规则和之前保持一致。

image

回到路由列表页,可以看到没有新的灰度路由被创建,作为基线的单服务路由有全链路灰度标记。

image

使用测试脚本测试,流量比例正常。

image

调整测试脚本,在访问路由A时添加请求header migrate=true,使其指向新的单服务路由

执行测试,分流比例符合预期。

image

步骤四:路由切流

调整单服务路由的匹配规则,去掉请求Header中migrate=true的条件,发布路由。

image

移除测试脚本中的请求header migrate=true,分流比例符合预期。

image

下线老的基线标签路由,灰度路由一并被下线。

image

重新执行测试脚本,分流比例依然符合预期。

image

重要

此时老的标签路由为下线状态,若切流过程中出现问题,可随时通过重新发布原有基线路由来执行回滚。

步骤五:老泳道下线

若验证新的单服务路由正常,可以对老的泳道执行下线操作,彻底清除灰度路由

回到全链路灰度,删除原有泳道。

image

可以观察到灰度路由已被删除。

image

删除原有基线标签路由,迁移完成。

image