从Spring Cloud Gateway迁移到云原生网关

在K8s架构体系下,Spring Cloud Gateway缺乏发现容器服务的能力,性能不如Nginx Ingress,可观测性和安全性也需要二次开发和集成。在上云、混合云等场景中可能出现Ingress和Spring Cloud Gateway的双层网络架构,这不仅增加了层网络和资源消耗,也增加了运维成本。云原生网关将传统的流量网关和微服务网关场景二合一,可以大幅降低服务成本,同时具有高性能、高集成和开箱即用的优势。本文介绍如何将服务从Spring Cloud Gateway迁移到云原生网关。

前提条件

步骤一:明确服务来源

如果您是以下情况,可以直接跳到步骤二:迁移Spring Cloud Gateway配置

  • 使用的ACK容器服务,并使用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. 充分压力验证后,切换域名解析全量迁移。

迁移方案

成本

风险

迭代迁移

代理层逐步灰度迁移

域名解析全量切换

分步骤迁移

较低

较低

相关文档

关于云原生网关的更多信息,请参见云原生网关概述