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