扩展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)
  1. 将插件内容修改后,放到我们自己扩展的目录,文件名还是jwt-auth.lua
  2. 部署configmap,我们可以通过下面语句来实现由lua文件到configMap的导入
kubectl create configmap jwt-auth-app-header-config -n apisix --from-file=./jwt-auth-app-header.lua
  1. 在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"
  1. 升级你的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

apisix~升级原始插件的方法的更多相关文章

  1. Eclipse 插件安装、升级和卸载的方法

    Eclipse 的插件可以装在内部,也可以装在外部,装在内部的方法很简单:把插件的features和plugins目录copy到eclipse的安装目录即可. eclipse和其插件升级比较频繁,用过 ...

  2. 转:myeclipse 8.x 插件安装方法终极总结

    原文地址:http://shaomeng95.iteye.com/blog/945062 最近因为要指导新人顺便整理文档,懒得折腾eclipse,需要装的插件太多,于是乎装myeclipse 8.5吧 ...

  3. iScroll.js插件使用方法

    iScroll.js 用法参考 (share) 分享是传播.学习知识最好的方法 以下这篇文章是iScroll.js官网的中文翻译,尽管自己英文不好,但觉得原作者们翻译的这个资料还是可以的,基本用法介绍 ...

  4. Apache DolphinScheduler 2.0.1 来了,备受期待的一键升级、插件化终于实现

    ✎ 编 者 按:好消息!Apache DolphinScheduler 2.0.1 版本正式发布! 本版本中,DolphinScheduler 经历了一场微内核+插件化的架构改进,70% 的代码被重构 ...

  5. sublime text3的一些插件安装方法和使用

    sublime text部分插件使用方法在线安装package Control的方法:    ctrl+~ 输入如下代码:        import urllib2,os; pf='Package ...

  6. 每次Xcode 升级之后 插件失效,两步解决

    以下内容来源:http://www.cocoachina.com/bbs/read.php?tid=296269 每次Xcode 升级之后 插件失效,两步解决 1.打开终端,输入以下代码获取到DVTP ...

  7. 安装Sublime Text 3插件的方法

    直接安装 安装Sublime text 3插件很方便,可以直接下载安装包解压缩到Packages目录(菜单->preferences->packages). 使用Package Contr ...

  8. eclipse svn插件安装方法

    eclipse svn插件安装方法 使用dropins安装插件 从Eclipse3.5开始,安装目录下就多了一个dropins目录.只要将插件解压后拖到该目录即可安装插件.比如安装svn插件subcl ...

  9. Emmet插件使用方法总结

    Emmet插件使用方法总结 在前端开发的过程中,一大部分的工作是写 HTML.CSS 代码.特别是手动编写 HTML 代码的时候,效率会特别低下,因为需要敲打很多尖括号,而且很多标签都需要闭合标签等. ...

  10. sublime text2 用ctags插件实现方法定位

    sublime text2 用ctags插件实现方法定位(转) 我们用sublime几乎都会首先安装这个插件,这个插件是管理插件的功能,先安装它,再安装其他插件就方便了. 点击sublime的菜单栏 ...

随机推荐

  1. Node 项目通过 .npmrc 文件指定依赖安装源

    背景 npm 命令运行时,往往通过命令行指定相关配置,最常用的便是使用 --registry 来指定依赖的安装源. npm install --registry=https://registry.np ...

  2. Go 语言中 For 循环:语法、使用方法和实例教程

    for循环用于多次执行特定的代码块,每次都可以使用不同的值.每次循环执行都称为一次迭代.for循环可以包含最多三个语句: 语法 for 语句1; 语句2; 语句3 { // 每次迭代要执行的代码 } ...

  3. Seaborn分布数据可视化---直方图/密度图

    直方图\密度图 直方图和密度图一般用于分布数据的可视化. distplot 用于绘制单变量的分布图,包括直方图和密度图. sns.distplot( a, bins=None, hist=True, ...

  4. MogDB企业应用 之 Rust驱动

    引子 Rust 是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言.Rust 在语法上和类似 C++,但是设计者想要在保证性能的同时提供更好的内存安全. ...

  5. MogDB-opengauss中的聚集与分组操作

    MogDB/opengauss 中的聚集与分组操作 COUNT:对结果集中的元组数量进行计数,如果是 COUNT(*),那么会统计所有元组(包括 NULL 值)的数量,如果是 COUNT(colnam ...

  6. 手工安装部署openGauss3.0一主一备(非om工具安装)

    手工安装部署 openGauss3.0 一主一备(非 om 工具安装) 本文出处:https://www.modb.pro/db/425385 一.操作系统配置(centos7.6) 1.关闭防火墙 ...

  7. opencv读取中文路径图片

    点击查看代码 img = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), cv2.IMREAD_GRAYSCALE)

  8. CentOS SSH安装和配置

    CentOS SSH安装和配置 赞 0 CentOS  SSH  安装  配置  OpenSSH SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Worki ...

  9. WEB 版的报表工具有没有意义?

    这个问题得从两个方面看. 如果这个 web 版的报表工具指的是现在的自助报表,也就是 BI.多维分析,那它是有意义的, 而且各厂商们都已经做的挺好,可以让业务人员通过简单的拖拽进行各种数据分析,生成自 ...

  10. c# 前台和后台线程

    前台和后台线程 Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程.这两者的区别就是:应用程序必须运行完所有的前台线程才可以退 ...