-
Notifications
You must be signed in to change notification settings - Fork 1.4k
如何执行Spring Cloud Gateway网关动态路由
HaojunRen edited this page May 31, 2024
·
2 revisions
注意事项
Spring Cloud Gateway网关在自动路由模式下,动态路由不能工作
支持Spring Cloud Gateway网关官方断言器和过滤器,也支持用户自定义断言器和过滤器
① 精简配置
[
{
"id": "route0",
"uri": "lb://discovery-guide-service-a",
"predicates": [
"Path=/discovery-guide-service-a/**,/x/**,/y/**"
],
"filters": [
"StripPrefix=1"
]
}
]
② 完整配置
[
{
"id": "route0",
"uri": "lb://discovery-guide-service-a",
"predicates": [
"Path=/discovery-guide-service-a/**,/x/**,/y/**"
],
"filters": [
"StripPrefix=1"
],
"order": 0,
"metadata": {}
}
]
① 自定义方式描述网关内置断言器和过滤器
注意事项
自定义方式描述网关内置断言器和过滤器的Key必须遵循如下规则
- 对于没有显式args定义的配置,类似Path、StripPrefix这种配置,args名称必须是
_genkey_序号
格式。例如,"_genkey_0": "/discovery-guide-service-a/**" - 对于显式args定义的配置,类似Header、Cookie、Query这种配置,args名称遵照Spring Cloud Gateway内置格式,请查看相关文档或者源码。例如,Header的KV格式为header -> regexp,Cookie的KV格式为name->regexp,Query的KV格式为param->regexp
[
{
"id": "route0",
"uri": "lb://discovery-guide-service-a",
"userPredicates": [
{
"name": "Path",
"args": {
"_genkey_0": "/discovery-guide-service-a/**",
"_genkey_1": "/x/**",
"_genkey_2": "/y/**"
}
},
{
"name": "Header",
"args": {
"header": "a",
"regexp": "1"
}
},
{
"name": "Header",
"args": {
"header": "b",
"regexp": "2"
}
},
{
"name": "Cookie",
"args": {
"name": "c",
"regexp": "3"
}
},
{
"name": "Cookie",
"args": {
"name": "d",
"regexp": "4"
}
},
{
"name": "Query",
"args": {
"param": "e",
"regexp": "5"
}
},
{
"name": "Query",
"args": {
"param": "f",
"regexp": "6"
}
}
],
"userFilters": [
{
"name": "StripPrefix",
"args": {
"_genkey_0": "1"
}
}
]
}
]
在DiscoveryPlatform界面上,格式为
Path={"_genkey_0":"/discovery-guide-service-a/**", "_genkey_1":"/x/**", "_genkey_2":"/y/**"}
StripPrefix={"_genkey_0":"1"}
Header={"header":"a","regexp":"1"}
Header={"header":"b","regexp":"2"}
Cookie={"name":"c","regexp":"3"}
Cookie={"name":"d","regexp":"4"}
Query={"param":"e","regexp":"5"}
Query={"param":"f","regexp":"6"}
② 自定义方式描述用户扩展的断言器和过滤器
提醒:自定义方式描述用户扩展的断言器和过滤器的Key必须遵循如下规则
- List结构,args名称必须是
list的变量名.序号
格式。例如,"whiteList.0": "* swagger-ui.html" - Map<String, String>结构,args名称必须是
map的变量名.map的key
格式。例如,"userMap.name": "jason"
[
{
"id": "route0",
"uri": "lb://discovery-guide-service-a",
"predicates": [
"Path=/discovery-guide-service-a/**,/x/**,/y/**"
],
"filters": [
"StripPrefix=1"
],
"userPredicates": [],
"userFilters": [
{
"name": "Authentication",
"args": {
"secretKey": "abc",
"whiteList.0": "* swagger-ui.html",
"whiteList.1": "* /swagger-resources/**",
"whiteList.2": "* /doc.html",
"userMap.name": "jason",
"userMap.age": "20",
"authInfoCarryStrategy": "AuthWriteToHeader"
}
}
]
}
]
在DiscoveryPlatform界面上,格式为
Authentication={"secretKey":"abc", "whiteList.0":"* swagger-ui.html", "whiteList.1":"* /swagger-resources/**", "whiteList.2":"* /doc.html", "userMap.name":"jason", "userMap.age":"20", "authInfoCarryStrategy":"AuthWriteToHeader"}
网关订阅配置中心的使用方式,如下
- Key为
- Nacos、Redis、Zookeeper配置中心,Group为{group},DataId为{网关serviceId}-dynamic-route
- Apollo、Consul、Etcd配置中心,Key的格式为{group}-{网关serviceId}-dynamic-route
- {group}为注册中心元数据group值
- Value参考Gateway网关动态路由配置
支持如下开关开启该动能,默认是关闭的
# 开启和关闭网关订阅配置中心的动态路由策略。缺失则默认为false
spring.application.strategy.gateway.dynamic.route.enabled=true
配置中心配置的网关动态路由推送到网关后,网关会自动根据已经存在的路由表进行判断后实施增删改操作,而不是全部清空后再全部插入,这样有助于提高性能和安全性。网关控制台上会打印出如下日志
--- Gateway Dynamic Routes Update Information ----
Total count=3
Added count=1
Modified count=1
Deleted count=1
--------------------------------------------------
2017-2050 ©Nepxion Studio Apache License
- 如何对接Foundation基础平台实施收敛集成
- 如何对接DevOps运维平台实施流量管控
- 如何部署对接DevOps运维平台的控制台
- 如何对接DevOps运维平台执行半自动化蓝绿灰度发布
- 如何使用DevOps运维平台对接的公共接口
- 如何设计全链路智能编排高级蓝绿灰度发布界面
- 如何实现Windows10下GraalVM本地镜像化
- 蓝绿灰度发布
- 流量染色
- 隔离路由
- 故障转移
- 多活单元化
- 限流熔断降级权限
- 网关动态路由
- 可观测监控
- 如何操作配置中心
- 如何理解框架开关配置
- 如何理解规则策略里内容格式配置
- 如何操作网关和服务的蓝绿灰度发布规则策略配置
- 如何操作网关动态路由规则策略配置
- 如何操作Sentinel规则策略配置
- 如何实施规则策略配置和业务配置在配置中心的合并和分离
- 如何理解自动扫描目录
- 如何自定义流量管控
- 如何自定义实现组合式的防护
- 如何自定义高级配置订阅功能
- 如何自定义订阅框架事件
- 如何自定义解决业务自身跨线程上下文切换的问题
- 如何自定义重用框架内置的Swagger模块
- 如何自定义Header全链路传递
- 如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
- 如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发