You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Docker部署的Kong中添加自定义JWT crafter插件?

如何为运行中的Kong容器添加JWT Crafter自定义插件

我之前也折腾过给Kong集成自定义插件,这个JWT Crafter插件我也用过,给你分享两种靠谱的实现方法,按需选择就行:

方法一:构建自定义Kong镜像(推荐生产环境使用)

这种方式最稳定,插件会被打包进镜像里,不用担心挂载路径或者环境变量的问题。

  1. 整理插件目录
    把你下载好的JWT Crafter插件放在本地的./kong-plugin-jwt-crafter目录下,确保目录结构是这样的:

    kong-plugin-jwt-crafter/
    ├── handler.lua
    ├── schema.lua
    └── (其他插件相关文件)
    
  2. 创建Dockerfile
    在插件目录同级位置新建一个Dockerfile,内容如下:

    FROM kong:latest
    
    # 把本地插件复制到Kong的Lua插件目录
    COPY ./kong-plugin-jwt-crafter /usr/local/share/lua/5.1/kong/plugins/jwt-crafter
    
    # 告诉Kong加载这个自定义插件(bundled是内置插件,加上我们的jwt-crafter)
    ENV KONG_PLUGINS=bundled,jwt-crafter
    # 确保Lua能找到插件的代码路径
    ENV KONG_LUA_PACKAGE_PATH="/usr/local/share/lua/5.1/?.lua;;"
    
  3. 构建并启动自定义镜像
    执行命令构建镜像:

    docker build -t kong-with-jwt-crafter .
    

    然后停止原来的Kong容器(如果正在运行),再用新镜像启动:

    # 停止旧容器(假设旧容器名叫kong)
    docker stop kong && docker rm kong
    
    # 启动带自定义插件的Kong容器
    docker run -d --name kong-custom -p 8000:8000 -p 8001:8001 kong-with-jwt-crafter
    

方法二:直接挂载插件目录(适合测试场景)

如果只是临时测试,不想构建镜像,可以直接把本地插件目录挂载到容器里:

# 停止旧容器(如果运行)
docker stop kong && docker rm kong

# 启动容器时挂载插件并设置环境变量
docker run -d --name kong -p 8000:8000 -p 8001:8001 \
  -v $(pwd)/kong-plugin-jwt-crafter:/usr/local/share/lua/5.1/kong/plugins/jwt-crafter \
  -e KONG_PLUGINS=bundled,jwt-crafter \
  -e KONG_LUA_PACKAGE_PATH="/usr/local/share/lua/5.1/?.lua;;" \
  kong:latest

验证插件是否加载成功

启动后,调用Kong的Admin API检查已启用的插件:

curl http://localhost:8001/plugins/enabled

如果返回的JSON里包含"jwt-crafter",就说明插件已经成功加载了!

一些注意事项

  • 确保插件的核心文件handler.luaschema.lua存在,目录结构必须对应kong/plugins/jwt-crafter,否则Kong找不到插件。
  • 如果你的Kong是集群部署,所有节点都要加载这个插件(要么都用自定义镜像,要么都挂载插件目录)。
  • 如果用Docker Compose,只需要在services.kong下添加对应的volumesenvironment配置即可,原理和上面一致。

内容的提问来源于stack exchange,提问作者Oussama Elkhdadi

火山引擎 最新活动