一、概述
Nginx、OpenRestry、Kong这三个项目紧密相连:
- Nginx是模块化设计的反向代理软件,C语言开发;
- OpenResty是以Nginx为核心的Web开发平台,可以解析执行Lua脚本;
- 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
概念术语
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好用
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,然后登陆。
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
三、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
创建target
创建service
创建route
测试:
插件的使用
准入插件
处理请求的插件
限流的插件
** Prometheus插件**
认证插件
在路由下面添加插件