擴充套件apisix原始外掛
當apisix提供的外掛不能滿足我們要求時,我們可能需要將它的plugin進行個性化擴充套件,例如一個jwt認證外掛jwt-auth
,它本身具有驗證jwt有效性功能,支援rs256,hs256等常用簽名演算法,但在驗證之後,如果希望將jwt中的使用者資訊取出來,並放請求頭向上遊傳遞,目前這個外掛是不支援的,我們需要擴充套件一下它,下面看具體的步驟。
- 下載apisix原始碼,找個原來的外掛,在上面直接開發
- 找到_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)
- 將外掛內容修改後,放到我們自己擴充套件的目錄,檔名還是jwt-auth.lua
- 部署configmap,我們可以透過下面語句來實現由lua檔案到configMap的匯入
kubectl create configmap jwt-auth-app-header-config -n apisix --from-file=./jwt-auth-app-header.lua
- 在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"
- 升級你的apisix服務即可
helm -n apisix upgrade apisix -f ./apisix/values.override.yaml ./apisix
,之後重新訪問服務,請求頭就出現了sub
這些擴充套件欄位
一鍵更新擴充套件外掛包的方法
- 遍歷外掛目錄下所有lua檔案
- 生成configmap的名稱,以lua檔案主名-config為標準
- 使用
kubectl create | kubectl apply -f -
,存在就從檔案更新,不存在就從檔案建立configmap
具體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