Kong 自定义插件安装和调试

文件格式

官方文档

├── kong-plugin-mepjwt-0.1.0-1.all.rock  # luarocks安装依赖 luarocks pack生成的文件
├── kong-plugin-mepjwt-0.1.0-1.rockspec  # luarocks的安装依赖
└── mepjwt
    ├── handler.lua  # 主要处理业务逻辑的文件
    ├── jwt_parser.lua  # 依赖文件  jwt解析脚本
    ├── schema.lua  # 给handle提供配置的文件
    ├── utils_mysql.lua  # 依赖文件 数据库处理脚本
    └── utils_redis.lua  # 依赖文件  redis处理脚本

rockspec文件

# kong-plugin-mepjwt-0.1.0-1.rockspec

local plugin_name = "mepjwt"  #  插件名称
local package_name = "kong-plugin-" .. plugin_name
local package_version = "0.1.0"
local rockspec_revision = "1"

local github_account_name = "Kong"
local github_repo_name = "kong-plugin"
local git_checkout = package_version == "dev" and "master" or package_version


package = package_name
version = package_version .. "-" .. rockspec_revision
supported_platforms = { "linux", "macosx" }


description = {
  summary = "Kong is a scalable and customizable API Management Layer built on top of Nginx.",
  homepage = "https://"..github_account_name..".github.io/"..github_repo_name,
  license = "Apache 2.0",
}


dependencies = {
}

# 主要是这里的 定义插件的路径和主要的两个文件路径 =号后面根据实际填写
build = {
  type = "builtin",
  modules = {
    -- TODO: add any additional code files added to the plugin
    ["kong.plugins."..plugin_name..".handler"] = "/etc/kong/plugins/"..plugin_name.."/handler.lua",
    ["kong.plugins."..plugin_name..".schema"] = "/etc/kong/plugins/"..plugin_name.."/schema.lua",
  }
}

安装插件

1、在本地安装(基于当前目录中的.rockspec)

 luarocks make

response

kong-plugin-mepjwt 0.1.0-1 is now installed in /usr/local (license: Apache 2.0)

2、打包已安装的文件

luarocks pack kong-plugin-mepjwt

response

Packed: /etc/kong/plugins/kong-plugin-mepjwt-0.1.0-1.all.rock

同时会生成kong-plugin-mepjwt-0.1.0-1.all.rock文件

3、安装插件

luarocks install kong-plugin-mepjwt-0.1.0-1.all.rock

response

kong-plugin-mepjwt 0.1.0-1 is now installed in /usr/local (license: Apache 2.0)

查看

luarocks list|grep jwt  

response

kong-plugin-jwt-signer
kong-plugin-mepjwt  # 已安装

DB-less模式插件加载

kong.conf文件中添加插件

plugins = mepjwt # 这里只使用了自定义的插件详细是用参考官网
log_level = debug

yaml文件配置

services:
  - name: service  # 服务名称
  url: xxxxx  # 这里填写backend服务地址
    tags:
      - service
    plugins:
      - name: jwt
        config:  # 这里需要同步配置一份
          mysql:
            host: xxx
            port: xxx
            database: xxx
            user: xxx
            password: xxx
          redis:
            host: xxxx
            port: xxxx
            password: xxxx
            charset: xxxx
            user_db: xxx
    routes:
      - name: ngrok-mep-server  # 路由名称
        paths:
          - /mep-service  # 路由后缀名称



consumers:
  - username: jwt-auth-user


plugins:
  - name: jwt
    config:  # schema中的配置
      mysql:
        host: xxx
        port: xxx
        database: xxx
        user: xxx
        password: xxx
      redis:
        host: xxxx
        port: xxxx
        password: xxxx
        charset: xxxx
        user_db: xxx

重启加载

kong restart --v

Kong 自定义插件安装和调试_第1张图片

在加载过程中难免会有错误,需要自己打日志排查

debug

luarocks remove kong-plugin-mepjwt && luarocks make && luarocks pack kong-plugin-mepjwt && luarocks install kong-plugin-mepjwt-0.1.0-1.all.rock

kong restart --v

校验

我的插件主要是解开token王header里面塞了三个参数,在调试过程中已经完成

image-20230714172830705

kong-plugin-mepjwt && luarocks install kong-plugin-mepjwt-0.1.0-1.all.rock

kong restart --v


# 校验

我的插件主要是解开token王header里面塞了三个参数,在调试过程中已经完成

[外链图片转存中...(img-CQqj9H2r-1689328795146)]

你可能感兴趣的:(Gateway,kong,gateway)