在K8s架构体系下,Spring Cloud Gateway缺乏发现容器服务的能力,性能不如Nginx Ingress,可观测性和安全性也需要二次开发和集成。在上云、混合云等场景中可能出现Ingress和Spring Cloud Gateway的双层网络架构,这不仅增加了层网络和资源消耗,也增加了运维成本。云原生网关将传统的流量网关和微服务网关场景二合一,可以大幅降低服务成本,同时具有高性能、高集成和开箱即用的优势。本文介绍如何将服务从Spring Cloud Gateway迁移到云原生网关。
前提条件
步骤一:明确服务来源
如果您是以下情况,可以直接跳到步骤二:迁移Spring Cloud Gateway配置。
-
使用的ACK容器服务,并使用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目前,云原生网关支持多种路由策略。具体操作,请参见:
步骤三:为网关配置认证鉴权
云原生网关支持多种标准鉴权体系,请参见:
步骤四:查看网关全局数据
云原生网关支持查看网关全局数据大盘,请参见:
步骤五:迁移流量
以下内容提供调用端流量迁移思路:
-
调用方(客户端)迭代迁移:可以选取部分业务场景迭代修改访问地址,迁移验证。
-
代理层逐步灰度迁移:可在原接入代理层制定分阶段变更方案,依据核心业务与非核心业务的划分,逐步将流量灰度切换至新地址。
-
域名解析全量切换:完成充分灰度后,将域名解析切换至新的云原生网关入口地址。
-
(推荐)分步骤迁移:
-
选取部分业务场景试用验收。
-
逐步迭代灰度迁移核心场景流量。
-
充分压力验证后,切换域名解析全量迁移。
-
|
迁移方案 |
成本 |
风险 |
|
迭代迁移 |
高 |
低 |
|
代理层逐步灰度迁移 |
中 |
中 |
|
域名解析全量切换 |
低 |
高 |
|
分步骤迁移 |
较低 |
较低 |
相关文档
关于云原生网关的更多信息,请参见云原生网关概述。