虽然kong提供了那么多的插件,但是不可能百分百满足了对于网关的需求,在很多系统中不可能吧用户体系用到kong提供的权限验证体系,包括对于一套系统完整的RBAC系统大家都有不同的改进,以及请求加密参数校验等等,所以对于扩展性对于网关的定义需要有一定的能力的,kong是通过nginx+lua开发的通过lua脚本就可以扩展插件来完成网关的目的

附上:

喵了个咪的博客:w-blog.cn

kong官网:https://konghq.com/

konga官网:https://github.com/pantsel/konga

PS:Kong版本必须 >= 1.0.0才能正常使用konga

一,开发环境准备

首先需要开发环境,docker并不适合作为开发环境来使用,容器重启内容丢失等问题对kong-lua插件开发来说不友好,容器内部的结构也存在区别,所以我们需要使用liunx机器来进行开发

wget https://bintray.com/kong/kong-community-edition-rpm/download_file?file_path=centos/7/kong-community-edition-1.0.3.el7.noarch.rpm

sudo yum install epel-release
sudo yum install kong-community-edition-1.0.3.el7.noarch.rpm --nogpgcheck

kong version
1.0.3

准备数据库

mkdir -p /app/docker/postgres
cd /app/docker/postgres/
vim docker-compose.yml

version: '2.1'
services:db:image: postgres:9.6environment:POSTGRES_DB: kongPOSTGRES_PASSWORD: kongPOSTGRES_USER: konghealthcheck:test: ["CMD", "pg_isready", "-U", "kong"]interval: 30stimeout: 30sretries: 3restart: on-failurestdin_open: truetty: trueports:- "5432:5432/tcp"

docker-compose up -d

初始化配置文件

cp /etc/kong/kong.conf.default /etc/kong/kong.conf
vim /etc/kong/kong.conf

按照之前运营容器时候注入的环境变量来修改配置文件

admin_access_log = logs/admin_access.log
admin_error_log = logs/error.log
admin_listen = 0.0.0.0:8001
database = postgres
pg_database = kong
pg_host = 127.0.0.1
pg_password = kong
pg_user = kong

启动kong,初始化数据库

kong migrations bootstrap -c /etc/kong/kong.conf

启动kong

kong start -c /etc/kong/kong.conf

访问kong

curl localhost:8001

运行konga

docker run -p 1337:1337 --name konga -e "NODE_ENV=production" pantsel/konga:0.14.1

最后就是使用你常用的idea装好lua扩展就可以了

二、开发扩展

这两个文件是必须有的

 handler.lua   // 一个实现的接口。每个函数都由Kong在请求的生命周期中的所需时刻运行。schema.lua    // 保存插件配置的架构,以便用户只能输入有效的配置值。

还有其他的扩展文件

complete-plugin
├── api.lua             // 定义Admin API中可用的端点列表,以与插件处理的实体自定义实体进行交互。
├── daos.lua            // 定义DAO(数据库访问对象)列表,这些DAO是插件所需并存储在数据存储区中的自定义实体的抽象。
├── handler.lua
├── migrations          // 给定数据存储的相应迁移。只有当您的插件必须在数据库中存储自定义实体并通过 daos.lua定义的其中一个DAO与它们进行交互时,才需要进行迁移。
│ ├── cassandra.lua
│ └── postgres.lua
└── schema.lua

mkdir http-rewrite
cd http-rewrite
vim handler.lua
vim schema.lua

return {no_consumer = true,fields = {regex = { type = "string" },replacement = { type = "string" },flag = {type = "string"},},self_check = function(schema, plugin_t, dao, is_update)-- TODO: add checkreturn trueend
}

local BasePlugin = require "kong.plugins.base_plugin"
local json = require("cjson")
local RewriteHandler = BasePlugin:extend()
local ngx = ngxRewriteHandler.PRIORITY = 2000
RewriteHandler.VERSION = "0.1.0"-- 传入参数conf是这个插件存放在数据库中配置
function RewriteHandler:access(conf)RewriteHandler.super.access(self)local host = ngx.var.hostngx.log(ngx.DEBUG, "http-rewrite plugin, host is: ", host, " ,uri is: ",ngx.var.request_uri, " ,config is: ", json.encode(conf))local replace,n,err  = ngx.re.sub(ngx.var.request_uri, conf.regex, conf.replacement)if replace and n == 0 thenreturnendif err thenngx.log(ngx.ERR, "http-rewrite plugin, ngx.re.sub err: ",err, " ,host is: ", host, " ,uri is: ",ngx.var.request_uri, " ,config is: ", json.encode(conf))returnendngx.log(ngx.DEBUG, "http-rewrite plugin, replace is: ",replace)if conf.flag == "redirect" thenngx.redirect(replace,302)elseif conf.flag == "permanent" thenngx.redirect(replace,301)end
endfunction RewriteHandler:new()RewriteHandler.super.new(self, "http-rewrite")
endreturn RewriteHandler

## 在使用新插件之前,需要更新一下数据库:
kong migrations up -c /etc/kong/kong.conf
kong start -c /etc/kong/kong.conf

开启插件

此时就开启了我们自己开发的插件了

也可以通过konga工具开启

配置可以在其中看到

此时访问http://172.16.1.82:8000/abc/test会被跳转到http://172.16.1.82:8000/redirect//test

到这里就已经完成了一个基础插件的开发,更多的一些系统函数可以通过官方插件开发手册来使用

idea安装lua插件_KONG网关 — 插件开发相关推荐

  1. idea安装lua插件_IntelliJ EmmyLua 1.1.9发布,IDEA的Lua插件

    IntelliJ EmmyLua 1.1.9发布,IDEA的Lua插件 发布时间:2017-09-19 22:07:23来源:红联作者:lovsher EmmyLua 1.1.9 发布,此次更新主要内 ...

  2. visual studio安装lua插件

    1.打开vs软件,点击工具->扩展和更新 2.选择联机,进行搜索lua,然后在搜索结果中选中babelua进行下载 3.下载完成后,直接执行安装,成功安装会在vs界面多一个lua按钮 4.现在还 ...

  3. 在intellij idea上安装lua插件

    1.下载lua 下载intellij idea (学生可以申请免费个人版) 2.下载intellij idea成功后,在插件中搜索lua,安装图中插件 3.创建项目 4. 在project SDK处选 ...

  4. Sublime Text 2 安装配置插件

    最近学习python,看网上推荐用sublime text2挺方便,就学习了一下对sublime text2 安装插件,先放在这里,以备以后查找 根据晚上资料修改,原文请看这里 Python的自动补全 ...

  5. Wireshark lua插件

    源地址:https://www.zybuluo.com/natsumi/note/77991 参考:  http://yoursunny.com/t/2008/Wireshark-Lua-dissec ...

  6. 以Docker方式安装和配置Kong网关和Konga控制台

    文章目录 以Docker方式安装和配置Kong网关和Konga控制台 前言 安装Kong 创建容器网络 启动PostgreSQL数据库 初始化数据 对Kong Admin API作安全防护 启动Kon ...

  7. linux安装Lua及代码测试

    一.什么是Lua lua是一种脚本语言,用C语言编写,源码开放,其设计目的是为了嵌入程序应用,为应用程序提供便利的扩展功能,提供灵活的定制功能. lua语言主要应用于游戏编程领域,除此之外,lua也应 ...

  8. linux里vim插件',安装vim插件(linux下)

    安装vim插件(linux下) 第一步:安装zencoding插件(自动完成css html) unzip zencoding-vim.zip –d zencoding 第二步,安装autocompl ...

  9. vim全插件 linux,[转载]安装vim插件(linux下)

    安装vim插件(linux下) 第一步:安装zencoding插件(自动完成css html) unzip zencoding-vim.zip –d zencoding 第二步,安装autocompl ...

最新文章

  1. 成就PHP高手的五个必由之路
  2. 认识 UART 接口
  3. 一篇文章教你学会Java泛型
  4. Spring MVC 学习笔记 json格式的输入和输出
  5. [******] 树问题:普通二叉树的创建与遍历
  6. linux远程连接telnet命令,Linux中的ssh,ping,ftp,telnet远程登录及通信相关的命令...
  7. vmware-linux虚拟机上网配置
  8. mysql+alter+int_MySQL Alter命令
  9. 基础知识巩固五(问题)
  10. python如何获取表单数据_Python Django 获取表单数据的三种方式
  11. 【UCOSIII操作系统】事件篇
  12. csr蓝牙适配 linux,新款4.0蓝牙适配器 迷你4.0蓝牙适配器 Bluetooth CSR 4.0 Dongle
  13. 斯坦福大学公开课:iOS 7应用开发 (二)
  14. 谈谈百度竞价的一些思路
  15. java时间转换为标准时间
  16. 谷露专访伯周咨询创始人Tiger Pan:在退潮后蜕变
  17. labview由于其他对话正在访问FIFO_Windows内核逻辑漏洞:IO管理器访问模式不匹配...
  18. ajax远程调用,jquery中的ajax方法怎样通过JSONP进行远程调用
  19. 基于pandas python sklearn 的美团某商家的评论分类(文本分类)
  20. 用Opencv生成一些五颜六色的图片

热门文章

  1. C#中JSON和对象之间互相转换功能示例
  2. C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法,可通过重写WndProc来实现
  3. IOS之AFNetworking,SDWebImage,Kingfisher,Alamofire,FMDB框架的使用
  4. win10蓝牙允许设备连接到此计算机,Win7自由天空专业版系统配置蓝牙时“允许Bluetooth设备连接到此计算机”选项灰...
  5. centos 对已有卷扩容_centos7下对原有磁盘分区进行在线扩容
  6. js byte数组_这么骚的 js 代码,不怕被揍么
  7. java url 授权_Java:如何使用UrlConnection发布请求与授权?
  8. java 将一张图片切割成n个小图片,任意切割一张图片成新图片
  9. maven依赖循环引用_shiro+spring boot+mybatis启动循环引用问题解决思路和方案
  10. windows无法安装到这个磁盘。选中的磁盘采用GPT分区形式