接到老大需求:需要对cookie进行操作,遂查询apisix的自带插件,发现有,但不满足,于是自己开发了一个插件并部署,把开发部署流程写在这里打个日志怕以后忘掉。
一、需求
插件很简单,就是在request和response中打上自己的标记
二、编写插件
插件怎么编写,规范是什么我就不一一赘述了,点击这里查看官方文档,已经很详细。
把我写的也粘一下把:
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)
endfunction _M.access(conf, ctx)-- 添加请求头core.request.set_header(ctx, "cookie-plugin", "success")
endfunction _M.header_filter(conf, ctx)-- 添加响应头core.response.set_header("cookie-plugin", "success")
endreturn _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里加插件名
plugins: - cookie-plugin
这里除了这个,还需要把config-default.yaml里的插件挪过来,不然之后就你这个插件能用,官方插件就用不了了,最终效果:
3.2、刷新插件
当然可以apisix stop之后再apisix start启动,但有更优雅的方式,不需要重启可以热加载插件:
curl --location --request PUT 'http://自己的IP:端口/apisix/admin/plugins/reload' \
--header 'X-API-KEY: 你自己的key'
这个时候apisix的插件已经可以用了,以刚才我们的插件为例,添加一个路由:
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}}
}'
请求:
curl -i http://127.0.0.1:9080/example
可以看到response中已有cookie-plugin: success,证明插件生效。
3.4、生成schema.json
这个schema.json是Dashboard提供可视化需要的文件,也就是现在说api已经可以使用了,但是如果你想在Dashboard配置是配置不了的,会报插件不存在,这时候是因为之前的schema.json对新插件没有描述,这个也不用自己写,查看官方文档
curl 127.0.0.1:9090/v1/schema > schema.json
3.5、替换schema.json
复制到Dashboard的config目录下替换就行,之后重启Dashboard服务就ok
好了这样一个apisix使用lua脚本自定义插件和部署就可以了