Kong - 自定义插件开发(四)

July 15, 2021

这篇文章主要介绍了如何使用Go语言开发自定义插件。首先,我们需要下载并安装go-pluginserver,然后在CentOS环境下安装C相关的编译环境。接着,我们可以下载官方的插件示例,并通过Go语言编写自己的插件。最后,我们需要配置相关的环境变量并启动Kong服务。文章还提供了Konga插件的示例图和相关参考链接。

目录

下载安装 go-pluginserver

Github: https://github.com/Kong/go-pluginserver

下载安装go-pluginserver

git clone https://github.com/Kong/go-pluginserver.git
cd go-pluginserver

# 构建生成 go-pluginserver 二进制文件
go build

安装c相关编译环境

Contos

yum install make automake gcc gcc-c++ kernel-devel

下载官方插件示例

Github: https://github.com/Kong/go-plugins.git

# git clone https://github.com/Kong/go-plugins.git
cd go-plugins
go build -buildmode=plugin go-hello.go

Demo

package main

import (
    "fmt"
    "github.com/Kong/go-pdk"
)

// Config konga 界面相关字段
// 注:如果修改Config字段需重启kong服务才可生效
type Config struct {
    Message string
}

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

// Access 阶段
func (conf Config) Access(kong *pdk.PDK) {
    // 获取请求header中的host信息
    host, err := kong.Request.GetHeader("host")
    if err != nil {
        // 记录err日志
        kong.Log.Err(err.Error())
    }

    // 获取插件配置信息message
    message := conf.Message
    if message == "" {
        message = "hello"
    }

    // 设置header头
    kong.Response.SetHeader("x-hello-from-go", fmt.Sprintf("Go says %s to %s", message, host))
}

kong服务启动

配置相关环境变量

KONG_PLUGINS=bundled,go-hellogo-hello 插件名称)

KONG_GO_PLUGINS_DIR=/home/kong/go-plugins.so 文件目录)

KONG_GO_PLUGINSERVER_EXE=/home/kong/go-plugins/go-pluginservergo-pluginserver 文件目录)

sudo docker run -d --name kong-2.2.1 \
     -e "KONG_DATABASE=cassandra" \
     -e "KONG_CASSANDRA_KEYSPACE=internal_gateway_dev" \
     -e "KONG_CASSANDRA_USERNAME=internal_gateway_dev" \
     -e "KONG_CASSANDRA_PASSWORD=xxxx" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=xxxx" \
     -e "KONG_CASSANDRA_TIMEOUT=30000" \
     -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
     -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
     -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
     -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
     -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
     -e "KONG_PLUGINS=bundled,go-hello" \
     -e "KONG_GO_PLUGINS_DIR=/home/kong/go-plugins" \
     -e "KONG_GO_PLUGINSERVER_EXE=/home/kong/go-plugins/go-pluginserver" \
     -p 8000:8000 \
     -p 8443:8443 \
     -p 0.0.0.0:8001:8001 \
     -p 127.0.0.1:8444:8444 \
     -v /home/xx/devspace/go-plugins:/home/kong/go-plugins \  # 本地挂载目录
     kong:2.2.1-centos

konga 插件示例图

image-20210407145426890

image-20210407145545878

参考

https://www.yuque.com/baxiang/ms/ggqrk7

其他网关

IARNO

服务端开发

Mac 安装VM虚拟机及网络配置

Kong - 自定义插件开发(三)