在云原生網關升級到2.0.2版本后,您可以使用新版的全鏈路灰度能力,本文介紹從各種不同場景切換到新版全鏈路灰度的遷移路徑。
背景
在云原生網關2.0.2版本上線前,您使用云原生網關作為入口進行全鏈路灰度時,必須使用指向單版本的標簽路由作為基線路由。
在云原生網關升級到2.0.2版本后,您可以使用新版的全鏈路灰度能力,無需創建灰度路由,在大規模入口路由的場景下可以獲得更好的性能與體驗。
限制條件
云原生網關版本大于等于2.0.2。
需要將原有的標簽路由改為完全條件一致的單服務路由。
環境準備
本文以下圖中的微服務應用作為例子進行演示。應用中包含A、B、C三個應用,調用鏈路為 A -> B -> C,云原生網關訪問入口應用A。
遷移路徑
本文描述對于當前存在的泳道,如何平滑遷移到新的全鏈路灰度實現。
按內容
泳道遷移
老的泳道中,各泳道的比例配置如下圖: header中color=gray時指向gray環境;color=blue時指向blue環境。
步驟一:創建新的單服務路由
創建一條和原有路由匹配條件完全一致的單服務路由。根據當前的路由匹配規則,當匹配條件一致時,創建時間早的路由會生效,因此保持原有的請求條件會匹配到老的標簽路由。
為了臨時測試該單服務路由,為其額外增加一個匹配條件:請求Header中migrate=true
步驟二:驗證原有灰度鏈路不受影響
請求基線
請求gray泳道
請求blue泳道
步驟三:創建新的全鏈路灰度泳道
完成網關升級,可以創建新的泳道,泳道規則和之前保持一致。
回到路由列表頁,可以看到沒有新的灰度路由被創建,作為基線的單服務路由有全鏈路灰度標記。
測試老的基線路由/灰度路由,可以正常生效。
測試新的基線路由,表現正常。
步驟四:路由切流
調整單服務路由的匹配規則,去掉請求Header中migrate=true的條件,發布路由。
下線原有基線標簽路由。
驗證灰度,依然正常。
此時老的標簽路由為下線狀態,若切流過程中出現問題,可隨時通過重新發布原有基線路由來執行回滾。
步驟五:老泳道下線
若驗證新的單服務路由正常,可以對老的泳道執行下線操作,徹底清除灰度路由。
回到全鏈路灰度,刪除原有泳道。
可以觀察到灰度路由已被刪除。
刪除原有基線標簽路由,遷移完成。
按比例
泳道遷移
老的按比例泳道中,各泳道的比例配置如下圖:gray環境分配30%流量,blue環境分配10%流量。
步驟一:創建新的單服務路由
創建一條和原有路由匹配條件完全一致的單服務路由。根據當前的路由匹配規則,當匹配條件一致時,創建時間早的路由會生效,因此保持原有的請求條件會匹配到老的標簽路由。
為了臨時測試該單服務,為其額外增加一個匹配條件:請求Header中migrate=true
步驟二:驗證原有灰度鏈路不受影響
執行測試腳本,分流比例正常。
查看網關訪問日志,可以看到依然匹配到的是基線路由a。
步驟三:創建新的全鏈路灰度泳道
完成網關升級,可以創建新的泳道,泳道規則和之前保持一致。
回到路由列表頁,可以看到沒有新的灰度路由被創建,作為基線的單服務路由有全鏈路灰度標記。
使用測試腳本測試,流量比例正常。
調整測試腳本,在訪問路由A時添加請求header migrate=true,使其指向新的單服務路由
執行測試,分流比例符合預期。
步驟四:路由切流
調整單服務路由的匹配規則,去掉請求Header中migrate=true的條件,發布路由。
移除測試腳本中的請求header migrate=true,分流比例符合預期。
下線老的基線標簽路由,灰度路由一并被下線。
重新執行測試腳本,分流比例依然符合預期。
此時老的標簽路由為下線狀態,若切流過程中出現問題,可隨時通過重新發布原有基線路由來執行回滾。
步驟五:老泳道下線
若驗證新的單服務路由正常,可以對老的泳道執行下線操作,徹底清除灰度路由
回到全鏈路灰度,刪除原有泳道。
可以觀察到灰度路由已被刪除。
刪除原有基線標簽路由,遷移完成。