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
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Kong 默认监听的端口
- 8000 : 监听来自客户端的
HTTP
流量,转发到你的upstream
服务上 - 8443 : 监听
HTTPS
的流量,功能跟8000
一样,可以通过配置文件禁止。 - 8001 :
kong
的HTTP
监听的 admin api 管理接口 - 8444 :
kong
的HTTPS
监听的 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
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
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
2
3
4
5
6
7
8
创建konga和kong的连接关系
1.创建账号,并登陆:
2.对应konga数据库也能看到对应记录
3.konga创建与kong的连接:
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
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
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
2
3
4
5
6
7
8
9
10
11
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
2
postman验证3: