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

Posted

技术标签:

【中文标题】Kong v1.0.2 的自定义插件已启用但未安装【英文标题】:Custom plugin for Kong v1.0.2 is enabled but not installed 【发布时间】:2019-06-15 22:30:29 【问题描述】:

我有一个用于 Kong 的自定义插件,它在 Kong v0.14.1 上运行良好,但在升级到 v.1.0.2 后它会抛出错误。

使用的操作系统:macOS Mojave

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

log_level = debug
plugins=my-custom-plugin

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

kong start -c kong.conf

我得到这个错误:

错误:/usr/local/share/lua/5.1/kong/cmd/start.lua:50: nginx: [错误] init_by_lua 错误:/usr/local/share/lua/5.1/kong/init.lua:344: my-custom-plugin 插件已启用但未安装; 未找到模块“kong.plugins.my-custom-plugin.handler”:未找到 kong.plugins.my-custom-plugin.handler 的 LuaRocks 模块 没有字段 package.preload['kong.plugins.my-custom-plugin.handler'] 没有文件'./kong/plugins/kong-my-custom-plugin/handler.lua'...

我使用这个命令安装了插件:

luarocks make

它给出了以下输出:

my-custom-plugin 1.0-1 is now installed in /usr/local/opt/kong (license: MIT)

不知何故,Kong 似乎无法找到我安装的自定义插件。知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

@user5377037 的回答包含了大部分相关细节,我只想提一下,从 Kong 0.14.x 开始,“custom_plugins”现在只是“插件”。

此更改的原因之一是您现在可以使用这个新变量名称来选择加载或不加载与 Kong 捆绑在一起的插件——这对某些人来说是一个有用的功能。但是,如果您想加载自定义插件和捆绑插件,您现在必须指定 bundled 关键字以指示您要保持加载捆绑插件。

0.14.x 之前

实际效果是在Kong

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_pathKONG_LUA_PACKAGE_PATH 的注释与user5377037 的帖子保持一致。

参考文献

Upgrade Documentation Configuration Reference

【讨论】:

【参考方案2】:

Load the plugin

您现在必须将自定义插件的名称添加到 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 指令。

Verify loading the plugin

您现在应该可以毫无问题地启动 Kong。有关如何在 API 或 Consumer 对象上启用/配置插件的信息,请参阅自定义插件的说明。

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

log_level = debug

或:

KONG_LOG_LEVEL=debug

然后,您应该会看到正在加载的每个插件的以下日志:

[debug] Loading plugin <plugin-name>

here 是在 custom_pluginslua_package_path 中添加内容的解决方法。

    添加自定义插件名称:custom_plugins = &lt;plugin-name&gt;

    使用以下步骤安装 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

    只要复制这个路径,添加到lua_package_path的kong配置文件中

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

    刚开始 kong : kong start --vv

【讨论】:

迄今为止最好的答案!根据这个答案,我确定了插件的安装位置,在我的例子中是:“/usr/local/Cellar/kong/1.0.2/share/lua/5.1/kong/plugins/”并且我设置了 lua_package_path=/usr/本地/酒窖/kong/1.0.2/share/lua/5.1/?.lua;;在我的 kong.conf 文件中,现在找到了插件,虽然我不知道为什么这不会像以前版本的 kong 那样自动发生。【参考方案3】:

它似乎找不到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"
   

【讨论】:

是的,handler.lua 暴露在 rockspec 中,它适用于以前版本的 kong。当我尝试启动kong而不是在安装插件时抛出错误。

以上是关于Kong v1.0.2 的自定义插件已启用但未安装的主要内容,如果未能解决你的问题,请参考以下文章

Kong(V1.0.2) Clustering Reference

Kong API 网关中的自定义身份验证服务

UIStoryboard 中的自定义原型单元已创建,但未显示在 UITableView

Ubuntu 20.04、PHP 7.4:mbstring 已安装但未启用

如何在本地安装 Kong 中安装自定义插件

无法在 Kong 中启用会话插件(即使升级到最新版本)