Kong 自定义 Plugin

Kong 是一个可扩展的微服务和 API 网关,它使用 Lua 语言编写,同时允许开发者通过 Lua 脚本(插件)来扩展其功能。要在 Kong 中使用 Lua 脚本,你需要编写一个插件。以下是编写和使用 Kong 插件的基本步骤:

  1. 创建插件目录: 首先,在你的工作目录中,创建一个新的目录来存放插件代码。这个目录的名称通常与插件名称相同。例如:
mkdir my-kong-plugin
cd my-kong-plugin
  1. 编写插件代码: 在插件目录中,创建一个名为handler.lua的文件。这个文件将包含插件的主要逻辑。打开文件并编写以下基本结构:
local MyKongPlugin = {
  PRIORITY = 1000, -- 插件优先级,数字越大,优先级越高
  VERSION = "0.1", -- 插件版本号
}

function MyKongPlugin:init_worker()
  -- 在 Kong 工作线程初始化时执行的代码
end

function MyKongPlugin:certificate(conf)
  -- 在 SSL/TLS 握手期间执行的代码
end

function MyKongPlugin:rewrite(conf)
  -- 在请求被代理之前,重写请求的代码
end

function MyKongPlugin:access(conf)
  -- 在代理请求到上游服务之前执行的代码
end

function MyKongPlugin:header_filter(conf)
  -- 在发送响应头部之前执行的代码
end

function MyKongPlugin:body_filter(conf)
  -- 在发送响应体之前执行的代码
end

function MyKongPlugin:log(conf)
  -- 在请求结束后执行的代码
end

return MyKongPlugin

在这个文件中,你可以根据需求实现自己的逻辑。

  1. 创建插件的 schema.lua: 创建一个名为schema.lua的文件。这个文件用于定义插件的配置选项及其数据类型。例如:
local typedefs = require "kong.db.schema.typedefs"

return {
  name = "my-kong-plugin",
  fields = {
    { consumer = typedefs.no_consumer }, -- 如果插件不能应用于特定的消费者,则使用此选项
    { config = {
        type = "record",
        fields = {
          { my_option = { type = "string", default = "default_value" } },
        },
      },
    },
  },
}
  1. 创建插件的 kong-plugin-my-plugin-VERSION.rockspec 文件: 在插件目录中创建一个名为 kong-plugin-my-plugin-0.1-1.rockspec 的文件,其中的 0.1-1 是插件的版本号。这个文件告诉 Kong 如何打包和安装插件。例如:
package = "kong-plugin-my-plugin"
version = "0.1-1"
source = {
  url = "git://github.com/yourusername/my-kong-plugin.git",
  tag = "0.1",
}
description = { 
    summary = "A simple Kong plugin example",
    detailed = "This is a simple example of a Kong plugin.", 
    homepage = "[https://github.com/yourusername/my-kong-plugin](https://github.com/yourusername/my-kong-plugin)", license = "MIT", 
}

dependencies = { "lua >= 5.1", "kong >= 2.0", }

build = { type = "builtin", modules = { \["kong.plugins.my-kong-plugin.handler"\] = "handler.lua", \["kong.plugins.my-kong-plugin.schema"\] = "schema.lua", }, install = { lua = { \["kong/plugins/my-kong-plugin/handler.lua"\] = "handler.lua", \["kong/plugins/my-kong-plugin/schema.lua"\] = "schema.lua", }, }, }
  1. 安装插件:
    在插件目录中运行以下命令,将插件安装到 Kong 的环境中:
luarocks make
  1. 配置 Kong:
    打开你的 Kong 配置文件(kong.conf),在 plugins 配置项中添加你的插件名,如下所示:
plugins = bundled,my-kong-plugin

这将启用你的插件。如果你希望禁用所有插件并仅启用你的插件,请使用以下配置:

plugins = my-kong-plugin
  1. 重启 Kong:
    重启 Kong 以使更改生效。你可以使用以下命令重启 Kong:
kong restart
  1. 配置插件:
    现在,你可以为特定的服务、路由或消费者配置插件。以下是一个使用 curl 命令为服务配置插件的示例:
curl -X POST [http://localhost:8001/services/{service-id}/plugins](http://localhost:8001/services/%7Bservice-id%7D/plugins)  
\--data "name=my-kong-plugin"  
\--data "config.my\_option=my\_value"

替换 {service-id} 为你要应用插件的服务的 ID。

现在你已经成功地使用 Lua 脚本编写了一个 Kong 插件并将其应用于服务。你可以根据需要修改 handler.lua 中的函数以实现自己的逻辑。

评论栏