Kong v1.0.2 的自定义插件已启用但未安装

我有一个针对 Kong 的自定义插件,对于 Kong v0.14.1 可以正常工作,但是在我升级到 v1.0.2 之后出现了错误。

使用的操作系统是:macOS Mojave

kong.conf 文件中,我有这段代码:

log_level = debug
plugins=my-custom-plugin

我尝试使用以下命令启动 Kong:

kong start -c kong.conf

然后我得到了以下错误:

Error: /usr/local/share/lua/5.1/kong/cmd/start.lua:50: nginx: [error] init_by_lua

error: /usr/local/share/lua/5.1/kong/init.lua:344: my-custom-plugin plugin is enabled but not installed;

module 'kong.plugins.my-custom-plugin.handler' not found:No LuaRocks module found for kong.plugins.my-custom-plugin.handler

no field package.preload['kong.plugins.my-custom-plugin.handler']

no file './kong/plugins/kong-my-custom-plugin/handler.lua'...

我使用以下命令安装了该插件:

luarocks make

然后我得到了以下输出:

my-custom-plugin 1.0-1 已安装在 /usr/local/opt/kong (许可协议:MIT)

不知何故,Kong 似乎无法找到我安装的自定义插件。有任何想法吗?

点赞
用户1806998
用户1806998

似乎找不到所需的 handler.lua 文件。你能在插件项目的根目录下运行 $ tree . 吗?

以下是我以前做的一个测试插件的相同命令的结果(https://github.com/jerneyio/kong-plugin-header-echo):

$ tree .
.
├── README.md
├── kong
│   └── plugins
│       └── kong-plugin-header-echo
│           ├── handler.lua
│           └── schema.lua
├── kong-plugin-header-echo-0.1.0-1.all.rock
└── kong-plugin-header-echo-0.1.0-1.rockspec

此外,您确定您的 handler.lua 在您的 rockspec 中已公开吗?这里还有一个成功的示例:

$ cat kong-plugin-header-echo-0.1.0-1.rockspec
package = "kong-plugin-header-echo"
version = "0.1.0-1"
source = {
   url = "git//github.com/jerneyio/kong-plugin-header-echo.git"
}
description = {
   homepage = "https://github.com/jerneyio/kong-plugin-header-echo",
   license = "MIT"
}
dependencies = {
  "lua >= 5.3",
  "kong >= 0.14"
}
build = {
   type = "builtin",
   modules = {
      ["kong.plugins.kong-plugin-header-echo.handler"] = "kong/plugins/kong-plugin-header-echo/handler.lua",
      ["kong.plugins.kong-plugin-header-echo.schema"] = "kong/plugins/kong-plugin-header-echo/schema.lua"
   }
}
2019-01-24 16:01:27
用户1773603
用户1773603

加载插件

您现在必须将自定义插件的名称添加到 Kong 配置中的 custom_plugins 列表中(在每个 Kong 节点上):

custom_plugins = <plugin-name>

如果您使用了两个或更多自定义插件,请在它们之间插入逗号,如下所示:

custom_plugins = plugin1,plugin2

注意: 您也可以通过其环境变量等效设置此属性:KONG_CUSTOM_PLUGINS 或在配置属性中定义自定义插件,如下所示:

KONG_CUSTOM_PLUGINS=<plugin-name> kong start

提醒: 不要忘记为 Kong 集群中的每个节点更新 custom_plugins 指令。

验证加载插件

您现在应该能够无问题地启动 Kong。请查看自定义插件的说明,了解如何在 API 或 Consumer 对象上启用/配置插件。

为确保 Kong 正在加载您的插件,请使用调试日志级别启动 Kong:

log_level = debug

或者:

KONG_LOG_LEVEL=debug

然后,您应该会看到如下所示的日志,这是加载每个插件时的日志:

[debug] Loading plugin <plugin-name>

此处是向 custom_plugins 和 lua_package_path 中添加东西的解决步骤。

  1. custom_plugins = <plugin-name> 中添加自定义插件名称。

  2. 使用以下步骤安装 hello-world 插件:

    • 如果您有插件的源代码,则进入其中并执行以下命令:luarocks make,它将安装您的插件。

    • 现在,您必须执行一个命令:make install-dev 确保您的插件像下面的图片那样有 makefile: 进入图像说明

    • 一旦您执行此命令 make install-dev。它将在类似于以下路径的位置创建 lua 文件:

      /your-plugin-path/**lua_modules/share/lua/5.1/kong/plugins/your-plugin-name/**?.lua

    • 只需复制此路径并将其添加到 kong 配置文件中的 lua_package_path

      lua_package_path=/your-plugin-path/lua_modules/share/lua/5.1/kong/plugins/your-plugin-name/?.lua

  3. 只需启动 kong:kong start --vv

2019-01-25 10:50:13
用户4103586
用户4103586

@user5377037的答案已经包含了大部分相关的细节,我只想提一下自Kong 0.14.x起,“custom_plugins”现在只是“plugins”。

这个变化的原因之一是你现在可以使用这个新的变量名来选择是否加载Kong捆绑的插件,这对于一些人是一个有用的功能。然而,如果你想同时加载自定义插件和捆绑插件,现在你必须指定“bundled”关键词以表示你想要保持捆绑插件的加载。

0.14.x以前

在Kong <0.14.x中,其实际效果是:

custom_plugins = plugin1,plugin2

KONG_CUSTOM_PLUGINS=<plugin-name>

0.14.x以后

在Kong> = 0.14.x中,你现在需要写:

plugins = bundled,plugin1,plugin2

KONG_PLUGINS=bundled,<plugin-name>

如果你不使用“bundled”

如果你不添加“bundled”关键词,你可能会遇到以下错误:

nginx: [error] init_by_lua error: /usr/local/share/lua/5.1/kong/init.lua:292: key-auth plugin is in use but not enabled
stack traceback:
    [C]: in function 'assert'
    /usr/local/share/lua/5.1/kong/init.lua:292: in function 'init'
    init_by_lua:3: in main chunk

这意味着你已经设置了代理使用某个插件,但现在你没有在启动时加载该插件,因此Kong不知道该怎么做而退出。实际上,你只会加载一个自定义插件,这可能不是你想要的。

lua_package_path

关于“lua_package_path”和“KONG_LUA_PACKAGE_PATH”的注释与user5377037的帖子相同。

参考

2019-01-28 21:57:14