在云原生網關中,服務版本主要應用在路由配置中的標簽路由功能。通過對路由設置合適的標簽路由策略,滿足您在金絲雀發布、標簽路由和高可用部署等場景下的需求。
固定地址和DNS域名類型的服務不支持服務版本管理。
背景信息
在微服務領域,服務泛指應用程序的功能單元,通常具備獨立的業務域,例如訂單服務、用戶服務等。從物理上看,服務部署運行在具有網絡地址的容器、虛擬機和物理機上;從邏輯上看,服務由一組提供相同功能的網絡節點組成。
服務版本,可以理解為服務所有節點的子集,是根據節點的元數據信息分組后的實例集。服務版本通常應用在金絲雀發布、標簽路由和高可用部署場景中。
金絲雀發布:在服務持續迭代發展過程中,頻繁存在服務新版本發布上線的需求,為了確保流量在服務升級過程中平穩無損,開發者經常會使用金絲雀發布手段來將小部分流量分發到新版本進行驗證,驗證符合預期后,逐步將流量從老版本完全遷移至新版本。
標簽路由:在實際業務中,有的服務本身存在多個版本,各個版本之間功能也有差異,分別應用于有特定信息的請求。例如對于同一個API,帶有某個Header值的請求必須訪問服務的某個版本。另一個場景是多套開發環境(測試、預發和生產),利用服務版本可以根據請求的信息來決定分發到哪個開發環境。
高可用部署:為了保證服務的可用性,服務可以部署在不同的K8s集群中,我們可以根據節點上與集群相關的元數據信息對服務所有實例按集群維度進行版本管理,并且可以調整流量到各個集群(各個服務版本)的權重。當某個集群出現故障時,設置流量到該集群的權重為0,即可達到流量切換目的。
服務版本管理依賴服務節點上關聯的元數據信息。
對于容器服務K8s,服務節點上的元數據信息來源于Pod的Labels屬性。例如,如果使用的是SpringCloud應用并關聯了K8sService,那么可以在K8sDeployment YAML的
spec.template.metadata.labels
下增加標簽名及標簽值。對于Nacos注冊中心,服務節點上的元數據信息取決于業務應用注冊節點時攜帶的元數據信息。例如,如果使用的是SpringCloud應用和Nacos注冊中心,那么可以通過
spring.cloud.nacos.discovery.metadata
字段來設置節點的元數據信息。
添加服務版本
登錄MSE網關管理控制臺,并在頂部菜單欄選擇地域。
在左側導航欄,選擇云原生網關 > 網關列表,單擊目標網關名稱。
在左側導航欄,選擇路由管理,然后選擇服務頁簽。
單擊需要變更的服務名稱,然后在服務版本區域,單擊添加新版本。
在服務版本列表配置相關參數,然后單擊操作列下方的圖標。
配置項
說明
版本名稱
輸入服務版本名稱,建議使用可讀性強、語義明確的版本名稱。
標簽名
顯示該服務下所有實例關聯的節點元數據信息的Key(鍵)集合,您需選擇其中一個Key作為劃分新版本實例集的依據。
標簽值
顯示在所選標簽名下所有實例的Value集合,您需選擇其中一個Value作為劃分新版本實例集的依據。
實例數/比例
實例數:根據所設置的標簽名和標簽值從所有實例中篩選出的實例數,即屬于當前版本的實例集。
比例:篩選出屬于當前版本的實例占所有實例的比重。
說明標簽名和標簽值共同作為劃分當前版本實例集的依據。
在確定保存對話框,單擊確定。
服務版本添加成功后,即顯示在服務版本中。
編輯服務版本
登錄MSE網關管理控制臺,并在頂部菜單欄選擇地域。
在左側導航欄,選擇云原生網關 > 網關列表,單擊目標網關名稱。
在左側導航欄,選擇路由管理,然后選擇服務頁簽。
單擊需要變更的服務名稱,然后在服務版本區域,單擊操作列下的圖標。
選擇新的標簽名和標簽值,然后單擊操作列下的圖標。
在確定保存對話框,單擊確定。
刪除服務版本
登錄MSE網關管理控制臺,并在頂部菜單欄選擇地域。
在左側導航欄,選擇云原生網關 > 網關列表,單擊目標網關名稱。
在左側導航欄,選擇路由管理,然后選擇服務頁簽。
單擊需要變更的服務名稱,然后在服務版本列表中單擊操作列下的圖標。
在確定刪除對話框,單擊確定。