apisix~升级原始插件的方法

扩展apisix原始插件

当apisix提供的插件不能满足我们要求时,我们可能需要将它的plugin进行个性化扩展,例如一个jwt认证插件jwt-auth,它本身具有验证jwt有效性功能,支持rs256,hs256等常用签名算法,但在验证之后,如果希望将jwt中的用户信息取出来,并放请求头向上游传递,目前这个插件是不支持的,我们需要扩展一下它,下面看具体的步骤。

  1. 下载apisix源代码,找个原来的插件,在上面直接开发

  2. 找到_M.rewirte方法,在解析jwt之后,添加向下一请求头写入的代码

    core.request.add_header(ctx,"sub", jwt_obj.payload.sub)
    core.request.add_header(ctx,"preferred_username", jwt_obj.payload.preferred_username)

  3. 将插件内容修改后,放到我们自己扩展的目录,文件名还是jwt-auth.lua

  4. 部署configmap,我们可以通过下面语句来实现由lua文件到configMap的导入

    kubectl create configmap jwt-auth-app-header-config -n apisix --from-file=./jwt-auth-app-header.lua

  5. 在values.override.yaml文件中,添加jwt-auth的部署如下

    apisix:
    customPlugins:
    enabled: true
    luaPath: "/opt/?.lua"
    plugins:
    - name: "jwt-auth"
    configMap:
    name: "jwt-auth-config"
    mounts:
    - key: "jwt-auth.lua"
    path: "/opt/apisix/plugins/jwt-auth.lua"

  6. 升级你的apisix服务即可helm -n apisix upgrade apisix -f ./apisix/values.override.yaml ./apisix,之后重新访问服务,请求头就出现了sub这些扩展字段

一键更新扩展插件包的方法

  • 遍历插件目录下所有lua文件
  • 生成configmap的名称,以lua文件主名-config为标准
  • 使用kubectl create | kubectl apply -f -,存在就从文件更新,不存在就从文件建立configmap

具体sh脚本代码

sh 复制代码
#!/bin/sh
# 不存大就建立,存在就更新
for file in "$(pwd)"/*.lua
do
    if [ -f "$file" ]; then
        echo "通过lua脚本更新configmap配置:$file"
        configName=$(basename "$file" .lua)
        kubectl create configmap "$configName"-config -n apisix --from-file="$file" --dry-run=true -o yaml |  kubectl apply -f -
    fi
done