kong 网关 结合 nacos 动态路由,服务上下线,加载插件

本文介绍了如何利用Kong API结合Nacos实现动态路由控制、服务上下线和插件加载。通过配置Kong和Nacos,服务会根据配置自动查找和更新。核心流程包括启动时获取Nacos服务配置、验证配置、创建或更新Kong服务和路由。遇到的问题主要是删除路由操作未实现,需手动删除。此外,服务会监听Nacos配置变更,实时刷新路由。附有部分关键代码。
摘要由CSDN通过智能技术生成

先梳理逻辑

本文参考:https://my.oschina.net/xiejunbo/blog/4720458
kong api:https://docs.konghq.com/gateway-oss/2.3.x/admin-api/#retrieve-service

kong路由动态控制服务的说明

  • 调用kong原生api,进行upstream,target,service,route,plugins等创建,更新,及删除操作
  • 由于原生konga上大部分功能都包括,所以不做过多的功能嵌入,以防止配置的复杂性,只需做简单配置
  • 此服务皆在于实现服务动态路由,服务动态上下线,服务动态寻址,根据配置动态刷新服务信息等
逻辑说明
  • 配置说明
    cloudportal-kong-route.yaml中部分配置:
#网关配置存放地址 json
kong:
  route:
    config:
      data-id: kong-router \\路由服务配置id,json格式
      group: DEFAULT_GROUP \\默认的组
# forest 配置
forest:
  backend: okhttp3
#全局变量可以在任何模板表达式中进行数据绑定。
  variables:
    kongbaseUrl: http://10.200.69.37:8001 #kong api baseUrl

kong-router.json中部分配置:

  • 默认情况下 只需要配置name,paths或者hosts即可,服务会根据name去nacos中寻找对应的服务及配置,后续会有逻辑说明
//参数说明
name:nacos里的服务名称
paths:需要映射出去的服务路径
hosts:映射出去host列表(head中包含host属性会路由到此服务),与paths 二选一,建议使用path
plugins:需要为此路由加载的插件
strip_path:是否删除上游请求标头的前缀,默认true
url:默认为空,为空自动从nacos里面根据服务名获取服务进行路由,不为空时按url路由,默认为空就行,如果docker部署,请使用host模式,否则可能无法获取到真实ip导致路由失败
hostip:当获取的ip不对 但是又想使用nacos的服务自动获取功能,可以配置此项,配置后获取的ip失效,已此ip为准,会替换从nacos获取的ip
路由设置优先级:1.url 2.hostip+name 3.name
[{
	"name": "fanyi",
	"url": "https://fanyi.baidu.com",
	"hostip": null,
	"strip_path": true,
	"paths": [
		"/fanyi",
		"/aa"
	],
	"hosts": [],
	"plugins": []
},{
	"name": "cloudportal-workspace",
	"url": null,
	"hostip": "10.200.69.84",
	"strip_path": true,
	"paths": [
		"/cloudportal-workspace"
	],
	"hosts": [],
	"plugins": []
}]

如图中测试配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WOxUj6yo-1614759131675)(/uploads/5da43f5b11e0ceaa2bf14556f9a6a72e/image.png)]

核心流程说明:
  • 1.启动初始化,默认获取nacos服务配置,获取路由配置
  • 2.验证配置格式,验证配置必要参数
  • 3.根据配置中的name创建或更新kong service,当路由配置中的url存在时已url做service路由寻找地址,已url为准,此时不会从nacos获取配置及服务,根据name及paths及hosts创建路由,其中paths及hosts二者必选其一,两种方式可以共存
  • 4.当url为空时会从nacos中根据name获取服务,如果不为空,根据name创建upstream,根据upstream清除targets,根据nacos中服务的ip:port创建targets与upstream关联,此时有个逻辑,因为服务可能部署到容器中,获取到的是容器ip,路由配置中提供了忽略容器ip的配置,添加hos
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值