Kong - 安装与使用

Kong的安装过程

1 . 创建docker 虚拟网络

docker network create kong-net
1

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
1
2
3
4
5
6
7

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:latest kong migrations bootstrap
1
2
3
4
5
6
7
8

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:latest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Kong 默认监听的端口

  • 8000 : 监听来自客户端的HTTP 流量,转发到你的 upstream 服务上
  • 8443 : 监听HTTPS的流量,功能跟 8000一样,可以通过配置文件禁止。
  • 8001kongHTTP监听的 admin api 管理接口
  • 8444kongHTTPS监听的 admin api 管理接口

5 . 验证是否安装成功

curl -i http://localhost:8001/
1

返回下面内容,表示安装成功,可以正常使用:

[root@iZuf61kbf845xt6tz10abgZ ~]# curl -i http://localhost:8001/
HTTP/1.1 200 OK
Date: Mon, 28 Mar 2022 23:06:40 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Content-Length: 11040
X-Kong-Admin-Latency: 1
Server: kong/2.8.0
1
2
3
4
5
6
7
8
9

安装 kong 管理UI

konga带来的一个最大的便利就是可以很好地通过UI观察到现在kong的所有的配置,并且可以对于管理kong节点情况进行查看、监控和预警,konga主要特性如下:

  • 多用户管理
  • 管理多个Kong节点
  • 电子邮件异常信息通知
  • 管理所有Kong Admin API
  • 使用快照备份,还原和迁移Kong节点
  • 使用运行状况检查监控节点和API状态
  • 轻松的数据库集成(MySQL,postgresSQL,MongoDB)

Konga支持PostgreSQL数据库,定义挂载卷konga-postgresql

docker volume create konga-postgresql
1

创建konga的数据库:

docker run -d --name konga-database \
               --network=kong-net \
               -v konga-postgresql:/var/lib/postgresql/data \
               -p 5433:5432 \
               -e "POSTGRES_USER=konga" \
               -e "POSTGRES_DB=konga" \
               -e "POSTGRES_PASSWORD=konga" \
               postgres:9.6
1
2
3
4
5
6
7
8

初始化数据库:

docker run --rm pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@139.196.82.84:5433/konga
1

启动konga:

docker run -p 1337:1337 \
             --network=kong-net \
             -e "DB_ADAPTER=postgres" \
             -e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \
             -e "NODE_ENV=production" \
             -e "DB_PASSWORD=konga" \
             --name konga \
             pantsel/konga
1
2
3
4
5
6
7
8

创建konga和kong的连接关系

1.创建账号,并登陆:

konga登陆

2.对应konga数据库也能看到对应记录

konga数据库记录

3.konga创建与kong的连接:

konga创建连接

Kong的快速使用

动态负载均衡实现

典型的nginx的配置文件

upstream demoupstream {
        server localhost:9950 weight=100;
}
server {
        listen 8000;
        location /demo {
                proxy_pass http://demoupstream;
        }
}
1
2
3
4
5
6
7
8
9

上面的简单Nginx配置,可以转为如下kong 配置

1 . 配置 Upstream

curl -X POST http://localhost:8001/upstreams --data "name=demoupstream"
1

2 . 配置 target

curl -X POST http://localhost:8001/upstreams/demoupstream/targets --data "target=139.196.82.84:9950" --data "weight=100"
curl -X POST http://localhost:8001/upstreams/demoupstream/targets --data "target=139.196.82.84:4300" --data "weight=100"
1
2

3 . 配置 service

curl -X POST http://localhost:8001/services --data "name=demo" --data "host=demoupstream" --data "path=/"
1

4 . 配置 route

curl -X POST http://localhost:8001/services/demo/routes --data "name=demoroute" --data "paths[]=/demo"
1

5 . 验证

curl -i http://localhost:8000/demo
1

输出结果:

[root@iZuf61kbf845xt6tz10abgZ ~]# curl -i http://localhost:8000/demo
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 31
Connection: keep-alive
Access-Control-Allow-Origin: *
X-Kong-Upstream-Latency: 5
X-Kong-Proxy-Latency: 1
Via: kong/2.8.0

{"method":"get","recvInfo":""}
1
2
3
4
5
6
7
8
9
10
11

postman验证1:

postman验证1

postman验证2:

特别注意:curl -X POST http://localhost:8001/services --data "name=demo" --data "host=demoupstream" --data "path=/"

对应konga的默认配置

Path	/
The path to be used in requests to the upstream server. Empty by default.
1
2

postman验证2

postman验证3:

postman验证3