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

11.1 简介 
	kong 的自定义插件由一组Lua模块文件组成,其中每个文件均可以被视为一个独立的模块,实现独立的功能。插件的模块文件名遵循下面的约定:
	kong.plugins..

	其中 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..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的云原生微服务网关 --- 自定义插件_第1张图片

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

 

你可能感兴趣的:(11.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 自定义插件)