本文将针对Kong使用第三方的go插件进行详细阐述。首先,我们解答下标题的问题:如何使用第三方的go插件?我们可以通过编写插件来达到此目的。
一、插件架构介绍
Kong的插件系统采用基于OpenResty的Lua语言编写的插件,但是Lua语言对于部分开发人员可能不是十分熟悉,因此我们可以使用go语言来编写插件。在这种情况下,我们需要使用Kong提供的插件开发工具(PDK)来进行操作。
Kong插件的架构主要由三个部分构成:处理阶段、插件逻辑和PDK。
- 处理阶段:Kong处理请求时,按照预定义的流程将几个处理阶段串联起来。Kong提供了几个处理阶段,例如:SSL、身份验证和HTTP,我们可以根据需要将插件放置在相应的处理阶段。
- 插件逻辑:这是我们编写的插件代码,可以是OpenResty的Lua语言或者是go语言。这部分代码将在处理阶段执行。
- PDK:PDK是Kong提供的插件开发工具。它是一组API接口,可以在插件中提供更为强大的功能。例如:访问请求头部信息、获取客户端IP地址或者直接向客户端发送请求响应等操作。
二、插件编写流程
接下来我们将介绍如何编写一个基于go语言的Kong插件。假设我们需要编写一个简单的插件来记录每个请求的HTTP头信息和IP地址。
1. 执行环境配置
首先,我们需要配置和安装Go开发环境和Kong。确保Go版本高于或等于1.14,并且您已经安装了Kong。
2. 生成插件模板
我们可以使用kong-go-plugin-toolkit工具来生成Go插件模板,它提供了插件框架的核心代码结构。在命令行中输入以下命令:
$ go get github.com/kong/go-plugin-toolkit/v2/cmd/kong-go-plugin-toolkit $ kong-go-plugin-toolkit init --type go --name header-logger --description "Log HTTP headers and IP address of the request"
这将生成一个名为header-logger的文件夹,其中包含“Empty.go”、“Main.go”和“Module.hcl”文件。
3. 实现插件逻辑
在“Main.go”文件中,我们实现插件的逻辑。首先,我们需要在文件头部添加导入声明:
package main import ( "context" "github.com/kong/go-plugin-toolkit/v2/kong" "net/http" )
然后,在`Handler`函数中,我们编写请求处理逻辑来记录请求头信息和IP地址:
func (pl *Plugin) Handler(ctx context.Context, req *http.Request) (*http.Response, error) { headers := req.Header ip := kong.GetIP(req) log.Printf("Request headers: %v", headers) log.Printf("Request IP address: %s", ip) return pl.Next(ctx, req) }
这里我们使用了`log`包记录请求头和IP地址。`kong.GetIP`函数可以获取请求的IP地址。
4. 安装插件
完成插件的编写之后,我们需要安装并配置插件。在命令行中输入以下命令:
$ make install-dev
这将构建和安装插件。接下来,在“Module.hcl”文件中进行配置,定义插件的名称、版本和处理阶段:
package = "kong.plugins.header-logger" version = "0.1.0" server { plugins = { "header-logger" = true } # Put the plugin at the beginning of the plugins list plugins_config = { "header-logger" = { path = "/usr/local/lib/kong/plugins/header-logger.so" } } } service { name = "mock" path = "/mock" routes = { { name = "mock" paths = ["/mock"] plugins = { "header-logger" = { config = { foo = "bar" } } } } } } consumer { }
`Plugin`的`package`和`version`是必须的,`server.plugins`和`service.routes.plugins`中的插件名称将与插件的文件夹名称相同。注意,`server.plugins_config`是一个可选配置项,指定了插件的位置和额外的配置信息。
5. 测试插件
最后,我们可以启动Kong并测试插件。在命令行中输入以下命令:
$ kong start -c /path/to/Module.hcl
使用curl命令发送请求来测试插件:
curl -i -X GET http://localhost:8000/mock --header "Authorization: Bearer foobar"
现在,您应该能够在Kong日志中看到请求头信息和IP地址的记录。
三、插件开发最佳实践
在插件开发过程中,以下是一些最佳实践:
- 按需使用PDK:PDK是Kong提供的插件开发工具,使用它可以提供更为强大的功能。但是,在需要时才使用PDK,因为这将增加插件的复杂性和执行时间。
- 合理使用日志:日志是插件开发中必不可少的工具,但是过多的日志输出将影响Kong的性能。因此,建议使用合理的日志级别,并定期清除过时的日志文件。
- 尝试使用插件板:插件板是一种通用的插件模板,我们可以在此基础上构建自己的插件。使用插件板可以减少代码编写和测试的时间。
四、总结
在本文中,我们详细阐述了如何使用Kong的第三方go插件。通过安装开发环境、生成插件模板、编写插件逻辑、配置和安装插件以及测试插件,我们顺利完成了一个简单的Kong插件,并介绍了插件开发的最佳实践。希望本文能够对您的Kong插件开发工作有所帮助。