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