使用 Canary 控制平面部署安全升級 Istio

透過提供控制平面的安全 Canary 部署來簡化 Istio 升級。

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

Canary 部署是 Istio 的核心功能。使用者依賴 Istio 的流量管理功能來安全地控制其應用程式新版本的推出,同時利用 Istio 豐富的遙測數據來比較 Canary 版本的效能。然而,當涉及到升級 Istio 時,並沒有一種簡單的方法可以對升級進行 Canary 測試,而且由於升級的就地性質,發現的問題或變更會立即影響整個網格。

Istio 1.6 將支援一種新的升級模型,以安全地 Canary 部署新版本的 Istio。在這個新模型中,代理程式將與它們使用的特定控制平面相關聯。這允許新版本部署到叢集中,風險較低 - 在使用者明確選擇之前,沒有代理程式會連線到新版本。這允許將工作負載逐步遷移到新的控制平面,同時使用 Istio 遙測數據監控變更以調查任何問題,就像使用 VirtualService 處理工作負載一樣。每個獨立的控制平面都稱為「修訂版本」,並具有 istio.io/rev 標籤。

了解升級

升級 Istio 是一個複雜的過程。在兩個版本之間的轉換期間(對於大型叢集來說可能需要很長時間),代理程式和控制平面之間存在版本差異。在舊模型中,舊控制平面和新控制平面使用相同的服務,流量在兩者之間隨機分配,使用者無法控制。然而,在新模型中,不存在跨版本通訊。看看升級如何變化

配置

控制平面選擇是根據 sidecar 注入 webhook 完成的。每個控制平面都配置為選擇命名空間上具有相符 istio.io/rev 標籤的物件。然後,升級過程會配置 pod 連線到特定於該修訂版本的控制平面。與目前模型不同的是,這表示給定的代理程式在其生命週期中會連線到相同的修訂版本。這避免了代理程式切換其連線的控制平面時可能出現的微妙問題。

使用修訂版本時,新的 istio.io/rev 標籤將取代 istio-injection=enabled 標籤。例如,如果我們有一個名為 canary 的修訂版本,我們會使用 istio.io/rev=canary 為我們想要使用此修訂版本的命名空間加上標籤。有關更多資訊,請參閱升級指南

分享此文章