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

一、编写插件

Kong网关通过Go PDK支持 Go 语言,Go PDK 是一个为 Kong Gateway 提供 Go 绑定的库。

要在 Go 中编写 Kong Gateway 插件,需要以下几步:

  1. 定义一个structure结构体来保存配置。

  1. 编写一个New()函数来创建结构体的实例。

  1. 向该结构体添加方法来处理业务逻辑,如鉴权、日志等,kong提供6个方法供我们使用。

  1. 添加一个main()调用server.StartServer(New, Version, Priority).

注意Kong Go 插件库用例
/*
    A "hello world" plugin in Go,
    which reads a request header and sets a response header.
*/

package main

import (
    "fmt"
    "log"

    "github.com/Kong/go-pdk"
    "github.com/Kong/go-pdk/server"
)

func main() {
    server.StartServer(New, Version, Priority)
}

var Version = "0.2"
var Priority = 1

type Config struct {
    Message string
}

func New() interface{} {
    return &Config{}
}

func (conf Config) Access(kong *pdk.PDK) {
    host, err := kong.Request.GetHeader("host")
    if err != nil {
        log.Printf("Error reading 'host' header: %s", err.Error())
    }

    message := conf.Message
    if message == "" {
        message = "hello"
    }
    kong.Response.SetHeader("x-hello-from-go", fmt.Sprintf("Go says %s to %s", message, host))
}

KONG提供以下6个函数供我们使用,可以在不同阶段使用不同函数处理业务逻辑:

  1. Certificate(证书):该方法用于管理用于客户端和API之间安全通信的SSL/TLS证书。它可以处理SSL终止、SSL卸载和SSL透传,并提供生成、上传和管理证书和密钥的选项。

  1. Rewrite(重写):该方法允许您重写或转换请求和响应,以更改它们的路径、头部、查询参数等信息。它可以用于路由请求到不同的上游服务,以及从上游服务中修改响应。

  1. Access(访问):该方法用于控制对API的访问权限,包括身份验证、授权和限流等功能。它可以实现基于令牌、API密钥、IP地址、HTTP方法等多种访问控制策略。

  1. Response(响应):该方法用于修改或拦截API的响应,以便进行处理或转换。它可以用于添加、删除或修改响应头、响应正文和状态码等信息。

  1. Preread(预读):该方法允许您在Nginx处理请求之前读取请求的一部分,以便进行处理或转发。它可以用于处理连接请求和身份验证等场景。

  1. Log(日志):该方法用于记录API请求和响应的信息,以便进行跟踪和监视。它可以将请求和响应信息记录到文件、数据库、Syslog等不同的存储介质中。

二、安装插件

以docker-compose编排部署为例(docker-compose.yml链接):

要安装 Go Kong Gateway 插件,需要以下几步:

  1. 将go程序build成可执行二进制程序

  1. 将go程序挂载到kong镜像中

  1. 配置参数

KONG_PLUGINS: bundled,go-hello
KONG_PLUGINSERVER_NAMES: go-hello
KONG_GO_PLUGINS_DIR: /usr/local/bin/ KONG_PLUGINSERVER_GO_HELLO_QUERY_CMD: go-hello -dump
解释:
KONG_PLUGINS: 用于指定要加载的 Kong 插件。在这里, bundled 表示要加载 Kong 内置的插件, go-hello 则表示要加载自定义的 Go 插件。
KONG_PLUGINSERVER_NAMES: 用于指定自定义插件的名称。在这里, go-hello 表示自定义插件的名称为 go-hello
KONG_GO_PLUGINS_DIR: 用于指定存放自定义 Go 插件的目录。在这里, /usr/local/bin/ 表示自定义插件存放在 /usr/local/bin/ 目录下。
KONG_PLUGINSERVER_GO_HELLO_QUERY_CMD: 用于指定自定义插件启动时的命令。在这里, go-hello -dump 表示启动自定义插件时要执行的命令为 go-hello -dump,其中 -dump 为自定义插件的参数。

  1. docker-compose up 启动容器即可生效

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值