本文介绍如何利用阿里云容器服务的Ingress功能,实现灰度发布和蓝绿发布。

背景信息

灰度及蓝绿发布是为新版本创建一个与老版本完全一致的生产环境,在不影响老版本的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版本。

其中A/B测试就是一种灰度发布方式,一部分用户继续使用老版本的服务,将一部分用户的流量切换到新版本,如果新版本运行稳定,则逐步将所有用户迁移到新版本。

应用场景

场景一

假设当前线上环境,您已经有一套服务Service A对外提供7层服务,此时上线了一些新的特性,需要发布上线一个新的版本Service A',但又不想简单地直接替换掉Service A服务,而是希望将请求头中包含foo=bar或者cookie中包含foo=bar的客户端请求转发到Service A'服务中,待运行一段时间稳定后,可将所有的流量从Service A切换到Service A'服务中,再平滑地将Service A服务下线。

场景二

假设当前线上环境,您已经有一套服务Service B对外提供7层服务,此时修复了一些问题,需要发布上线一个新的版本Service B',但又不想简单地将所有客户端流量切换到新版本Service B'中,而是希望将20%的流量切换到新版本Service B'中,待运行一段时间稳定后,可将所有的流量从Service B切换到Service B'服务中,再平滑地将Service B服务下线。

针对以上多种不同的应用发布需求,阿里云容器服务Kubernetes的 Ingress 功能提供的4种流量切分方式:

灰度发布中的A/B 测试:
  • 基于Request Header的流量切分
  • 基于Cookie的流量切分
  • 基于Query Param的流量切分
蓝绿发布:
  • 基于服务权重的流量切分