一、 使用管理 API 添加服务
1.注册services
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://mockbin.org'
查看service注册情况
curl http://localhost:8001/services | jq
删除指定service:
curl -i -X DELETE http://localhost:8001/services/bhc-mainnet-api
2. 为服务添加路由
官方接口文档
#执行命令(name用于标识routes名称,url地址中需要填写services名称,host为允许用户访问的域名,其余用法参考接口文档)
curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'hosts[]=example.com'
查询routes注册情况:
curl http://localhost:8001/routes | jq
删除指定route:
curl -i -X DELETE http://localhost:8001/routes/example-service
3. 添加插件
官方接口文档
#执行命令(name用于指定使用的插件名称,url地址中需要填写services名称,请求体中config.xxxx开头的为插件参数,其余用法参考接口文档)
curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=key-auth'
查询plugin注册情况:
curl http://localhost:8001/plugins | jq
删除指定plugin:
curl -i -X DELETE http://localhost:8001/plugins/example-service
二、插件开发
1.开发规范
官方参考文档
插件约束
①位置约束
插件的位置必须在kong/plugins目录下,插件名为该目录下的文件名。
如存在目录:kong/plugins/hello-world/…,则当前插件名为hello-world。每个插件目录之间相互独立
②模块约束
在每个插件目录下,kong默认提供了不同模块文件,以扩展不同的功能。
所有的Kong插件都位于kong/plugins目录下, 如在plugins目录我们创建一个名为hello-world插件, 至少需要包含2个文件,如下所示:
plugins
├── hello-world
│ ├── handler.lua
│ └── schema.lua
└── other-plugin
handler.lua:核心接口 ,可拓展每个请求的生命周期
schema.lua:配置参数定义,定义校验规则以便用户只能输入有效的配置值
完全版目录结构
hello-world
├── api.lua
├── daos.lua
├── handler.lua
├── migrations
│ ├── cassandra.lua
│ └── postgres.lua
└── schema.lua
api.lua:非必须,扩展Admin API,在需要对外暴露接口时候
daos.lua:非必须,数据访问层,对插件自定义实体的抽象,并存储在数据存储区中
migrations/*.lua:非必须, 数据库迁移(例如,创建表),仅当插件应用daos.lua进行存储时才需要进行迁移
2.手动插件开发
2.1参考链接
参考链接:
https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/11/09/kong-features-07-write-plugins.html
https://zhuanlan.zhihu.com/p/52402537
https://blog.csdn.net/whos2016/article/details/103034883
2.2.对插件进行手动化的部署
a.将编写好的插件存储在自定义的位置 注意:所有的Kong插件都位于kong/plugins目录下
b.在kong.conf中指定lua扫描的路径
如果你配置了多个插件,这些插件又放置在多个路径上:
lua_package_path = /<path-to-plugin-location>/kong/plugins;/<path-to-plugin-location2>/kong/plugins/?.lua;;
c.在kong.conf中加载插件
如果你不需要kong自带的插件,可以取消掉 bundled
plugins = bundled,<plugin-name>
注意:在编写yaml文件时,要记得挂载自定义插件
最后效果如下: