У меня есть собственный плагин для Kong, который отлично работал для Kong v0.14.1, но после обновления до v.1.0.2 он выдает ошибку.
Используемая ОС: macOS Mojave
В файле конг.конф у меня есть этот код:
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 is now installed in /usr/local/opt/kong (license: MIT)
Почему-то кажется, что Конг не может найти установленный пользовательский плагин. Любая идея, почему это происходит?
Похоже, он не может найти необходимый файл 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"
}
}
Теперь вы должны добавить имя пользовательского плагина в список custom_plugins в конфигурации Kong (на каждом узле Kong):
custom_plugins = <plugin-name>
Если вы используете два или более пользовательских плагина, вставьте запятые между ними, например:
custom_plugins = plugin1,plugin2
Примечание: Вы также можете установить это свойство через его эквивалент переменной среды: KONG_CUSTOM_PLUGINS
или определить пользовательский плагин в свойстве конфигурации, например:
KONG_CUSTOM_PLUGINS=<plugin-name> kong start
Напоминание: не забудьте обновить директиву custom_plugins для каждого узла в вашем кластере Kong.
Теперь вы сможете без проблем запустить Kong. Обратитесь к инструкциям вашего пользовательского плагина, чтобы узнать, как включить/настроить ваш плагин для API или потребительского объекта.
Чтобы убедиться, что ваш плагин загружается Kong, вы можете запустить Kong с уровнем журнала отладки:
log_level = debug
ИЛИ:
KONG_LOG_LEVEL=debug
Затем вы должны увидеть следующий журнал для каждого загружаемого плагина:
[debug] Loading plugin <plugin-name>
А здесь — это обходной путь для добавления вещей в custom_plugins и lua_package_path.
custom_plugins = <plugin-name>
Установите плагин hello-world, выполнив следующие действия:
Если у вас есть исходный код вашего плагина, то перейдите в него и выполните команду: luarocks make
он установит ваш плагин.
Теперь вам нужно выполнить команду: make install-dev
убедитесь, что ваш плагин имеет make-файл, например:
После выполнения этой команды make install-dev
. Он создаст файл lua примерно так:
/ваш-плагин-путь/**lua_modules/share/lua/5.1/конг/плагины/имя-вашего-плагина/**?.lua
Просто скопируйте этот путь и добавьте его в конфигурационный файл kong на lua_package_path
lua_package_path=/путь-вашего-плагина/lua_modules/share/lua/5.1/kong/plugins/имя-вашего-плагина/?.lua
Просто начните конг: kong start --vv
Лучший ответ на данный момент! Основываясь на этом ответе, я определил, где установлен плагин, в моем случае это было: «/usr/local/Cellar/kong/1.0.2/share/lua/5.1/kong/plugins/», и я установил lua_package_path=/usr/ местный/Подвал/конг/1.0.2/доля/lua/5.1/?.lua;; в моем файле kong.conf, и теперь плагин найден, хотя я не знаю, почему это не происходит автоматически, как в предыдущих версиях kong.
В ответе @ user5377037 содержится большинство важных деталей, я просто хотел упомянуть, что, начиная с Kong 0.14.x, «custom_plugins» теперь просто «плагины».
Одна из причин этого изменения заключается в том, что теперь вы можете использовать это новое имя переменной, чтобы выбирать, загружать или не загружать плагины, которые связаны с Kong — полезная функция для некоторых. Однако, если вы хотите загрузить свой пользовательский плагин И связанные с ним подключаемые модули, теперь вам нужно указать ключевое слово bundled
, чтобы указать, что вы хотите оставить загруженными связанные с ним подключаемые модули.
Практический эффект заключается в том, что в Kong < 0,14.x:
custom_plugins = plugin1,plugin2
Или
KONG_CUSTOM_PLUGINS=<plugin-name>
В 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
Это означает, что вы настроили свой прокси на использование какого-то плагина, но теперь вы не загружаете этот плагин при запуске, поэтому Конг не знает, что делать, и уходит. По сути, вы будете загружать только один пользовательский плагин, который, вероятно, не то, что вам нужно.
Примечания о lua_package_path
и KONG_LUA_PACKAGE_PATH
остаются такими же, как и в сообщении пользователя 5377037.
Да, handler.lua представлен в Rockspec, и он работал на предыдущей версии Kong. Ошибка возникает, когда я пытаюсь запустить конг, а не при установке плагина.