隨著云原生技術的發(fā)展,微服務架構選型也在不斷演進。在K8s重塑運維體系的云時代,Zuul在幾個方面顯得不足:缺乏容器服務發(fā)現(xiàn)能力,性能不如Nginx Ingress,可觀測性和安全性方面需要二次開發(fā)和集成。這些短板限制了技術發(fā)展。云原生網關將傳統(tǒng)的流量網關和微服務網關場景結合起來,能夠顯著降低服務成本,同時具有高性能、高集成和開箱即用的優(yōu)勢。本文介紹如何將服務從Zuul遷移到云原生網關。
前提條件
步驟一:明確服務來源
如果您是以下情況,可以直接跳到步驟二:遷移Zuul配置。
使用的ACK容器服務,并使用K8s Service作為服務發(fā)現(xiàn)。
已購買使用MSE Nacos作為注冊中心(升級到支持MCP的版本)。
未依賴任何服務發(fā)現(xiàn)機制,使用域名和固定地址服務。
如果您是以下情況,可執(zhí)行相應的遷移操作接入云原生網關:
自建注冊中心
購買MSE Nacos注冊中心,請參見創(chuàng)建Nacos引擎。
修改配置或代碼,將服務注冊到MSE Nacos上,請參見Java SDK。
可選:Java應用可以基于MSE治理Agent技術實現(xiàn)注冊中心遷移,請參見MSE Sync遷移方案。
EDAS共享注冊中心
云原生網關支持EDAS注冊中心,您可以直接添加服務來源。具體操作,請參見新建服務來源。
SAE共享注冊中心
云原生網關支持SAE注冊中心,您可以直接添加服務來源。具體操作,請參見新建服務來源。
步驟二:遷移Zuul配置
Zuul參考配置如下:
關聯(lián)的注冊中心
spring: application: name: zuul-demo cloud: nacos: discovery: server-addr: nacos-server:8848 config: enabled: false
路由服務等相關配置
zuul: routes: demo: path: /test/a serviceId: service-a pre: path: /auth/validation/** serviceId: service-a header: path: /auth/test requestHeadersToAdd: - key: debug_tag value: true retry: path: /app/try/** stripPrefix: false retryable: true serviceId: service-a retryable: true ignoredPatterns: - /login/api/a/v3/a - /auth/api/b 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
Zuul配置遷移對照MSE網關管理控制臺操作如下:
注冊中心對照操作
云原生網關將注冊中心的關聯(lián)統(tǒng)一抽象為服務來源的管理,您可以通過MSE網關管理控制臺創(chuàng)建服務來源,然后關聯(lián)服務,動態(tài)實時生效。具體操作,請參見新建服務來源。
服務關聯(lián)對照操作
service-a: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule ConnectTimeout: 1000 ReadTimeout: 8000 MaxAutoRetries: 3 MaxAutoRetriesNextServer: 2 MaxTotalConnections: 20000 MaxConnectionsPerHost: 5000
路由配置對照操作
為網關配置路由策略,請參見新建路由規(guī)則。
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
目前,云原生網關支持多種路由策略。具體操作,請參見:
步驟三:為網關配置認證鑒權
云原生網關支持多種標準鑒權體系,請參見:
步驟四:查看網關全局數(shù)據(jù)
云原生網關支持查看網關全局數(shù)據(jù)大盤,請參見:
步驟五:遷移流量
下面為您提供調用端流量遷移思路:
調用方(客戶端)迭代遷移:您可以選取部分業(yè)務場景迭代修改訪問地址,遷移驗證。
代理層逐步灰度遷移:您可以在原接入代理層制定變更步驟(例如,按照核心業(yè)務和非核心業(yè)務劃分),逐步灰度轉發(fā)到新地址。
域名解析全量切換:充分灰度后,將域名重新到新云原生網關入口地址。
(推薦)分步驟遷移:
選取部分業(yè)務場景試用驗收。
逐步迭代灰度遷移核心場景流量。
充分壓力驗證后,切換域名解析全量遷移。
遷移方案 | 成本 | 風險 |
迭代遷移 | 高 | 低 |
代理層逐步灰度遷移 | 中 | 中 |
域名解析全量切換 | 低 | 高 |
分步驟遷移 | 較低 | 較低 |
相關文檔
關于云原生網關的更多信息,請參見云原生網關概述。