介绍
Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,它与nginx一样,所以它可以水平扩展多个Kong服务器,还可以使用Lua进行自定义构建,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。
kong的组件
kong主要有三个组件:
Server: 基于nginx的服务端,用来路由请求与管理网关
Cassandra/PostgreSQL: Kong用来存储数据的数据库
Dashboard(可选): 用来管理空的kong的WebUI,通过发送resetful请求到server端.对kong 进行管理
基于Docker安装
1 创建Docker网络
docker network create kong-net
2 创建数据库
#kong支持2个中数据库,选择其中一个即可
mkdir /data/postgresql #创建数据目录
chmod 777 /data/postgresql #授权目录
docker pull postgres:9.6
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-v /data/postgresql:/var/lib/postgresql/data \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
--restart=always \
postgres:9.6
3 初始化数据库
docker pull kong:latest
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
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 \
--restart=always \
kong:latest
5 安装dashboard
kong的dashboard主要有2个选择:
1 pdadmin 该dashboard仅支持2.0以下的kong,而且功能有限
2 konga 支持最新版的kong,功能比较强大,配置也比较简单.
5.1 初始化dashboard的数据库(konga)
docker pull pantsel/konga
#konga支持多种数据库,利用刚刚创建的postgres数据库,记得要更换成postgresIP
docker run --rm pantsel/konga -c prepare -a postgres -u postgresql://kong:kong@192.168.2.143:5432/konga
5.2 运行dashboard
#记得要更换成postgresIP
docker run -d -p 1337:1337 \
--network kong-net \
-e "TOKEN_SECRET=kong" \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgresql://kong:kong@192.168.2.143:5432/konga" \
-e "NODE_ENV=production" \
--restart=always \
--name konga pantsel/konga
6 Kong的重要的三个概念
我们先看一下,在使用Nginx配置反向代理是的结构
upstream xx_name {
server 192.168.1.1:8080 weight=100;
}
server {
listen 80;
server_name: xx.com;
location /path{
proxy_pass http://xx_name;
}
}
Kong是基于Nginx的,所以以下几个概念,都是对应以上的结构.
6.1 upstream
用来定义上图结构中的upstream模块
6.1.1 target
upstream中的后端服务器,既上面结构中的: server 192.168.1.1:8080
6.2 service
用来定义上图结构中的 server模块
6.2.3 route
用来定义 server模块中的: location
7 Kong的常用插件
7.1 限流
7.2 认证
7.2.1 Basic Authentication
7.2.2 Key Authentication
基于APIKey的方式验证,所有请求需要携带以下定义的可以,放置Header中或者QueryString中
7.3 监控
7.3.1 基于Docker 安装Prometheus
#下载镜像
docker pull prometheus
#启动镜像
docker run --name prometheus -d -p 9090:9090 --restart=always prom/prometheus
#进入镜像内部
docker exec -it prometheus sh
#编辑配置文件
vi /etc/prometheus/prometheus.yml
#最后一行
- targets:['kong IP:端口']
#退出容器并重启该重启
docker stop prometheus
docker start prometheus
7.3.2 基于Docker安装Grafana
安装完成以后,登录grafana,新添加数据源:Prometheus
Url为我们使用Docker安装的Prometheus的地址
导入Grafana模板: 7424