在服务中增加网关插件

在不修改 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 目录下创建两个文件

测试 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 的日志

results matching ""

    No results matching ""