kong的安裝和使用


一、概述

Nginx、OpenRestry、Kong這三個項目緊密相連:

  1. Nginx是模塊化設計的反向代理軟件,C語言開發;
  2. OpenResty是以Nginx為核心的Web開發平台,可以解析執行Lua腳本;
  3. 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

image-20210209142224457

概念術語
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好用

image-20210209144920577

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,然后登陸。

image-20210209150122260

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

image-20210209151106006

三、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

image-20210209152633433

image-20210209152801066

創建target

image-20210209152840378

創建service

image-20210209153156006

創建route

image-20210209153435592

image-20210209153446687

測試:

image-20210209224413095

插件的使用

准入插件

image-20210209225046512

image-20210209225027327

處理請求的插件

image-20210209225604912

image-20210209225634614

image-20210209225643960

限流的插件

image-20210209232159191

image-20210209232220064

** Prometheus插件**

image-20210209232736962

認證插件

image-20210209234547921

image-20210209234647575

在路由下面添加插件

image-20210209234901944

image-20210209234919775

image-20210209235014726

image-20210209235113246


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM