使用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脚本自定义插件和部署就可以了

相关推荐
Re.不晚5 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会7 分钟前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香10 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
ULTRA??14 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
远望清一色30 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself40 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家1 小时前
go语言中package详解
开发语言·golang·xcode