idea安装lua插件_KONG网关 — 插件开发
雖然kong提供了那么多的插件,但是不可能百分百滿足了對于網(wǎng)關(guān)的需求,在很多系統(tǒng)中不可能吧用戶體系用到kong提供的權(quán)限驗證體系,包括對于一套系統(tǒng)完整的RBAC系統(tǒng)大家都有不同的改進,以及請求加密參數(shù)校驗等等,所以對于擴展性對于網(wǎng)關(guān)的定義需要有一定的能力的,kong是通過nginx+lua開發(fā)的通過lua腳本就可以擴展插件來完成網(wǎng)關(guān)的目的
附上:
喵了個咪的博客:w-blog.cn
kong官網(wǎng):https://konghq.com/
konga官網(wǎng):https://github.com/pantsel/konga
PS:Kong版本必須 >= 1.0.0才能正常使用konga
一,開發(fā)環(huán)境準備
首先需要開發(fā)環(huán)境,docker并不適合作為開發(fā)環(huán)境來使用,容器重啟內(nèi)容丟失等問題對kong-lua插件開發(fā)來說不友好,容器內(nèi)部的結(jié)構(gòu)也存在區(qū)別,所以我們需要使用liunx機器來進行開發(fā)
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準備數(shù)據(jù)庫
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按照之前運營容器時候注入的環(huán)境變量來修改配置文件
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,初始化數(shù)據(jù)庫
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擴展就可以了
二、開發(fā)擴展
這兩個文件是必須有的
handler.lua // 一個實現(xiàn)的接口。每個函數(shù)都由Kong在請求的生命周期中的所需時刻運行。schema.lua // 保存插件配置的架構(gòu),以便用戶只能輸入有效的配置值。還有其他的擴展文件
complete-plugin ├── api.lua // 定義Admin API中可用的端點列表,以與插件處理的實體自定義實體進行交互。 ├── daos.lua // 定義DAO(數(shù)據(jù)庫訪問對象)列表,這些DAO是插件所需并存儲在數(shù)據(jù)存儲區(qū)中的自定義實體的抽象。 ├── handler.lua ├── migrations // 給定數(shù)據(jù)存儲的相應(yīng)遷移。只有當您的插件必須在數(shù)據(jù)庫中存儲自定義實體并通過 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"-- 傳入?yún)?shù)conf是這個插件存放在數(shù)據(jù)庫中配置 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 ## 在使用新插件之前,需要更新一下數(shù)據(jù)庫: kong migrations up -c /etc/kong/kong.conf kong start -c /etc/kong/kong.conf開啟插件
此時就開啟了我們自己開發(fā)的插件了
也可以通過konga工具開啟
配置可以在其中看到
此時訪問http://172.16.1.82:8000/abc/test會被跳轉(zhuǎn)到http://172.16.1.82:8000/redirect//test
到這里就已經(jīng)完成了一個基礎(chǔ)插件的開發(fā),更多的一些系統(tǒng)函數(shù)可以通過官方插件開發(fā)手冊來使用
總結(jié)
以上是生活随笔為你收集整理的idea安装lua插件_KONG网关 — 插件开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界的英文名叫什么
- 下一篇: 我的世界附魔指令是什么(汉典我字的基本解