全部產品
Search
文件中心

Microservices Engine:從Spring Cloud Gateway遷移到雲原生網關

更新時間:Jul 06, 2024

在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的版本)。

  • 未依賴任何服務發現機制,使用網域名稱和固定地址服務。

如果您是以下情況,可執行相應的遷移操作接入雲原生網關:

  • 自建註冊中心

    1. 購買MSE Nacos註冊中心,請參見建立Nacos引擎

    2. 修改配置或代碼,將服務註冊到MSE Nacos上,請參見Java SDK

    3. 可選: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服務來源

  • 服務關聯對照操作

    1. 添加服務,即匯入需要訂閱的服務,請參見添加服務

    2. 為添加的服務設定合適路由版本,請參見管理服務版本

    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

    目前,雲原生網關支援多種路由策略。具體操作,請參見:

步驟三:為網關配置認證鑒權

雲原生網關支援多種標準鑒權體系,請參見:

步驟四:查看網關全域資料

雲原生網關支援查看網關全域資料大盤,請參見:

步驟五:遷移流量

下面為您提供調用端流量遷移思路:

  • 調用方(用戶端)迭代遷移:您可以選取部分業務情境迭代修改訪問地址,遷移驗證。

  • 代理層逐步灰階遷移:您可以在原接入代理層制定變更步驟(例如,按照核心業務和非核心業務劃分),逐步灰階轉寄到新地址。

  • 網域名稱解析全量切換:充分灰階後,將網域名稱重新到新雲原生網關入口地址。

  • (推薦)分步驟遷移:

    1. 選取部分業務情境試用驗收。

    2. 逐步迭代灰階遷移核心情境流量。

    3. 充分壓力驗證後,切換網域名稱解析全量遷移。

遷移方案

成本

風險

迭代遷移

代理層逐步灰階遷移

網域名稱解析全量切換

分步驟遷移

較低

較低

相關文檔

關於雲原生網關的更多資訊,請參見雲原生網關概述