当前位置:网站首页>Kong自定义插件初体验
Kong自定义插件初体验
2022-08-10 17:32:00 【EthanLeo】
此文章记录一下Kong自定义插件初次编写的过程,如果文章中有错误请及时提醒并帮忙更正
安装开发环境
这里使用Pongo 来进行插件的测试,而Pongo的使用需要具备docker-compose和curl,再这些都具备之后就可以安装Pongo CLI了
PATH=$PATH:~/.local/bin
git clone https://github.com/Kong/kong-pongo.git
mkdir -p ~/.local/bin
ln -s $(realpath kong-pongo/pongo.sh) ~/.local/bin/pongo
参考插件模版
kong-plugin 为我们提供了一个简单的插件模版,这个模版使用的是Lua语言进行的开发
git clone https://github.com/Kong/kong-plugin.git kong-api-version-plugin
打开这个项目

目录结构
kong/plugins 插件内容主要存放的目录,plugins下面的每个文件夹都表示一个功能插件 spec 测试文件存放的目录
这里我把原来的文件名以及插件名称修改成了api-version,再修改完成之后我们可以执行一下 pongo run
,此命令会将spec目录下的测试方法全部执行一遍,以保证我们的插件编写无误,同时pongo run
会将我们的插件进行加载。
在我们的测试通过之后,我们就可以先尝试对kong进行插件安装了,我们执行 pongo shell
进入到pongo的控制台,初始化kong的表,并且启动kong
kong migrations bootstrap --force
kong start
再启动完kong之后,我们进行验证 执行curl -i http://localhost:8000/
,如果你看到返回了一个错误,并且错误信息是{"message":"no Route matched with those values"}
,说明kong是正常启动的
测试插件
在进行插件测试之前,我们需要添加一个kong的服务,这里的话用kong`s Admin API 去进行操作
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://konghq.com'
在添加完service之后,我们需要添加一个route,这样kong就可以进行代理我们的请求
curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'hosts[]=example.com'
最后我们将插件添加进入Service
curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=api-version'
再以上操作都执行结束并且成功后,我们就可以对插件进行测试,执行 curl -I -H "Host:example.com http://localhost:8000/"
如果返回的结果的头信息中带有Bye-World
的key就说明一切顺利
编写自己的插件
上面的步骤都是介绍如何安装开发环境,以及体验kong模版,接下来我们尝试写一个最简单的插件(这里只是简单实验一下,毕竟没有深入研究实验) 在上面介绍kong的模版项目的时候有说到plugins文件夹,这里面存放的是插件开发的主要文件而每个插件文件夹中也有两个主要的文件:
*handler.lua * 这个文件里面编写了自定义插件主要的业务逻辑 schema.lua 这个文件根据官方的解释是说,存放一些额外的配置,比如用户可以提供key/value来改变行为,那么这些行为就存放在此,但是本人还没有进行深入了解,所以这个文件暂时就不太清楚是在那些情况下可以发挥作用
那么在简单了解了那些主要文件以及他们的作用之后,我们就可以开始自己的编码了,我这边写了一个比较简单的插件,主要的功能就是检查请求头中是否带有x-user-id这个key,如果没有就返回403,如果有那么就将这个k-v写入返回的头信息中,下面贴一下 handler.lua 的代码

其实我们自定义的方法都算是实现了kong内置的一些方法 具体的编写内容大家可以参考custom-logic
再写完自己的业务逻辑代码之后,还需要在spec文件夹下面创建两个测试代码文件,这里的话我是根据模版的测试代码进行修改的,具体的没有深入研究,编写两个测试方法,一个是带有x-user-id请求头的测试方法,一个是不带有的测试方法,具体代码如下

在完成pongo run
测试之后,我们可以重复 测试插件 的步骤进行我们自定义插件的测试
参考文章: How to Create a Custom Lua Plugin for Kong Gateway官方文档
边栏推荐
- Wuling Hongguang MINI EV, the only drawback is safety
- 文档标题能否支持公式
- 【严重】Nps 鉴权绕过 0day 漏洞
- 多线程与高并发(11)——经典面试题之实现一个容器,提供两个方法,add,size。
- Talking about Taishan crowdfunding system development technical description and dapp chain crowdfunding system development analysis
- R语言使用ggpubr包的ggbarplot函数可视化柱状图、设置add参数为mean_se和jitter可视化不同水平均值的柱状图并为柱状图添加误差线(se标准误差)和抖动数据点分布
- 教你自己搭建一个IP池(绝对超好用!!!!)
- 【接入指南 之 直接接入】手把手教你快速上手接入HONOR Connect平台(上)
- DASCTF2022.07赋能赛 WEB题目复现
- 讯飞翻译机抢镜背后,跨语种沟通迈入全新时代
猜你喜欢
「业务架构」业务能力的热图是什么,有啥用?
Live Review|How to build an enterprise-level cloud management platform in the multi-cloud era?(with the download of the construction guide)
烟雾、空气质量、温湿度…自己徒手做个环境检测设备
「Web应用架构」轮询,SSE 和WebSocket,如何选择合适的?
产品说明丨Android端使用MobPush快速集成方法
忍不住 - 发个新帖子【为什么把红圈的功能入口隐藏?需要移动到鼠标到位置驻停才显示?】- 请投票
Pytorch GPU模型推理时间探讨
[email protected] 7.6"/>
Oracle Install [email protected] 7.6
施工企业数字化转型解决方案设计思路
【独立站运营】做社交媒体营销的两大关键点
随机推荐
defi质押借贷理财挖矿dapp系统开发逻辑
FFmpeg花屏解决(修改源码,丢弃不完整帧)
CDH6.3.2之Kerberos安全认证_大数据培训
MogDB学习笔记-从2开始(MogHA)
「企业架构」企业架构师,解决方案架构师和软件架构师有何不同
痛苦的四大原因
leetcode:339 嵌套列表权重和
多线程与高并发(11)——经典面试题之实现一个容器,提供两个方法,add,size。
ROBOTSTXT_OBEY[通俗易懂]
Scala中使用 Jackson API 进行JSON序列化和反序列化
Moonbeam于Moonbase Alpha构建新式XCM对EVM跨链功能
WebRTC source code analysis nack detailed explanation
机器人控制器编程实践指导书旧版-实践三 直流电机(执行器)
网络可观测性:让您的网络监控更上一层楼|TechGenix
DASCTF2022.07 empowerment competition WEB topic recurrence
MySQL增加字段SQL语句
不止跑路,拯救误操作rm -rf /*的小伙儿
中国芯片的营收首破万亿,优势凸显的成熟工艺产能将称霸全球
leetcode:159.最多有两个不同字符的最长子串
机器人控制器编程实践指导书旧版-实践四 步进电机(执行器)