11.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 自定义插件

Posted enlyhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 自定义插件相关的知识,希望对你有一定的参考价值。

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 开发示例 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于11.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 自定义插件的主要内容,如果未能解决你的问题,请参考以下文章

12.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 高级案例实战

7.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 日志收集与分析

9.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 高级进阶

8.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 指标监控与报警

6.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Lua 语言

5.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Kong 的配置详解