说明
仅记录安装部署过程
操作系统使用的
CentOS-7.6.1810 x86_64
kong版本为
1.1.2
官方文档在这里
环境准备
PostgreSQL
安装过程
创建kong所需的数据库和用户
登录PostgreSQL数据库
1 | psql -U postgres |
创建用户
1 | create user kong with password 'kong_password'; |
创建数据库
1 | create database kong owner kong; |
授权用户拥有数据库所有权限
1 | grant all privileges on database kong to kong; |
Kong安装
配置YUM源
1 | cat > /etc/yum.repos.d/kong.repo <<EOF |
安装kong
1 | yum install -y kong-1.1.2-1 |
配置kong
/etc/kong/kong.conf
1 | ----------------------- |
创建日志目录
1 | mkdir -p /var/log/kong |
初始化kong数据库
1 | /usr/local/bin/kong migrations bootstrap -c /etc/kong/kong.conf |
数据库初始化时输出示例
1 | bootstrapping database... |
启动kong
1 | /usr/local/bin/kong start -c /etc/kong/kong.conf |
查看监听端口
80和443端口是业务端口
8001和8444是Admin API端口
1 | Active Internet connections (servers and established) |
Kong访问测试
访问本机的8001端口
1 | curl -i http://localhost:8001/ |
输出示例
1 | HTTP/1.1 200 OK |
查看Nginx日志
在本文中已经定义了日志路径为
/var/log/kong/
可以看到有四个日志文件
1 | ls /usr/local/kong/logs/ |
查看Nginx的PID文件
kong的配置文件没法定义PID文件的路径
默认在
/usr/local/kong/pids/nginx.pid
创建kong的systemd服务脚本
/usr/lib/systemd/system/kong.service
1 | [Unit] |
Kong集群
单节点集群
只有一个kong节点连接到数据库(cassandra或者PostgreSQL)时,通过kong的Admin API提交的变更都会立刻生效。
kong的配置信息是缓存在内存中。
多节点集群
在多个kong节点组成的集群中,这些kong节点都连接到同一个数据库(cassandra或者PostgreSQL),即可组成集群。
当其中一个节点提交了修改,那么其他节点是不会立刻感知到已经提交的变更。
因此所有kong节点会在后台定期执行任务,从数据库中读取其他节点提交的变更。
db_update_frequency
默认值5
每5秒,集群中所有的kong节点都会从数据库中获取最新的配置信息,并缓存到内存中
db_update_propagation
默认值0
如果使用了Cassandra数据库集群,那么如果数据库有更新,最多需要
db_update_propagation
时间来同步所有的数据库副本。如果使用PostgreSQL或者单数据库,这个值可以被设置为0
缓存
以下数据会被缓存在内存中,并通过后台任务的机制查询后端数据库进行更新
- Services
- Routes
- Plugins
- Consumers
- Credentials
Konga安装
konga是kong的web可视化管理工具
这里在kong服务器上运行konga
安装Docker-CE
安装过程见官方文档
启动Docker
1 | systemctl enable docker.service |
创建konga数据库
登录PostgreSQL
1 | psql -U postgres |
创建konga数据库
1 | create database konga owner kong; |
授权kong用户拥有konga数据库所有权限
1 | grant all privileges on database konga to kong; |
初始化konga数据库
1 | docker run --rm \ |
输出示例
1 | debug: Preparing database... |
运行konga
共享宿主机网络命名空间
1 | docker run -d \ |
查看监听端口
1 | Active Internet connections (servers and established) |
查看konga日志
1 | docker logs konga |
输出示例
1 | Hook:api_health_checks:process() called |
访问konga
- 使用浏览器访问
http://konga服务器IP:1337
- 第一次打开konga需要注册管理员用户,请保证密码强度足够高
- 在弹出的
New Connection
窗口- 选择
Default
Name
填写kong的名字kong Admin URL
填写http://127.0.0.1:8001
- 选择
Kong维护
检查kong配置文件
在更改配置文件之后,可以通过命令检查配置文件
1 | kong check -v /etc/kong/kong.conf |
输出示例
1 | YYYY/MM/DD HH:mm:ss [verbose] Kong: 1.1.2 |
Kong健康检查
1 | kong health --v |
输出示例
1 | YYYY/MM/DD HH:mm:ss [verbose] Kong: 1.1.2 |
Kong启动
1 | kong start -c /etc/kong/kong.conf --v |
输出示例
1 | YYYY/MM/DD HH:mm:ss [verbose] Kong: 1.1.2 |
Kong关闭
1 | kong stop --v |
输出示例
1 | YYYY/MM/DD HH:mm:ss [verbose] Kong: 1.1.2 |
Kong重启
1 | kong restart -c /etc/kong/kong.conf --v |
输出示例
1 | YYYY/MM/DD HH:mm:ss [verbose] Kong: 1.1.2 |
Kong重载配置
1 | kong reload -c /etc/kong/kong.conf --v |
输出示例
1 | YYYY/MM/DD HH:mm:ss [verbose] Kong: 1.1.2 |
日志轮转
底层是Nginx,因此可以借助logrotate工具做日志轮转
安装logrotate
1 | yum install -y logrotate |
配置logrotate
每天切割日志
保留30天的日志记录
被切割的日志会压缩打包
/etc/logrotate.d/kong
1 | /var/log/kong/*.log { |
测试logrotate配置
1 | logrotate -d /etc/logrotate.d/kong |
输出示例
1 | reading config file /etc/logrotate.d/kong |
kong监控
kong内置了prometheus标准的metrics,默认只有Nginx的信息
开启了prometheus插件之后,可以为每个services都做监控
注意!metrics数据默认只能从Admin端口获取,不能走Proxy端口
因此想让Prometheus获取到kong的metric数据,需要修改
kong.conf
配置文件中admin_listen
的值具体的可以看官方说明
开启插件
1 | curl -X POST http://localhost:8001/plugins --data "name=prometheus" |
访问metric数据
1 | curl -X GET http://localhost:8001/metrics |
输出示例
这里kong是没配置任何服务,因此输出内容很少
1 | HELP kong_datastore_reachable Datastore reachable from Kong, 0 is unreachable |
监控数据可视化
官方已经制作了grafana dashboard来展示Prometheus的数据