Kong 自定义插件编写详解

手把手教你实现一个Kong网关插件 Kong Gateway 是一个轻量、快速、灵活的基于Nginx开发云原生 API 网关。在云原生领域,Kong Gateway 越来受欢迎。Kong提供了插件化能力,在对后台业务服务代码无侵入的条件下,可以在接入层方便地引入认证鉴权、安全防护、流量控制都能功能。这也是其受欢迎的原因之一。Kong Gateway 官方已经提供了一系列常用的插件,但是业务开发中有时需要定制自己的插件。本文将介绍如何编写 Kong 的自定义插件,以及如何将插件集成到 Kong 网关中。 阅读详情

个人博客:DoubleFJ の Blog

最近在研究 Kong,如果你跟我一样之前对 Kong 不了解可以看他们的官网,我就不在这多说废话了。

调研了几天,Kong 的功能蛮多的,对我们也有很大的帮助,引入也很有意义,能减少我们很多操作。Kong 也比较成熟,只是网上的资料都比较零散,很多也已经随着改版而变得过时。

官网的 quickstart 也算是详细了,跟着走一遍基本就能知道个大概,有哪些功能。

我想要尝试通过自定义编写插件来更好得对数据做一些处理,就各种找资料。终于经过一段时间的冲浪后,我开始掌握了一些门道。

首先,Apache 的 skywalking-kong 帮我理清了绝大部分道路,只是不知道是因为 Kong 版本的更迭还是因为我本地环境的原因,跟 README 上描述的步骤还是有一点点的差别:

  • luarocks install kong-skywalking --local 用 luarocks 安装 kong-plugin-skywalking,你也可以用 --tree 指定目录位置
  • 然后是 kong.conf,一般在 /etc/kong下,如果没有就 cp kong.conf.default kong.conf 然后对应配置加上,lua_package_path 注意一下写上你实际的位置,可能与 README 上的会有偏差,我的就是
  • 关键的还有一步没有写上,/usr/local/share/lua/5.1/kong/constants.lua 里记录了所有插件的名字,如果不加上的话你新加的插件也不会显示出来,需要特别注意。最后最好 kong restart

这一个走通后,就会对自定义的插件有个概念了。下面我们来自己手写一个试试,很简单的一个 Demo,主要是对 Response 的修改(只要走通了一个 其他的也就差不多了 看看官方 API)。

其实别看这里我只是轻描淡写,实际却是踩了很多坑,网上太多都是不负责任的文章,也不清楚是纯粹的 copy 还是因为版本更迭导致的失效。

我先说下网上找资料然后最终发现的几个问题:

  • local BasePlugin = require "kong.plugins.base_plugin" 这个 BasePlugin 在 2.7.x 已经废弃了,害得我还在那抓头,ChatGPT 资料库不够新,问了半天跟个傻子一样
  • kong.service.response 和kong.response ,网上找到的资料都是用 kong.service.response 来改变响应体的内容,也害得我只抓头,纳闷了怎么也不行,直到我在官网 kong.response 找到了这么一句 Unlike kong.service.response, this module allows mutating the response before sending it back to the client. 我丢

然后其他的就是 Lua 脚本的编写了。

  1. 先在之前 skywalking 同级新建一个 response-handler 目录(当然也可以在 Kong 自己的插件目录中添加自定义的插件)
  2. 再进入 response-handler 目录,新建两个 Lua 脚本,插件主要也就是这两个文件 handler.lua 和 schema.lua。至于你说这两个是什么作用,我只能说业务逻辑在 handler 中,所用到的一些可变参数在 schema 中,具体的可以自行去冲浪哈,在这我就不赘述了。下面是我写的 Demo 脚本内容:

官网资料:Plugin Configuration

handler.lua

local cjson = require("cjson")

local MyPluginHandler = {
	VERSION = "0.1.0", -- 版本
	PRIORITY = 10 -- 脚本执行优先值
}

function MyPluginHandler:header_filter(config)
  -- 修改响应头
  kong.response.set_header("Handle-Response-Header", "Response-Handler")
end

function MyPluginHandler:access(conf)
end

function MyPluginHandler:body_filter(config)
  -- 修改响应体
  local response_body = kong.response.get_raw_body()
  if response_body then
     local response_json = cjson.decode(response_body)
     response_json.data.num = config.num -- 我这里修改了 response.data.num 的值 (config.num 对应 schema.lua 中的 config.num)
     local modified_body = cjson.encode(response_json)
     kong.response.set_raw_body(modified_body)
  end
end

return MyPluginHandler

schema.lua

local typedefs = require "kong.db.schema.typedefs"

local PLUGIN_NAME = "myplugin"

local schema = {
  name = PLUGIN_NAME,
  fields = {
    { consumer = typedefs.no_consumer }, -- 该插件不能设置为 consumer
    { protocols = typedefs.protocols_http },
    { config = {
        type = "record",
        fields = { -- 可配置参数
          { num = {
              type = "integer",
              default = 10,
              required = false,
              gt = 0, }}, 
        },
        entity_checks = {
          -- 可以写一些校验 at_least_one_of distinct
        },
      },
    },
  },
}

return schema
  1. 脚本写好后在 kong.conf 中的 plugins = bundled, skywalking, response-handler 加上
  2. 在 /usr/local/share/lua/5.1/kong/constants.lua 中的 local plugins = {....} 加上新写的 response-handler
  3. kong restart

到这里,自定义的插件算是可以了。要还不行,那就可能是版本更迭了哈哈

关于gateway kong的自定义插件 GateWay Kong 简介 ​ Kong Gateway 是一个轻量级、快速、灵活的云原生 API 网关。Kong Gateway 是一个运行在 Nginx 中的 Lua 应用程序。 ​ Kong 提供了许多**插件**供在网关部署中使用。您还可以创建自己的自定义插件。 ​ 三个组件: Kong Server :基于nginx的服务器,用来接收API请求。 Cassandra/PostgreSQL :用来存储操作数据**(无DB模式/DB模式,无DB模式在使用上会有所限制)**。 Ko... 阅读详情

相关推荐

kong API Key 认证插件详解

基于提供开放 API 给开发者或第三方系统。简单的客户端认证,尤其在移动应用和 Web 应用中。管理和限制不同用户、客户端或服务的访问权限。配合流量控制插件(如 Rate Limiting)使用,避免过度请求。虽然 API 密钥认证简单易用,但它的安全性相对较低,尤其是在传输过程中密钥可能会被泄露。因此,常常配合HTTPS使用,以保证通信的安全。

zhangshenglu1的博客 1647

kong笔记——自定义插件开发

本文通过一个自定义插件的编写,来了解Kong的插件机制 插件功能: 原本返回百度首页,在添加插件之后,返回插件自定义的内容; 前提 使用kong代理百度的接口,配置route路径; 了解kong 插件的目录结构及部署(上一篇说到的) 实战 上一篇我们学到,一个插件必须包含两个文件: handler.lua schema.lua handler.lua主要负责业务逻辑功能编写,schema.lua主要负责插件参数定制,类似将handler.lua中写死的变量抽出来写到schema.lua中,变为动

罗伯特是疯子丶 5675

快速入门自定义Kong插件开发的简单模板

Kong是一个轻量级的开源API网关,最初是为了解决高流量API环境下的性能问题而设计。它构建在Nginx和LuaJIT之上,提供了高性能、易于扩展的特点,并且拥有插件系统,支持自定义插件开发来满足特定需求。Kong的主要优势在于其强大的插件架构,使得开发者能够在不修改服务代码的情况下轻松地添加新的功能,如认证、流量控制、日志记录、响应处理等。Kong的核心组件包括以下几个方面:API 网关: Kong的入口,用于接收所有的外部HTTP请求,并将请求路由到正确的上游服务。数据库。

weixin_35749786的博客 1130

kong自定义插件(修改官方插件)

kong的插件安装参考:https://blog.youkuaiyun.com/luanpeng825485697/article/details/85287291 kong官方插件的使用参考:https://blog.youkuaiyun.com/luanpeng825485697/article/details/85326831 自定义插件: 文件结构 Kong 插件的文件结构分基本插件模块和完整插件模块两种,基本插...

1万+

PX4/ArduPilot源码克隆提速秘籍:国内镜像与子模块优化全攻略

本文详细介绍了PX4/ArduPilot源码克隆的提速秘籍,包括使用国内镜像源和子模块优化技巧。通过阿木实验室、华为云等国内镜像,克隆速度可提升20倍,同时提供子模块替换和并行编译等实用方法,大幅提升开发效率。

weixin_29251567的博客 523

强化学习-马尔可夫模型

前文提到了强化学习源自马尔可夫决策过程,本文从马尔可夫概念入手,讲解和马尔可夫有关的模型和概念。在马尔科夫决策过程中,我们有一个智能体,它在一个马尔科夫过程中进行决策,每次决策都会导致状态的转移和获得即时奖励。智能体的目标是通过选择动作来最大化未来奖励的期望值。通常马尔科夫决策过程是个五元组:SAPRγSAPRγS 表示状态集合,代表智能体可能处于的所有状态。A 表示动作集合,代表智能体可以采取的所有动作。

君子之学必日新,日新者日进也。不日新者必日退,未有不进而不退者 8062

kong插件开发-完全版

Kong 插件开发 1. 简介 Kong是一个api网关,在客户端和服务间转发API进行通信,支持自定义插件来扩展功能。 Kong 是在Nginx基础上构建的,更确切地说,kong是在Nginx中运行的Lua应用程序,由 lua-nginx-module实现。 Kong和OpenResty一起发行的,其中已经包含了lua-nginx=module。其中OpenResty不是Nginx的分支,而是...

最爱下雨天 7138

【读代码】TradingAgents:基于多智能体LLM的金融交易框架深度解析

TradingAgents是由Tauric Research团队开源的创新型金融交易框架,其核心思想是通过多智能体协作系统模拟专业交易机构的决策流程。项目采用模块化设计,整合了LLM、实时数据分析、风险控制等组件,实现了从市场分析到交易执行的完整闭环。

kakaZhui的博客 2003

自定义kong插件golang版本

开发一个go版本的kong 插件,通常需要以下七步: 2、定义New()来实例化Config对象 3、定义access阶段对请求进行处理 4、将go-pdk/server包导入到项目中 5、创建一个main函数,使用server.startServer来启动 Add a main() function that calls server.StartServer(New, Version, Priority).上面的代码都是来源于kong的go-plugins中example代码,地址为https:/

zhangshenglu1的博客 2030

Flowable多数据源实战:从配置到指定Schema的避坑指南

本文详细介绍了Flowable多数据源配置的实战指南,包括基础配置、数据源Bean创建、指定Schema的进阶配置以及常见问题排查。通过具体代码示例和避坑建议,帮助开发者高效实现多租户系统中的工作流引擎集成,特别强调了schema设置和事务管理的注意事项。

weixin_30824599的博客 486

基于LSTM的多变量温度预测(python从入门到入坑)

基于LSTM的多变量温度预测(python) ——我保证他能够运行,而且结果能够让你满意(如果你和我一样都是一个新手的话) 这里写目录标题基于LSTM的多变量温度预测(python)——我保证他能够运行,而且结果能够让你满意(如果你和我一样都是一个新手的话)一、我为什么要写这些?二、具体做了什么?三、源代码切块加注释,恳请批评指正(●’◡’●)ノ 一、我为什么要写这些? 因为让人抓狂的课程大作业,我小组选择了一个多变量预测方面的课题,在我这个大三基本上还没接触过Python数据处理,甚至对神经网络什么的都

代码之狐的博客 1万+

手把手教你用PHP为Kong编写自定义插件:90%开发者忽略的核心技巧

掌握PHP在微服务架构中的API网关(Kong+PHP插件)开发精髓,手把手教你编写高效自定义插件。涵盖身份验证、流量控制等场景,利用Kong插件机制提升网关灵活性与扩展性,90%开发者忽略的关键技巧全解析,值得收藏。

LiteProceed的博客 765

[pytorch] MedicalNet 3D Resnet预训练模型迁移学习实战:从分割到分类的代码改造

本文详细介绍了如何利用PyTorch对MedicalNet 3D ResNet预训练模型进行迁移学习,从分割任务改造为分类任务。通过解析模型结构、调整分类头、加载预训练权重及优化训练策略,帮助开发者在医疗影像领域快速实现高效模型部署。文章还涵盖了数据预处理、增强技巧及模型轻量化等实用内容。

kmeans3miner的博客 246

Kong网关自定义插件开发

本文章旨在提供了一个简单的kong网关自定义插件开发的思路与步骤,并未涉及到更深层次的开发,如有需要,请参考kong网关插件开发官方文档。在进行开发之前,本文章默认读者是已经成功启动了本地kong网关服务并知道kong网关控制面板的基本操作。本文章的kong网关是在docker容器中运行的,版本为3.2.2.1。

LaurentNg的博客 1586

IEC61850规约客户端软件开发实战(第六章)

IEC 61850标准中的GOOSE(Generic Object Oriented Substation Event,面向通用对象的变电站事件)功能是变电站自动化系统的核心通信机制,主要用于实现智能电子设备(IED)间高可靠性、低延时的实时信号传输。本章简述其核心功能与技术特点。

半青年的博客 1778

YOLOv8【第十章:多任务扩展深度篇·第1节】YOLOv8-Seg 实例分割:Mask原型生成与系数预测原理解析!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1810

go语言编写自定义KONG网关插件以及如何安装和使用

go语言编写自定义KONG网关插件以及如何安装和使用

bocai_xiaodaidai的博客 1813

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Kong中实现已登录用户自动跳转到指定页面功能(自定义插件开发教程)

Kong API 网关通过强大的插件架构提供了高度的灵活性与扩展性。开发者可以使用内置的插件(如认证、限流等)或开发自定义插件满足特定需求。本文介绍了如何开发一个自定义插件,实现用户认证后自动跳转至指定页面的功能,并展示了如何在Kong中挂载和配置该插件。此外,通过Konga等可视化工具,Kong的插件管理变得更加便捷和高效。

楠搏万的博客 2290

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

kong笔记——自定义插件 目录及部署

简述 本文目标: 了解kong插件的基本信息 手动部署自定义插件 目录结构 基本插件模块 两个必须的文件: simple-plugin ├── handler.lua └── schema.lua 高级插件的模块: 除了handler.lua、schema.lua外,还包含: complete-plugin ├── api.lua ├── daos.lua ├── handler.lua ├── migrations │ ├── cassandra.lua │ └── postgres.lua

罗伯特是疯子丶 2918

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Kong系列-15-自定义插件for Kong Ingress Controller

下面演示如何在Kong for Kubernetes加载自定义插件。 先准备自定义插件的Lua代码。 mkdir myheader cd myheader vi handler.lua local MyHeader = {} MyHeader.PRIORITY = 1000 function MyHeader:header_filter(conf) -- do custom logic ...

twingao的专栏 2011

网关kong自定义的插件开发攻略

如果你是需要准备的

fj56355113的专栏 2580

深度解析Kong/docker-kong项目:如何通过Docker自定义Kong插件与配置模板

在现代微服务架构中,API网关扮演着至关重要的角色。Kong作为一款开源的API网关和微服务管理平台,因其高性能和可扩展性而广受欢迎。本文将深入探讨如何通过Docker方式自定义Kong镜像,特别是如何注入自定义插件和配置模板。 ## 基础概念 ### 什么是Kong插件? Kong插件是扩展Kong核心功能的模块,它们可以实现各种功能如认证、日志记录、流量控制等。Kong的插件系统基于Lu...

gitblog_00637的博客 752

Kong系列-14-自定义插件

Kong开源了大量的开源插件,当这些开源插件不能满足我们的需求,就需要修改这些开源插件或者自定义插件。Kong提供了方便地自定义插件机制,用户可以开发自己的定制插件。自定义插件可以和Kong进行深层次的集成,如使用数据库表结构,或者扩展Admin API。如果插件实现了所有可选模块,则其目录结构如下所示: complete-plugin ├── api.lua ├── daos.lua ├── h...

twingao的专栏 2425

kong插件开发-开发篇

开发自定义插件之前,需要了解下kong插件开发指南,详情点击官方指导文档 1 插件目录结构 所有的Kong插件都位于kong/plugins目录下, 如在plugins目录我们创建一个名为hello-world插件, 至少需要包含2个文件,如下所示: plugins ├── hello-world │ ├── handler.lua │ └── schema.lua # (必需...

最爱下雨天 2294

kong网关开发自己的插件

Kong官方文档: https://docs.konghq.com/0.14.x/plugin-development/ lua中文开发手册: https://www.runoob.com/manual/lua53doc/contents.html#contents 一.代码结构部分介绍 代码结构: . ├── kong │ └── plugins │ └─...

c-rain 2172

Kong插件模板:快速开发自定义插件的利器

Kong插件模板:快速开发自定义插件的利器 项目介绍 Kong插件模板是一个为开发者快速上手开发自定义Kong插件而设计的简单模板。无论你是Kong网关的新手还是经验丰富的开发者,这个模板都能帮助你快速搭建开发环境,并开始编写自己的插件。通过使用这个模板,你可以轻松地将自定义功能集成到Kong网关中,满足特定的业务需求。 项目技术分析 技术栈 Kong网关:作为插件的运行环境,Kong网关提供了...

gitblog_00847的博客 857
上一篇: 【转】Lua 在 Mac 上安装(实测好用)
下一篇: 【转】M1 芯片 Mac 运行 lvgl 仿真器编译无法找到 SDL.h 头文件问题
DoubleFJ
博客等级 码龄10年 26粉丝 80原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值