在K8s架構體系下,Spring Cloud Gateway缺乏發現Container Service的能力,效能不如Nginx Ingress,可觀測性和安全性也需要二次開發和整合。在上雲、混合雲等情境中可能出現Ingress和Spring Cloud Gateway的雙層網路架構,這不僅增加了層網路和資源消耗,也增加了營運成本。雲原生網關將傳統的流量網關和微服務網關情境變形平板,可以大幅降低服務成本,同時具有高效能、高整合和開箱即用的優勢。本文介紹如何將服務從Spring Cloud Gateway遷移到雲原生網關。
前提條件
步驟一:明確服務來源
如果您是以下情況,可以直接跳到步驟二:遷移Spring Cloud Gateway配置。
-
使用的ACKContainer Service,並使用K8s Service作為服務發現。
-
已購買使用MSE Nacos作為註冊中心(升級到支援MCP的版本)。
-
未依賴任何服務發現機制,使用網域名稱和固定地址服務。
如果您是以下情況,可執行相應的遷移操作接入雲原生網關:
-
自建註冊中心
-
購買MSE Nacos註冊中心,請參見建立Nacos引擎。
-
修改配置或代碼,將服務註冊到MSE Nacos上,請參見Java SDK。
-
可選:Java應用可以基於MSE治理Agent技術實現註冊中心遷移,請參見MSE Sync遷移方案。
-
-
EDAS共用註冊中心
雲原生網關支援EDAS註冊中心,您可以直接添加服務來源。具體操作,請參見建立服務來源。
-
SAE共用註冊中心
雲原生網關支援SAE註冊中心,您可以直接添加服務來源。具體操作,請參見建立服務來源。
步驟二:遷移Spring Cloud Gateway配置
Spring Cloud Gateway參考配置如下:
-
關聯的註冊中心
spring: application: name: gateway-demo cloud: nacos: discovery: server-addr: nacos-server:8848 config: enabled: false -
路由服務等相關配置
spring: cloud: gateway: default-filters: - AddResponseHeader=X-Response-Default-Foo, Default-Bar routes: - id: websocket_test uri: ws://localhost:9000 order: 9000 predicates: - Path=/echo - id: default_path_to_service-a uri: lb://service-a order: 10000 predicates: - Path=/sleep service-a: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule ConnectTimeout: 1000 ReadTimeout: 8000 MaxAutoRetries: 3 MaxAutoRetriesNextServer: 2 MaxTotalConnections: 20000 MaxConnectionsPerHost: 5000 hystrix: command: service-a: execution: isolation: thread: timeoutInMilliseconds: 60000 strategy: SEMAPHORE semaphore: maxConcurrentRequests: 60000
Spring Cloud Gateway配置遷移對照MSE網關管理主控台操作如下:
-
註冊中心對照操作
雲原生網關將註冊中心的關聯統一抽象為服務來源的管理,您可以通過MSE網關管理主控台建立服務來源,然後關聯服務,動態即時生效。具體操作,請參見建立服務來源。在建立來源對話方塊中,來源類型選擇MSE Nacos,選擇對應的叢集名稱,註冊類型填寫
NACOS,並填寫登入位址。前提條件:需在參數設定中將MCPEnabled設定為true。完成後單擊確定。 -
服務關聯對照操作
service-a: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule ConnectTimeout: 1000 ReadTimeout: 8000 MaxAutoRetries: 3 MaxAutoRetriesNextServer: 2 MaxTotalConnections: 20000 MaxConnectionsPerHost: 5000 -
路由配置對照操作
為網關配置路由策略,請參見建立路由規則。
spring: cloud: gateway: routes: - id: websocket_test uri: ws://localhost:9000 order: 9000 predicates: - Path=/echo - id: default_path_to_service-a uri: lb://service-a order: 10000 predicates: - Path=/sleep目前,雲原生網關支援多種路由策略。具體操作,請參見:
步驟三:為網關配置認證鑒權
雲原生網關支援多種標準鑒權體系,請參見:
步驟四:查看網關全域資料
雲原生網關支援查看網關全域資料大盤,請參見:
步驟五:遷移流量
以下內容提供調用端流量遷移思路:
-
調用方(用戶端)迭代遷移:可以選取部分業務情境迭代修改訪問地址,遷移驗證。
-
代理層逐步灰階遷移:可在原接入代理層制定分階段變更方案,依據核心業務與非核心業務的劃分,逐步將流量灰階切換至新地址。
-
網域名稱解析全量切換:完成充分灰階後,將網域名稱解析切換至新的雲原生網關入口地址。
-
(推薦)分步驟遷移:
-
選取部分業務情境試用驗收。
-
逐步迭代灰階遷移核心情境流量。
-
充分壓力驗證後,切換網域名稱解析全量遷移。
-
|
遷移方案 |
成本 |
風險 |
|
迭代遷移 |
高 |
低 |
|
代理層逐步灰階遷移 |
中 |
中 |
|
網域名稱解析全量切換 |
低 |
高 |
|
分步驟遷移 |
較低 |
較低 |
相關文檔
關於雲原生網關的更多資訊,請參見雲原生網關概述。