Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 自定义插件
除了可以通过kong插件使用纯lua语言开发自定义插件之外,还可以使用LuaJIT 中的 FFI(外部函数调用接口)扩展库,高效简洁的调用外部动态链接库中的C语言函数。kong 插件允许在 连接,请求,响应或者tcp流生命周期中的入口点注入自定义逻辑,为此必须实现基本插件拦截接口中的一个或者多个方法,这些方法在名为 handler的。除此之外,我们还需要将插件的名称添加到配置文件。PDK(插件开发
·
- 11.1 简介
- kong 的自定义插件由一组Lua模块文件组成,其中每个文件均可以被视为一个独立的模块,实现独立的功能。插件的模块文件名遵循下面的约定:
- kong.plugins.<plugin_name>.<module_name>
-
- 其中 plugin_name 是自定义插件的名称,module_name 是模块文件的名称。
-
- 在kong内部,我们使用 lua_package_path 所设置的路径来搜索和加载所需的模块文件。除此之外,我们还需要将插件的名称添加到配置文件
- /etc/kong/kong.conf 的 plugins 属性中,该属性是一个以 英文逗号分割的列表。如下的配置表示在启动时除了用 bundled 关键字加载内置
- 插件集合,还加载自定义的配置:
- plugins = bundled,my-custom-plugin
-
- 11.1.1 基本插件
- 一个最基本的自定义插件由如下2个Lua模块文件组成:
- my-custom-plugin:
- 1.handler.lua
- 插件处理文件。它是基本插件的核心,其中的拦截接口需遵循kong的接口规范。需要在客户端请求生命周期中实现这些接口。
-
- 2.schema.lua
- 插件配置文件。它用于定义插件运行时所需要的配置信息,配置信息涉及的类型主要有 number,string,boolean,array,table和record等。
- 在schema.lua 配置文件中可以定义配置信息的默认值和有效合法的校验规则。schema.lua 配置文件结构灵活,可以根据需求涉及和定义各种数据结构。
- konga 将根据实际的配置信息类型自动渲染界面,如常见的文本框,数据选择器,开关选项,下拉菜单和分组等。
-
- 11.1.2 高级插件
-
- 11.2 原理
- kong 插件允许在 连接,请求,响应或者tcp流生命周期中的入口点注入自定义逻辑,为此必须实现基本插件拦截接口中的一个或者多个方法,这些方法在名为 handler的
- 模块文件中实现,该模块文件的名称结构如下:
- kong.plugins.<plugin_name>.handler
-
- 基本插件的拦截主要分为两种 --- http 拦截和 tcp 拦截,这本质上是对 nginx lua 执行各阶段的再封装。
-
- 11.3 详解 PDK
- PDK(插件开发工具包),是lua函数和变量的集合,是一个语义版本化的组件,可以在请求和响应的上下文阶段在自定义插件中被调用。
-
- 11.3.1 单个属性
- 11.3.2 kong.client
- 11.3.3 kong.ctx
- 11.3.4 kong.ip
- 11.3.5 kong.log
- 11.3.6 kong.nginx
- 11.3.7 kong.node
- 11.3.8 kong.request
- 11.3.9 kong.response
- 11.3.10 kong.router
- 11.3.11 kong.service
- 11.3.12 kong.service.request...
- 11.3.13 kong.service.response ...
- 11.3.14 kong.table
-
- 11.4 插件开发
-
- 11.5 插件测试的运行环境
-
- 11.6 插件的制作与安装
-
- 11.7 插件测试与运行
-
- 11.8 插件与 C 语言
- 除了可以通过kong插件使用纯lua语言开发自定义插件之外,还可以使用LuaJIT 中的 FFI(外部函数调用接口)扩展库,高效简洁的调用外部动态链接库中的C语言函数。
-
- 11.9 插件与 Go 语言
- 为了支持在kong中运行Go插件,需要用到一个外置的 go-pluginserver 进程,这是一个完全运行在go环境中用go语言开发的服务,专用于运行go插件,我们可以在
- kong.conf 配置文件中决定是否开启go语言插件支持,如果选择开启,那么将在启动的kong时同时启动此进程,并打开 Unix domain socket(又叫 IPC socket),
- 以使 kong 与 go-pluginserver 进程可以全双工无障碍的进行高效事件传递,函数调用以及数据流转。
-
- 11.9.1 Go 安装
-
- 11.9.2 开发流程
- 要开发go插件,主要需要做以下工作:
- 1.导入 Kong go-pdk 包
- 2.定义配置结构类型信息
- 3.编写 New() 函数创建配置结构实例
- 4.在该结构上添加方法以处理 kong 事件
- 5.使用 go build 命令 或 kong/go-plugin-tool 工具编译插件
- 6.将编译生成的插件动态链接库共享文件放入 go_plugins_dir 目录
-
- 11.9.3 开发示例



更多推荐



所有评论(0)