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

时间:2019-01-22 12:40:24

标签: lua kong luarocks

我有一个针对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找不到我安装的自定义插件。知道为什么会这样吗?

3 个答案:

答案 0 :(得分:4)

@ user5377037的答案包含大部分相关细节,我只想提及从Kong 0.14.x开始,“ custom_plugins”现在只是“ plugins”。

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

Pre 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_pathKONG_LUA_PACKAGE_PATH的注释与user5377037的帖子中的注释相同。

参考文献

答案 1 :(得分:2)

Load the plugin

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

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_plugins lua_package_path 中添加内容。

  1. 在以下位置添加自定义插件名称:custom_plugins = <plugin-name>
  2. 使用以下步骤安装hello-world插件:

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

    • 现在,您必须执行命令:make install-dev确保您的插件具有如下的makefile: enter image description here

    • 一旦执行此命令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 = /您的插件路径/lua_modules/share/lua/5.1/kong/plugins/您的插件名称/ ?. lua

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

答案 2 :(得分:0)

似乎找不到必需的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"
   }
}