為避免過期版本實例存在的安全和穩定性風險,同時保證您業務的連貫性,服務網格ASM支持通過原地升級或金絲雀升級的方式升級控制平面和數據平面。本文介紹ASM實例升級前后的注意事項和說明、升級路徑、升級流程和操作步驟等。
前提條件
相關概念
概念 | 說明 |
原地升級 | 支持控制面和數據面分階段、逐步升級。您可以在ASM控制臺發起控制平面升級,控制平面升級完畢后,需要您手動升級數據平面Sidecar代理和網關。 |
金絲雀升級 | 支持升級期間執行回滾操作。首先啟動一個新版本控制面,可以先將部分業務遷移至新版本控制面,驗證無誤后,再完成全量業務遷移。驗證過程出現問題可以回滾。 |
控制平面 | 控制平面負責管理和配置控制服務網格的各種策略和規則。它的核心職責包括:
在ASM中,控制平面主要由Istio的組件構成,例如Istio-Pilot負責服務發現和流量管理,Istio-Citadel負責安全通信的證書管理等。 |
數據平面 | 數據平面主要由一系列輕量級的網絡代理組成,這些代理部署為服務的Sidecar,與應用程序容器在同一個Pod中運行。它的核心職責包括:
在ASM中,數據平面主要通過Istio提供的Envoy代理實現,Envoy代理以Sidecar的形式部署,貼近應用服務,提供高性能的網絡代理能力。 |
為什么需要升級
ASM原則上保持每三個月更新一次Istio大版本的頻率。大版本推出后,由于功能更新和漏洞修復,ASM會不定期推出補丁版本(例如1.19.x.y)的更新。過期的ASM實例版本存在安全和穩定性風險,建議您及時進行升級操作。關于ASM支持的版本,請參見版本機制。
主動升級ASM實例有以下好處:
降低安全和穩定性風險:隨著ASM版本迭代,會不斷優化及修復發現的安全及穩定性漏洞,長久使用過期版本實例會給業務帶來安全和穩定性風險。
享受更好的維護支持:對于過期的實例版本,ASM不再提供安全補丁和問題修復,也無法保證過期版本的技術支持質量。使用新版本能夠讓您享受更好的技術支持和答疑服務。
使用新版本的新功能:隨著社區Istio版本的演進,新版本包含新的功能和改進,ASM也將適配新版本,為您帶來更好的開發和運維體驗。
升級注意事項和說明
注意事項
網格升級需要您手動重啟數據面Pod以完成新版本Sidecar的重新注入,建議您在業務低峰期進行升級操作。
手動升級ASM網關將觸發滾動重啟。
升級期間請勿進行灰度發布、流量規則配置等操作。
原地升級實例時,ASM會對您的實例進行升級預檢查,但無法保證檢查出所有不兼容的功能配置和API。您可以根據幫助文檔、控制臺信息、站內信等渠道關注版本發布情況,在實例升級時提前了解相應版本的升級注意事項。
基于安全原因,ASM有以下機制:
ASM保留強制升級過期版本實例的權利(在實例版本過期后的某個時間,強制升級實例到支持中的最早版本),建議您參照下文提前主動升級實例。
對于補丁版本的升級(例如從v1.18.0.123升級到v1.18.0.146),在不發送通知的情況下,系統會不定期完成自動熱更新。自動熱更新時,數據面網關和Sidecar代理版本保持不變。
原地升級說明
原地升級僅支持相鄰版本升級,不支持跨版本升級,也不支持回退。
金絲雀升級說明
相比于原地升級,金絲雀升級方式可以支持先驗證新版本,確認功能驗證無誤后再切換為當前版本,為業務提供一種更穩妥的升級方式。金絲雀升級支持最多跨一個次要版本升級,過程中支持回退。
類型 | 說明 |
適用版本 | 企業版或旗艦版實例,且版本為1.16.4.91及以上。 |
適用場景 |
說明 僅asm-patch版本有變化的場景,建議您采用原地升級方式。 |
版本格式 | ASM版本的格式為<major>.<minor>.<patch>.<asm-patch>[-<sequence>-aliyun],例如v1.18.0.158-gc6cf0b9c-aliyun(企業版),字段說明如下:
|
Sidecar注入標簽說明
當一個ASM實例開啟金絲雀升級后,對應這個ASM實例的控制面會同時存在兩個版本,例如從1.17.2.42版本金絲雀升級到1.18.0的某個版本,會同時存在1.17.2和1.18.0兩個控制面版本。
在金絲雀升級過程中,您可以通過為Kubernetes集群中的命名空間指定注入標簽,決定命名空間中的工作負載注入的Sidecar版本。默認標簽為istio-injection=enabled
,即注入當前版本。
當兩個版本同時存在時,Namespace標簽下業務注入的Sidecar版本的映射關系說明如下:
當前版本
istio-injection=enabled
標簽注入的Sidecar對應為ASM當前版本,并連接當前版本對應的控制面。給Namespace打上
istio.io/rev=$revision
標簽,標明需要注入的Sidecar版本,revision
變量格式為x-y-z
,例如1-17-2
。給Namespace打上
istio.io/rev=stable
標簽,標明需要注入的Sidecar版本為當前的ASM版本。
重要一個Namespace下,不能同時存在
istio-injection
和istio.io/rev
兩個標簽。金絲雀版本
當業務服務需要注入金絲雀版本對應的Sidecar時,可以采用給Namespace打上
istio.io/rev=$revision
或istio.io/rev=canary
標簽,其中$revision
對應的格式為版本的x-y-z
,例如1-18-0
。建議您使用istio.io/rev=$revision
標簽。關于金絲雀版本的操作示例,請參見使用金絲雀模式增強升級穩定性。
升級路徑、方式和流程
升級路徑
此處以1.16升級到1.18版本為例進行說明,僅作為參考,請您以實際的操作環境為準。
起始版本 | 目標版本 | 升級方式 |
1.16.4.93 | 1.17.2.42 | 原地升級或金絲雀升級 |
1.17.2.42 | 1.18.0.158 | 原地升級或金絲雀升級 |
1.16.4.93 | 1.18.0.158 | 金絲雀升級 |
升級方式
ASM控制臺:支持原地升級和金絲雀升級。具體操作,請參見操作步驟。
API:支持原地升級。具體操作,請參見UpgradeMeshVersion、DescribeUpgradeVersion和DescribeServiceMeshUpgradeStatus。
升級流程
請您確認升級的版本和方式,了解升級注意事項和說明后,再進行升級操作。
操作步驟
原地升級
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在升級管理頁面的原地升級頁簽,單擊運行檢查,在重要提示對話框,單擊確定。
升級預檢查通過后,單擊開始升級,在重要提示對話框,單擊確定。
在數據平面區域的升級列,選中目標網關,單擊升級網關,在重要提示對話框,單擊確定。
按需重啟工作負載。具體操作,請參見重新部署工作負載。
金絲雀升級
具體操作,請參見使用金絲雀模式增強升級穩定性。
升級常見問題
當金絲雀版本切換為正式版本時,對應之前部署的業務服務注入的Sidecar為老版本,如何升級到新版本?
您可以在升級管理頁面單擊金絲雀升級頁簽,然后單擊數據面頁簽,在待升級工作負載區域,單擊目標工作負載右側的滾動升級,觸發業務服務Deployment的滾動更新。
原地升級會影響現有的服務流量接入嗎?
原地升級只影響控制面,不會影響數據面的流量。
ASM實例需要升級多少次才能到目標版本?
原地升級僅支持相鄰大版本升級,金絲雀升級支持最多跨一個次要版本升級。您可以按照實際情況進行計算。
ASM每個版本都可以任意選擇升級方式嗎?
ASM實例版本為1.16.4.91以下,僅支持原地升級;1.16.4.91及以上版本,支持原地升級和金絲雀升級。