一、概述
Nginx、OpenRestry、Kong這三個項目緊密相連:
- Nginx是模塊化設計的反向代理軟件,C語言開發;
- OpenResty是以Nginx為核心的Web開發平台,可以解析執行Lua腳本;
- Kong是一個OpenResty應用,一個api gateway。
OpenResty與Lua的關系類似於Jvm與Java,不過OpenResty是基於nginx的,主要用於Web、API類應用
二、Kong docker方式部署
參考:https://docs.konghq.com/install/docker/?_ga=2.218789593.1933534790.1562222882-743556268.1562222882
1、創建docker網絡
docker network create kong-net
2、運行postgresql的數據庫
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
postgres:9.6
3、進行數據初始化
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:2.0.3 kong migrations bootstrap
4 、運行kong
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:2.0.3
概念術語
upstream:是對上游服務器的抽象;
target:代表了一個物理服務,是ip+port的抽象;
service:是抽象層面的服務,他可以直接映射到一個物理服務(host指向ip+port),也可以指向一個upstream來做到負載均衡;
route:是路由的抽象,他負責將實際的request映射到service。默認情況下,KONG監聽的端口為:8000、8001、8443、8444
8444:通過此端口,管理者可以對HTTP請求進行監控;
其中8000/8443分別是用來監聽來自客戶端的Http和Https請求,等價於Nginx默認的80端口,而8001端口
便是默認的管理端口,可以通過HTTPRestfulAPI來動態管理Kong的配置;
使用方法
# curlhttp://localhost:8001
5、dashboard
kong dashboard方式
docker run -d -p 8080:8080 pgbi/kong-dashboard start --kong-url http://192.168.1.105:8001 --basic-auth kongUser=123456
由於kong版本過高,不支持,沒有konga好用
konga安裝方式
docker run --rm --network=kong-net pantsel/konga -c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga
docker run -p 1337:1337 \
--network=kong-net \
-e "DB_ADAPTER=postgres" \
-e "DB_HOST=kong-database" \
-e "DB_USER=kong" \
-e "DB_PASSWORD=kong" \
-e "DB_DATABASE=konga" \
-e "KONGA_HOOK_TIMEOUT=120000" \
-e "NODE_ENV=production" \
--name konga \
pantsel/konga
建議admin,然后登陸。
6 輔助pgadmin
docker run -p 8090:80 \
--name=pgadmin \
--network=kong-net \
--link kong-database:kong-database \
-e 'PGADMIN_DEFAULT_EMAIL=dalianpai@163.com' \
-e 'PGADMIN_DEFAULT_PASSWORD=1qaz@WSX' \
--restart always \
-d dpage/pgadmin4
三、Kong的使用
一個典型的Nginx配置
upstream helloupstream {
server localhost:3000 weight-100;
}
server{
listen 80;
location /hello{
proxy_pass http://helloupstream;
}
如上簡單的Nginx配置,可以轉換為如下的Http請求。
對應的Kong配置
1)配置upstream
curl -x POST http://localhost:8001/upstreams --data "name=helloupstream"
2)配置target
curl -x POST http://localhost:8001/upstreams/helloupstream/targets --data "target=localhost:3000" --data "weight=100"
3)配置service
curl -x POST http://localhost:8001/services--data "name-hello" --data "host=helloupstream"
4)配置route
curl -x POST http://localhost:8001/routes --data "paths[]=/he1lo" --data "service.id=ncaruice.id 86g5cc65-16c1-43b1-95a1-5d30d0a504o9"
這一切都是動態的,無需手動reload nginx.conf
為Kong新增路由信息時涉及到了upstream, target, service, route等概念,便是Kong最核心的四個對象。
為hello服務添加50次/秒的限流:
curl -x POST http://localhost:8001/services/he11o/plugins\
--data "name-rate-limiting" \
--data "config.second=50"
為hello服務添加jwt插件;
curl_x posT http://localhost:8001/services/1ogin/plugins\
--data "name=jwt"
同理,插件也可以安裝在route之上
curl -x POST http://localhost:8001/routes/{routeId}/plugins\
--data "name=rate-limiting" \
--data "config.second=50"
curl -x POST http://localhost:8001/routes/{routeId}/plugins\
--data "name=jwt"
四、konga的使用
進行反向代理
創建upstream
創建target
創建service
創建route
測試:
插件的使用
准入插件
處理請求的插件
限流的插件
** Prometheus插件**
認證插件
在路由下面添加插件