使用Istio进行灰度发布时,由于不再使用副本比例维持流量分发比例,所以可以安全地设置Kubernetes HPA来管理两个版本部署的副本。无论是蓝绿发布,还是A/B测试或金丝雀发布,均可基于Istio提供的统一的流量路由规则定义来实现。可以有基于流量比例的发布、基于请求内容的发布。下面分别介绍。
1.基于流量比例的发布
Istio根据输入的流量比例来确定流量分发的比重。范围限制为[0,100],例如,当版本v1配置为0,版本v2配置为100时,这种场景即为蓝绿发布。
此外,如果版本v1比例设置为x,则x%的服务流量会走向此版本v1,(100-x)%的流量会走向版本v2,即从版本v1分走一部分流量。这种场景即为金丝雀发布或A/B测试。
2.基于请求内容的发布
基于请求内容的发布会遍历除默认版本外的全部金丝雀规则,若满足某个版本的规则,则流量走向此版本,若全部不满足,则流量会走到默认版本。这种场景即为金丝雀发布或A/B测试中使用到的规则。
例如,可以支持如下基于请求内容的分发:
·基于浏览器的分发
·基于操作系统的分发
·基于Cookie的分发
·Cookie的cookie name包含string。
·存在Cookie的cookie name。
·不存在Cookie的cookie name。
·基于HTTP请求头的分发
·请求头header name包含string。
·请求头中包含header name。
·请求头中不包含header name
针对来自不同浏览器的请求规则定义参见表4-1。
表4-1 基于浏览器的请求规则

针对来自不同操作系统的请求规则定义参见表4-2。
表4-2 基于操作系统的请求规则

针对不同cookie内容的请求规则定义参见表4-3。
表4-3 基于Cookie的请求规则

如上所述,Istio可以支持灵活规则下的金丝雀发布,以及区别于Kubernetes部署方式。Istio服务网格提供了管理流量分配所需的基础控制,并完全独立于AutoScaler,从而允许开发者用简单而强大的方式来进行金丝雀测试和上线操作。