2019独角兽企业重金招聘Python工程师标准>>>

虽然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

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

转载于:https://my.oschina.net/wenzhenxi/blog/3048071

KONG网关 — 插件开发相关推荐

  1. kong 网关日志格式修改

    kong 网关日志格式修改 kong网关默认日志在/usr/local/kong/logs,主要有access.log,admin_access.log,error.log,access.log和ng ...

  2. centos6.5 安装 kong 网关

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 最近要求了解下kong网关,然后在网上一顿找,说实话,度娘的力量还是不行啊,找出来的那些跟着配置,不 ...

  3. kong 网关教程入门

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 为什么使用API-Gateway 1. 方便客户端维护-- 每个请求方不用管理多个api url,统一访问api-gateway即可 2. 接口重构时 ...

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

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

  5. Kong网关简介安装

    转载 李亚飞 大佬的文章:https://www.lyafei.com/ 背景 我们有批设备卖给了海外的服务商,老外请了第三方检测机构,检测设备与我们系统的安全性,结果找到了近 40+ 的安全漏洞,有 ...

  6. KONG网关 — 介绍安装

    网关是微服务中不可或缺的一部分,它承载了所有请求流量入口,参数验证拦截,用户权限验证,但是除了JAVA的spring cloud之外,公共网关屈指可数,其中最受关注的就是KONG了,笔者半年前就已经在 ...

  7. Kong网关upstream健康检查机制

    目录 upstream概念及作用 健康检查 健康检查方式 判定target是否健康 判定upstreams是否健康 两种康检查的区别 启用和禁用健康检查 禁用健康检查 使用总结 upstream概念及 ...

  8. API网关之Kong网关简介

    1. Kong简介 Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用.易扩展的,由Mashape公司开源的API Gateway项目.Kong是基于NGINX和Apach ...

  9. 在K3s上使用Kong网关插件,开启K3s的无限可能!

    我的工作中很重要的一部分是参加各种各样的技术会议.最近参加的是去年11月的北美KubeCon,在会议的最后一天,所有人都焦头烂额,我也一直机械地向不同的人重复我的自我介绍.后来,我已经十分烦躁,决定逃 ...

最新文章

  1. Dicom Test Files
  2. 三层交换机实现VLAN互通实例
  3. C++ 原码、反码、补码理解笔记
  4. 在Linux下用gdb检测内核rootkit
  5. Two conferences重点词汇
  6. Centos下重要日志文件及查看方式
  7. 【转】使用ArcGIS Engine开发ArcGIS Server的胖客户端浏览程序
  8. [SDOI2017]数字表格
  9. HDU 4283 You Are the One
  10. java中大数开方_大数开方(Java版)
  11. Maven的学习资料收集--(九) 构建SSH项目以及专栏maven
  12. 批量标准化BN方法简介【避免了梯度消失和梯度爆炸、加速网络的收敛、优化网络结构】
  13. 改变kingcms默认拼音路径格式/修改kingcms拼音路径
  14. Visual SourceSafe使用流程指南
  15. 打开 VMware Workstation 14 Pro 中的虚拟机出现 “此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态” 解决方法
  16. CentOS7离线安装Cloudera Manager 5.14.1
  17. 路由追踪traceroute分析
  18. 2013年2月19日发布“过年啰”总结
  19. 利用tftpd32在Linux与Windows7之间传输文件
  20. XilinxFPGA: Vivado ISE

热门文章

  1. Makefile-filter和filter-out
  2. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集...
  3. SAP Basis常用事务代码
  4. 更改Zend Studio/Eclipse代码风格主题
  5. php连接memcache(php.ini配置)
  6. python文件和路径操作
  7. 如何在Outlook 2003和OWA中允许接受EXE附件
  8. SQL Server中删除重复数据的几个方法
  9. 移动端布局:视口viewport的理解
  10. git命令-远程仓库拉取、本地仓库更新、工作空间提交等等