美文网首页
Kong插件快速开发

Kong插件快速开发

作者: 印随2018 | 来源:发表于2020-02-16 11:16 被阅读0次

详细的开发文档:https://docs.konghq.com/2.0.x/plugin-development/

一、背景

今天我们来快速开发一个kong插件,插件的功能是客户端可以传递一个lambda函数,在Kong网关中运行,运行结果会以Header头的形式返回到客户端。

大家可以通过这个插件,来快速的体验PDK提供的函数接口。

二、安装Kong

CentOS系统可以使用下面的命令来完成安装

sudo yum install -y wget
wget https://bintray.com/kong/kong-rpm/rpm -O bintray-kong-kong-rpm.repo
export major_version=`grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release | cut -d "." -f1`
sed -i -e 's/baseurl.*/&\/centos\/'$major_version''/ bintray-kong-kong-rpm.repo
sudo mv bintray-kong-kong-rpm.repo /etc/yum.repos.d/
sudo yum install -y kong

三 启动Kong

  1. 创建配置文件
cp /etc/kong/kong.conf.default /etc/kong/kong.conf
  1. 修改配置文件/etc/kong/kong.conf
sed -i "/^#database/i\database = off" /etc/kong/kong.conf
  1. 启动kong
kong start
  1. 查看默认配置

如果访问成功,代表kong已经成功运行

curl http://127.0.0.1:8001/config

四、开发插件

  1. 进入到kong的插件目录/usr/local/share/lua/5.1/kong/plugins,创建两个lua文件
cd /usr/local/share/lua/5.1/kong/plugins
mkdir debug
cd debug

cat > schema.lua <<EOF
local typedefs = require "kong.db.schema.typedefs"


return {
  name = "debug",
  fields = {
    { protocols = typedefs.protocols_http },
    { config = {
        type = "record",
        fields = {
          { lambda_name = { type = "string", default = "X-Kong-Lambda" }, },
          { result_name = { type = "string", default = "X-Kong-Result" }, },
        },
      },
    },
  },
}
EOF

cat > handler.lua <<EOF
local cjson = require("cjson.safe").new()

local DebugHandler = {}

DebugHandler.PRIORITY = 6
DebugHandler.VERSION = "2.0.0"


function DebugHandler:header_filter(conf)
  local lambda = kong.request.get_header(conf.lambda_name)
  if lambda then
    local result = cjson.encode(loadstring(lambda)())
    kong.response.set_header(conf.result_name, result)
  end
end
EOF

cd
  1. 自动加载插件,修改配置文件/etc/kong/kong.conf
sed -i "/^#plugins/i\plugins = bundled,debug" /etc/kong/kong.conf
  1. 重新启动kong
kong restart
  1. 修改apis.yaml,配置插件
cd

cat > apis.yml <<EOF
_format_version: "1.1"
services:
 - name: httpbin-service
   url: http://httpbin.org/
   # Entities can store tags as metadata
   tags:
   - httpbin
   # Entities that have a foreign-key relationship can be nested:
   routes:
   - name: httpbin-route
     paths:
     - /
   plugins:
   - name: debug
     config:
       lambda_name: X-Kong-Lambda
       result_name: X-Kong-Result
EOF
  1. 检测配置文件是否合法
kong config parse apis.yml
  1. 上传配置文件
curl http://127.0.0.1:8001/config -F "config=@apis.yml"
  1. 测试接口
# curl -v \
-H "X-Kong-Lambda: return kong.router.get_service().name" \
http://127.0.0.1:8000/ip
image.png

相关文章

  • Kong插件快速开发

    详细的开发文档:https://docs.konghq.com/2.0.x/plugin-development/...

  • 使用docker环境开发kong插件流程

    使用docker环境开发kong插件流程 说明:本教程适合使用docker环境开发kong插件,本教程使用的是 p...

  • KONGAPI插件开发

    背景 kong的插件开发是基于lua开发的,原理是基于lua-nginx-module的机制。kong的机制其实同...

  • Kong插件开发

    Kong插件开发文档地址:https://docs.konghq.com/0.14.x/plugin-develo...

  • 一、kong的介绍和安装

    Kong是一个基于Openresty开发的网关平台,可以基于插件的形式控制网关的认证、负载、限速等。 Kong默认...

  • Kong插件开发工具包

    Kong插件开发工具包 插件开发工具包(或称 PDK),是一组 Lua 方法和变量,插件可以使用这些方法和变量实现...

  • Kong插件开发指南

    What is Kong OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集...

  • Kong插件开发向导

    简介 在进一步讨论之前,这里先有必要简要阐述一下 Kong 是如何构建的,特别是它如何与Nginx集成,以及它与L...

  • Kong[nginx]-10 Kong插件开发体验(一)

    0x00 TL;DR 通过学习本文, 可以了解Kong插件的基本信息:目录规则文件名称规则您还可以看到插件代码的手...

  • 快速实验Kong的promethus插件

    一、安装 Docker 二、安装 Httpbin port: 80 三、安装 Promethus port: 90...

网友评论

      本文标题:Kong插件快速开发

      本文链接:https://www.haomeiwen.com/subject/rblpfhtx.html