使用lua开发apisix自定义插件并发布

接到老大需求:需要对cookie进行操作,遂查询apisix的自带插件,发现有,但不满足,于是自己开发了一个插件并部署,把开发部署流程写在这里打个日志怕以后忘掉。

一、需求

插件很简单,就是在request和response中打上自己的标记

二、编写插件

插件怎么编写,规范是什么我就不一一赘述了,点击这里查看官方文档,已经很详细。

把我写的也粘一下把:

lua 复制代码
local core = require("apisix.core")
local plugin_name = "cookie-plugin"

local schema = {
    type = "object",
    properties = {},
}

local _M = {
    version = 0.1,
    priority = 0, -- 设置插件优先级
    name = plugin_name,
    schema = schema,
}

function _M.check_schema(conf)
    return core.schema.check(schema, conf)
end

function _M.access(conf, ctx)
    -- 添加请求头
    core.request.set_header(ctx, "cookie-plugin", "success")
end

function _M.header_filter(conf, ctx)
    -- 添加响应头
    core.response.set_header("cookie-plugin", "success")
end

return _M

三、部署插件

最坑的就是怎么部署,官方有文档但看的一头雾水,详细介绍部署:

先介绍两概念Admin和Dashboard,Admin提供了API能力,Dashboard提供了可视化能力

3.1、放置lua脚本至插件文件夹下

把lua脚本改为你写的plugin_name,例如我上边写的就是cookie-pluginlua,然后放到Admin服务的plugins文件夹底下,一般在/usr/local/apisix/apisix/plugins/,直接放底下就行,当然也可以自己写路径指定,但你的config.yaml得自己指定路径,开头官方文档有介绍。

3.2、修改config.yaml文件

在config.yaml的plugins里加插件名

yaml 复制代码
plugins:                         
  - cookie-plugin

这里除了这个,还需要把config-default.yaml里的插件挪过来,不然之后就你这个插件能用,官方插件就用不了了,最终效果:

3.2、刷新插件

当然可以apisix stop之后再apisix start启动,但有更优雅的方式,不需要重启可以热加载插件:

clike 复制代码
curl --location --request PUT 'http://自己的IP:端口/apisix/admin/plugins/reload' \
--header 'X-API-KEY: 你自己的key' 

这个时候apisix的插件已经可以用了,以刚才我们的插件为例,添加一个路由:

clike 复制代码
curl http://127.0.0.1:9180/apisix/admin/routes/1 -X PUT -d '
{
    "uri": "/example",
    "plugins": {
        "cookie-plugin": {}
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "httpbin.org:80": 1
        }
    }
}'

请求:

clike 复制代码
 curl -i http://127.0.0.1:9080/example 

可以看到response中已有cookie-plugin: success,证明插件生效。

3.4、生成schema.json

这个schema.json是Dashboard提供可视化需要的文件,也就是现在说api已经可以使用了,但是如果你想在Dashboard配置是配置不了的,会报插件不存在,这时候是因为之前的schema.json对新插件没有描述,这个也不用自己写,查看官方文档

clike 复制代码
curl 127.0.0.1:9090/v1/schema > schema.json

3.5、替换schema.json

复制到Dashboard的config目录下替换就行,之后重启Dashboard服务就ok

好了这样一个apisix使用lua脚本自定义插件和部署就可以了

相关推荐
YMWM_5 分钟前
第一章 Go语言简介
开发语言·后端·golang
只因在人海中多看了你一眼7 分钟前
python语言基础
开发语言·python
2401_858286118 分钟前
101.【C语言】数据结构之二叉树的堆实现(顺序结构) 下
c语言·开发语言·数据结构·算法·
y25089 分钟前
《Object类》
java·开发语言
小技与小术14 分钟前
数据结构之树与二叉树
开发语言·数据结构·python
hccee35 分钟前
C# IO文件操作
开发语言·c#
hummhumm40 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊1 小时前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
善良的修罗1 小时前
postman 最强内置函数使用集合
测试工具·lua·postman
zmd-zk1 小时前
flink学习(2)——wordcount案例
大数据·开发语言·学习·flink