概述
01
什么是Kong
Kong是一個在Nginx中運行的Lua應用程序,可以通過lua-nginx模塊實現,Kong不是用這個模塊編譯Nginx,而是與OpenRestry一起發布,OpenRestry已經包含了lua-nginx-module,OpenRestry是Nginx的一組擴展功能模塊。
02
為什么是Kong
Kong是一個Api Gateway,通過插件的形式提供負載均衡,日志記錄,身份驗證,速率限制,轉換等功能。
Kong可以很輕松擴展功能,模塊化,可以運行在任何基礎設施上。
03
術語
Route:是請求的轉發規則,按照Hostname和PATH,將請求轉發給Service。
Services:是多個Upstream的集合,是Route的轉發目標。
Consumer:是API的用戶,里面記錄用戶的一些信息。
Plugin:是插件,plugin可以是全局的,綁定到Service,綁定到Router,綁定到Consumer。
Certificate:是https證書。
Sni:是域名與Certificate的綁定,指定了一個域名對應的https證書。
Upstream:是負載均衡策略。
Target:是最終處理請求的Backend服務。
04
特性
-
動態負載均衡
-
基於散列的負載均衡
-
斷路器
-
健康檢查
-
Websockets
-
OAuth2.0
-
日志記錄
-
安全性
-
Syslog
-
監控
-
轉發代理
-
認證
-
速率限制
-
故障檢測和恢復
……
更多詳情參考:https://docs.konghq.com/hub/
05
開源/企業對比
架構
01
架構圖
1.1版本以后支持無db模式
02
執行流程
加入kong后,每個客戶端對API的請求將首先到達Kong,然后被代理到最終API,在請求和響應之間,Kong將執行任何已安裝的插件,擴展API功能集,Kong有效的成為每個API的入口點。
部署
Kong支持在任何基礎設施上運行,支持docker、packages、vagrant、Homebrew、CloudFormation、AWS、Azure、Kubernetes等。
本次部署基於package方式,部署軟件版本。
軟件 | 版本 |
---|---|
Kong | 1.0.3 |
Postgresql | 9.6 |
Kong-dashboard | 3.5.0 |
01
部署Postgresql
docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:9.6
02
創建用戶及數據庫
# 登陸
psql -U postgres -h 10.20.1.190 -p 5432
#創建用戶
create user kong with password ‘kong’;
#創建數據庫
create database kong owner kong;
#退出控制台
\q
03
下載安裝包
wget:https://kong.bintray.com/kong-rpm/centos/7/:kong-1.0.3.el7.noarch.rpm
04
安裝配置
#安裝rpm
yum install kong-1.0.3.el7.noarch.rpm
#拷貝配置
cp /etc/kong/kong.conf.default /etc/kong/kong.conf
#配置
admin_listen = 0.0.0.0:8001, 0.0.0.0:8444 ssl pg_host = 10.20.1.190 pg_port = 5432 pg_user = kong pg_password = kong pg_database = kong
保存並退出。
05
啟動kong
#數據庫遷移,初始化表
kong migrations bootstrap -c /etc/kong/kong.conf –vv
#啟動
kong start -c /etc/kong/kong.conf
06
部署kong-dashboard
dashboard目前只支持kong版本1.0.3,kong最新版本不支持,使用pgbi/kong-dashboard鏡像
#啟動dashboard
docker run -p 8888:8080 pgbi/kong-dashboard start --kong-url http://10.20.1.190:8001
使用
01
upstream
02
target
03
service
04
routers
05
驗證
06
插件
1.Base-auth
-
創建consumer
-
創建Basic-auth-credential
-
服務開啟Basic-auth
-
驗證
未加用戶信息,沒權限,效果如下:
加入用戶信息后,效果如下:
集成
01
Dns SRV
Kong利用Dns輪詢訪問后端應用。
1.架構圖
2.檢查服務域名
使用Dns做服務發現,查看boms-user-service服務如下:
# dig @10.20.11.118 -p 8600 boms-user-service.service.dc1.consul SRV
含義解釋:
調用服務域名boms-user-service.service.dc1.consul,通過dns解析找到實例ip+port,如上例中10.20.11.118:8081。
3.修改kong配置
vim 編輯kong.conf,增加:
dns_resolver: 127.0.0.1:8600
4.kong中使用
在kong中手動增加一個service,host填入服務域名,增加router,即可轉發。
5.總結
需要手動在kong中創建服務,並且僅適用consul注冊中心。
https://github.com/faizalpribadi/kongsul
02
Agent 輪詢
1.架構圖
agent負責監聽注冊中心,動態調用kong admin API創建upstream、target、service、router等資源。
用戶通過boms平台調用admin API修改router信息,實現服務轉發功能,在此數據基礎之上在啟用插件,豐富功能。
開發
01命令行
https://docs.konghq.com/1.0.x/cli/
02
Admin API
https://docs.konghq.com/1.0.x/admin-api/
例如:
03插件開發
https://docs.konghq.com/1.0.x/pdk/ 插件開發工具包。
參考
-
https://docs.konghq.com Kong官方文檔
-
https://docs.konghq.com/hub/kong-inc 插件文檔
-
https://www.lijiaocn.com/%E6%8A%80%E5%B7%A7/2017/03/06/dns-srv.html dns-srv 詳解
-
https://github.com/faizalpribadi/kongsul
-
https://github.com/YeautyYE/nacos-nginx-template
-
https://github.com/quancheng-ec/eureka-kong-register