使用金丝雀控制平面部署安全升级 Istio

通过提供安全的金丝雀控制平面部署来简化 Istio 升级。

2020 年 5 月 19 日 | 作者:John Howard - Google

金丝雀部署是 Istio 的核心功能。用户依赖 Istio 的流量管理功能来安全地控制新版本应用程序的推出,同时利用 Istio 的丰富遥测功能来比较金丝雀的性能。但是,在升级 Istio 时,没有简单的方法来对升级进行金丝雀测试,而且由于升级的原位性质,发现的任何问题或更改都会立即影响到整个网格。

Istio 1.6 将支持一种新的升级模型,以便安全地对 Istio 的新版本进行金丝雀部署。在这个新模型中,代理将与它们使用的特定控制平面相关联。这使得新版本能够部署到集群中,风险更低 - 在用户明确选择之前,没有代理会连接到新版本。这使得能够将工作负载逐步迁移到新的控制平面,同时使用 Istio 遥测监控更改以调查任何问题,就像使用 VirtualService 用于工作负载一样。每个独立的控制平面被称为“修订版”,并具有 istio.io/rev 标签。

了解升级

升级 Istio 是一个复杂的过程。在两个版本之间的过渡期间,对于大型集群可能需要很长时间,代理和控制平面之间存在版本差异。在旧模型中,旧的和新的控制平面使用相同的服务,流量在两者之间随机分配,用户无法控制。但是,在新模型中,没有跨版本通信。了解升级是如何变化的

配置

控制平面选择是根据 sidecar 注入 webhook 完成的。每个控制平面都被配置为选择命名空间中具有匹配 istio.io/rev 标签的对象。然后,升级过程会配置 pod 连接到特定于该修订版的控制平面。与当前模型不同,这意味着给定的代理在其生命周期内连接到相同的修订版。这避免了代理切换连接的控制平面时可能出现的细微问题。

使用修订版时,新的 istio.io/rev 标签将替换 istio-injection=enabled 标签。例如,如果我们有一个名为 canary 的修订版,我们将对要使用此修订版的命名空间进行标记,其标记为 istio.io/rev=canary。有关更多信息,请参阅 升级指南

分享此文章