在服务中增加网关插件
在不修改 Kong 镜像的情况下,在服务中增加 Kong 的插件
Kong 中的支持
Kong 在启动前,会到 $JUSTEPHOME/conf/env.sh 中查找 **COMP._KONG_PLUGIN_NAME* 的环境变量,从而得到服务中有哪些插件。对每个插件,平台会扫描插件目录下的文件,执行一些操作。
在一个 Kong 插件的目录中,有如下的目录:
- deploy
- 在 XML 定义文件中,至少有一个名称为 kong_plugin_name 的属性,它的值是插件名称
- kong/plugins/xxx
- xxx 是插件的名称
- 一般情况下,这个目录下至少有 handler.lua、chema.lua 两个文件
- lualib
- 此目录下的内容是插件的依赖库,依赖库的安装有两种方式,一是通过此目录下的 install.sh 安装,二是直接将依赖库拷贝到此目录下
- install.sh
- Kong 启动前会执行此脚本,脚本中可以用 luarocks 命令安装依赖库
- xxx.lua
- 此目录下的 lua 文件会直接链接到 /usr/local/share/lua/5.1/resty/ 目录中
ln -s /usr/local/x5/model/service/comp/${pluginName}/lualib/* /usr/local/share/lua/5.1/resty/
Kong 插件在平台中的制作过程
现在平台还未提供工具,只能手工创建
- 确定插件名称:my-kong-plugin
- 打开“代码”,在 service/comp/ 下创建目录 my-kong-plugin
- 在 my-kong-plugin 目录下创建两个空文件
- .comp.save
- deploy.m
- 在 my-kong-plugin 目录下创建 deploy 目录
- 在 deploy 目录下创建
- dev.def.xml
- production.def.xml
- 两个文件内容相同,指定插件的名称,如下:
<service>
<properties>
<property name="kong_plugin_name" value="my-kong-plugin" readonly="true">
<label label = "插件名称"/>
</property>
</properties>
</service>
- 在 my-kong-plugin 目录下创建 kong/plugins/my-kong-plugin 目录
- 在 my-kong-plugin 目录下创建两个文件
- handler.lua
- schema.lua
- 文件内容见示例代码
- 在 my-kong-plugin 目录下创建两个文件
测试 Kong 插件
- 在 main 模块下加一个服务接口
- 修改 main 下的 app.m,给接口加上 my-kong-plugin 插件
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<name>main</name>
<request_path>/main</request_path>
<preserve_host>true</preserve_host>
<strip_request_path>true</strip_request_path>
<upstream_url>http://{{.Env.MAIN_SERVICEADDRESS}}:{{.Env.MAIN_PORT}}/main
</upstream_url>
<plugin name="my-kong-plugin" />
</service>
- 保存后重启 IDE
- 启动后访问 main 下的那个接口
- 到容器中看 gateway 的日志