关于ShenYu 网关规则同步在 Nacos 中的配置。这部分配置是 ShenYu 网关架构的核心,它决定了路由规则如何从 Admin 分发到所有网关节点。
核心原理
ShenYu 使用 Nacos 作为配置中心(Config Center)。其同步流程如下:
- 规则产生: 你在 ShenYu Admin Web 界面上修改任何插件、选择器或规则。
- 规则发布: ShenYu Admin 立即将更改后的全部规则数据序列化为 JSON,并推送到 Nacos 中一个特定的
Data ID
下。 - 规则订阅: 所有 ShenYu 网关节点(Bootstrap)都监听(Watch)着 Nacos 中对应的
Data ID
。 - 规则拉取与生效: 一旦 Nacos 中的配置发生变更,Nacos 服务器会立即通知所有监听的网关节点。网关节点随后从 Nacos 拉取最新的配置数据,并动态加载到内存中,整个过程无需重启网关。
配置详解(两部分必须一致)
规则同步需要同时在 shenyu-admin
(写入端)和 shenyu-bootstrap
(读取端)进行配置,且两者的配置必须严格一致,否则同步会失败。
1. ShenYu Admin 配置(向 Nacos 写入规则)
配置文件: shenyu-admin/conf/application.yml
(或 application-nacos.yml
)
shenyu:
sync:
nacos:
# 必填:Nacos 服务器地址,集群用逗号分隔
url: localhost:8848
# 强烈建议配置:命名空间ID,用于环境隔离(如:dev, test, prod)。在Nacos控制台创建命名空间后,填入其ID(非名称)。
namespace: 4d59f6e0-1b2c-4a5d-8e7f-9a0b1c2d3e4f
# 必填:配置的 Data ID。ShenYu Admin 会将所有规则数据推送到以此值为前缀的一系列Data ID下。
dataId: shenyu
# 必填:配置分组,默认即可。
group: SHENYU_GROUP
# 选填:如果Nacos开启了认证,需要配置
username: nacos
password: nacos
# 选填:超时时间,默认3秒,网络不好可调大
timeout: 5000
# 选填:核心配置。指定需要同步哪些数据类型。
# 可选值:plugin, selector, rule, metaData, auth, proxySelector
# 如果为空或注释掉,则同步所有类型。
# 通常不需要配置,保持默认(同步所有)即可。
# acm:
# dataIds: plugin,selector,rule
启动 Admin 后,你会在 Nacos 控制台看到以下 Data ID:
shenyu.plugin
(插件信息)shenyu.selector
(选择器信息)shenyu.rule
(规则信息)shenyu.metaData
(元数据信息)shenyu.auth
(认证信息)
严禁直接修改这些 Data ID 中的 JSON 内容,所有操作都应通过 Admin Web 界面进行。
2. ShenYu Bootstrap (网关) 配置(从 Nacos 读取规则)
配置文件: shenyu-bootstrap/conf/application.yml
(或 application-local.yml
)
shenyu:
sync:
nacos:
# 必须与 admin 配置的 url 一致!
url: localhost:8848
# 必须与 admin 配置的 namespace 一致!
namespace: 4d59f6e0-1b2c-4a5d-8e7f-9a0b1c2d3e4f
# 必须与 admin 配置的 dataId 一致!
dataId: shenyu
# 必须与 admin 配置的 group 一致!
group: SHENYU_GROUP
# 必须与 admin 配置的认证信息一致!
username: nacos
password: nacos
timeout: 5000
生产环境最佳实践配置示例
这是一个面向生产环境的高可用、高安全性的配置示例。
目标: 为生产环境 prod
搭建 ShenYu 集群。
步骤 1: 在 Nacos 控制台创建命名空间
- 名称:
shenyu-prod
- 系统会自动生成一个 ID (如
a1b2c3d4-e5f6-7890-abcd-ef1234567890
),复制这个 ID。
步骤 2: 配置 ShenYu Admin (所有 Admin 实例配置相同)
shenyu:
sync:
nacos:
# Nacos 集群地址
url: 10.10.1.101:8848,10.10.1.102:8848,10.10.1.103:8848
# 填入步骤1中复制的生产环境命名空间ID
namespace: a1b2c3d4-e5f6-7890-abcd-ef1234567890
# 使用有意义的Data ID,便于识别
dataId: shenyu-gateway-prod
# 使用特定的分组,避免与其他项目冲突
group: SHENYU_PROD_GROUP
# 生产环境必须配置强密码认证
username: shenyu-prod-admin
password: JyS7&Xp2!qL9*$zM
# 生产环境网络稳定,但超时时间可稍长
timeout: 10000
步骤 3: 配置 ShenYu Bootstrap (所有网关实例配置相同)
shenyu:
sync:
nacos:
url: 10.10.1.101:8848,10.10.1.102:8848,10.10.1.103:8848
namespace: a1b2c3d4-e5f6-7890-abcd-ef1234567890
dataId: shenyu-gateway-prod
group: SHENYU_PROD_GROUP
username: shenyu-prod-admin
password: JyS7&Xp2!qL9*$zM
timeout: 10000
验证配置是否成功
- 启动 Nacos: 确保 Nacos 集群正常运行。
- 启动 ShenYu Admin: 观察 Admin 启动日志,是否有
[NacosConfigService]
相关的连接成功日志。 - 登录 Admin Web (
http://localhost:9095
): 随意修改一个插件的规则或选择器。 - 查看 Nacos 控制台: 刷新 Nacos 的 配置列表,找到对应的
Data ID
(如shenyu-gateway-prod.rule
),查看其更新时间是否刚刚变化。点击详情,可以看到最新的 JSON 配置。 - 启动 ShenYu Bootstrap: 观察网关启动日志,会看到类似
success sync nacos config, dataId: shenyu-gateway-prod.rule
的日志,表示它成功从 Nacos 拉取了配置。 - 测试路由: 通过网关访问一个接口,确认路由规则已生效。
总结
配置项 | 作用 | 要求 |
---|---|---|
url | 指定 Nacos 服务器地址 | Admin 与 Gateway 必须一致 |
namespace | 环境隔离的核心 | Admin 与 Gateway 必须一致,且使用 ID 而非名称 |
dataId | 配置的唯一标识 | Admin 与 Gateway 必须一致,生产环境建议赋予有意义的名称 |
group | 配置分组 | Admin 与 Gateway 必须一致 |
username/password | 安全认证 | Admin 与 Gateway 必须一致,生产环境必填 |
通过以上配置,你就建立了一个高效、可靠、实时的生产级规则同步机制,能够轻松支持 ShenYu 网关的集群化部署和动态扩缩容。