当前位置:网站首页>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官方文档
边栏推荐
猜你喜欢
「Web应用架构」轮询,SSE 和WebSocket,如何选择合适的?
产品-Axure9英文版,A页面内a1状态跳转B页面的b2状态,(条件跳转状态)
【独立站运营】做社交媒体营销的两大关键点
requires ‘angle‘ attribute to be a multiple of 45
「企业架构」企业架构师,解决方案架构师和软件架构师有何不同
Making Pre-trained Language Models Better Few-Shot Learners
多线程与高并发(11)——经典面试题之实现一个容器,提供两个方法,add,size。
WebRTC源码分析 nack详解
Trie字典树
【严重】Nps 鉴权绕过 0day 漏洞
随机推荐
【接入指南 之 直接接入】手把手教你快速上手接入HONOR Connect平台(中)
自动化测试 RobotFramework安装以及使用教程
pip install fatal error C1083 cannot open include file "io.h" No such file or directory
6月各手机银行活跃用户较快增长,创半年新高
excel-方方格子插件-正则表达式,快速清洗数据的方法
产品-Axure9英文版,A页面内a1状态跳转B页面的b2状态,(条件跳转状态)
轮询以及webSocket与socket.io原理
Talk about cloud native data platform
在 Istio 服务网格内连接外部 MySQL 数据库
unity 坑坑001
【图像去雾】基于颜色衰减先验的图像去雾附matlab代码
教你自己搭建一个IP池(绝对超好用!!!!)
直播回顾|多云时代,如何建设企业级云管理平台?(附建设指南下载)
最新手机号码的正则
AVFrame related api memory management
leetcode:337. 打家劫舍 III
施工企业数字化转型解决方案设计思路
函数柯里化(curry)
JNDI and RMI, LDAP
Wuling Hongguang MINI EV, the only drawback is safety