Настраиваемая конфигурация плагина в kong в docker с использованием декларативной конфигурации

#docker #docker-compose #kong

#docker #docker-compose #kong

Вопрос:

Я использую kong в docker в декларативном режиме.

Я хочу попробовать плагин kong-jwt2header отсюда: https://docs.konghq.com/hub/yesinteractive/kong-jwt2header /

Я настроил его, как описано в kong.yml:

 plugins:
- name: kong-jwt2header
  config: 
    strip_claims: false
    token_required: true
  

Я связал папку плагина с контейнером docker:

 version: '3'
services:

  kong:
    container_name: kong
    image: kong:2.1.3-centos
    environment:
      - KONG_DATABASE=off
      - KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml
      - KONG_PROXY_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ACCESS_LOG=/dev/stdout
      - KONG_PROXY_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_ERROR_LOG=/dev/stderr
      - KONG_CUSTOM_PLUGINS=kong-jwt2header
      - KONG_ADMIN_LISTEN=0.0.0.0:7001, 0.0.0.0:7444 ssl
      - KONG_LOG_LEVEL=${KONG_LOG_LEVEL:-info}
    volumes:
      - ./kong.yml:/usr/local/kong/declarative/kong.yml
      - ./plugins:/usr/local/kong/plugins
    ports:
      - 7000:8000
      - 7001:7001
      - 7443:8443
      - 7444:7444
  

При запуске я получаю исключение, что плагин должен быть включен.

 2020/10/01 11:45:08 [error] 1#0: init_by_lua error: /usr/local/share/lua/5.1/kong/init.lua:491: error parsing declarative config file /usr/local/kong/declarative/kong.yml:
in 'services':
  - in entry 2 of 'services':
    in 'plugins':
      - in entry 1 of 'plugins':
        in 'name': plugin 'kong-jwt2header' not enabled; add it to the 'plugins' configuration property
stack traceback:
        [C]: in function 'error'
        /usr/local/share/lua/5.1/kong/init.lua:491: in function 'init'
        init_by_lua:3: in main chunk
nginx: [error] init_by_lua error: /usr/local/share/lua/5.1/kong/init.lua:491: error parsing declarative config file /usr/local/kong/declarative/kong.yml:
in 'services':
  - in entry 2 of 'services':
    in 'plugins':
      - in entry 1 of 'plugins':
        in 'name': plugin 'kong-jwt2header' not enabled; add it to the 'plugins' configuration property
stack traceback:
        [C]: in function 'error'
        /usr/local/share/lua/5.1/kong/init.lua:491: in function 'init'
        init_by_lua:3: in main chunk
  

При поиске в Интернете я нашел это:
https://github.com/Kong/docker-kong/issues/227

Они пишут, что я должен добавить его в //plugins// переменную в файле kong.conf, как описано в руководстве по разработке плагинов. (https://docs.konghq.com/1.1.x/plugin-development/distribution/#load-the-plugin )

Я попытался установить его в docker-compose с помощью

      - KONG_CUSTOM_PLUGINS=kong-jwt2header
  

безуспешно.

Я установил в docker_compose.yml переменную среды

      - KONG_PLUGINS=bundled,kong-jwt2header
  

теперь я получаю новое исключение, в котором говорится, что плагин kong-jwt2header включен, но не установлен.

Я нашел kong.conf.defaults внутри контейнера в /etc/kong/ и скопировал его снаружи и добавил плагины свойств, как описано в руководстве docker, и выполнил монтирование в контейнер.

Теперь я получаю это исключение:

 2020/10/01 12:33:09 [error] 1#0: init_by_lua error: /usr/local/share/lua/5.1/kong/init.lua:484: error loading plugin schemas: on plugin 'kong-jwt2header': kong-jwt2header plugin is enabled but not installed;
module 'kong.plugins.kong-jwt2header.handler' not found:No LuaRocks module found for kong.plugins.kong-jwt2header.handler
        no field package.preload['kong.plugins.kong-jwt2header.handler']
  

Теперь у меня больше нет идей. (за исключением того, чтобы попробовать это без docker и без декларативного подхода)

Как добавить пользовательский плагин в kong внутри контейнера docker с использованием декларативной конфигурации?

Ответ №1:

Вам необходимо установить плагины с luarocks внутри контейнера.

 USER root
RUN apk update amp;amp; apk add git unzip luarocks
RUN luarocks install kong-oidc  
USER kong
  

Этот пример работает, если вы используете kong-latest на основе Alpine.