Kong简介
Kong是一款基于Nginx_Lua模块写的高可用,易扩展由Mashape公司开源的API Gateway项目。由于Kong是基于Nginx的,所以可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。
docker方式安装Kong(使用数据库)
1.拉取一个Kong镜像和PostgreSQL数据库
docker pull kong:1.5.1
docker pull postgres:9.6
2.创建一个Docker网络
kong-net为自定义的网络名称,可以使用任何名称,使容器能够发现彼此并进行通信
docker network create kong-net
3.启动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
4.初始化数据库(迁移数据)
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:1.5.1 kong migrations bootstrap
5.运行Kong
Http访问端口:8000
Https访问端口:8443
Http管理端口:8001
Https管理端口:8444
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 127.0.0.1:8001:8001 \
-p 127.0.0.1:8444:8444 \
kong:1.5.1
Kong的使用
以下是一个简单例子,更多API使用参考官网https://docs.konghq.com/getting-started-guide/2.1.x/overview/
upstream helloword{
server 192.168.234.131:8080 weight=100;
}
server{
location /hello {
proxy_pass http://helloword;
}
}
配置upstream
curl -X POST http://localhost:8001/upstreams \
--data "name=helloword"
配置target
curl -X POST http://localhost:8001/upstreams/helloword/targets \
--data "target=192.168.234.131:8080" --data "weight=100"
配置service
curl -i -X POST http://localhost:8001/services \
--data "name=example_service" \
--data "host=helloword"
配置route
curl -i -X POST http://localhost:8001/services/example_service/routes \
--data "paths[]=/hello" \
--data "service.id=206fa8fc-f89c-40eb-ab4c-3c712a0023b0"
service.id与配置service的id对应
kong-dashboard
下载镜像
docker pull pgbi/kong-dashboard
相容性矩阵
Kong-Dashboard versions | Kong versions | Node versions |
---|---|---|
1.x.x | >= 0.6, < 0.10 | |
2.x.x | 0.10 | |
3.0.x | >= 0.9, <0.12 | >= 6.0.0 |
3.1.x, 3.2.x | >= 0.9, <0.13 | >= 6.0.0 |
3.3.x, 3.4.x | >= 0.9, <0.14 | >= 6.0.0 |
3.5.x | >= 0.9, <0.15 | >= 6.0.0 |
3.6.x | >= 0.9, <2.0.0 | >= 6.0.0 |
Kong Dashboard 3.3.0仅与Kong 0.13部分兼容。它不支持Kong 0.13中引入的新服务和路由对象。
运行
docker run --rm -p 8080:8080 pgbi/kong-dashboard start \
--kong-url http://kong:8001
--basic-auth user=password //设置你的用户名和密码
--rm表示临时启动,生产环境中可以去掉。
如果出现以下错误:
原因:连接拒绝错误的是因为2个容器(kong 和 kong-dashboard)在默认桥接网络上,这不会执行DNS解析。
需要创建一个用户定义的桥接网络并将这两个容器添加到该网络 。而在上面安装时已经创建该网络,所以执行步骤3就可以,如果安装没有创建该网络,执行以下步骤123
1.创建桥梁网络
docker network create kong-net
2.将Kong容器添加到它
docker network connect kong-net kong
3.运行kong-dashboard时提供网络信息
docker run --rm --network kong-net -d -p 8080:8080 \
pgbi/kong-dashboard start \
--kong-url http://kong:8001 --basic-auth user=password
参考https://github.com/PGBI/kong-dashboard/issues/156
启动后通过浏览器访问,填写用户名密码即可使用。
Konga
兼容性
从0.14.0开始,Konga仅与Kong 1.x兼容
具体安装过程参考dockerHub https://hub.docker.com/r/pantsel/konga
1.下载镜像
docker pull pantsel/konga
2.初始化Konga数据库
docker run --rm --network=kong-net pantsel/konga:latest -c prepare \
-a postgres \
-u postgres://用户名:密码@ip:port/konga
docker run --rm --network=kong-net pantsel/konga:latest -c prepare \
-a postgres \
-u postgres://kong:kong@172.18.0.2:5432/konga
或
docker run --rm --network=kong-net pantsel/konga:latest -c prepare \
-a postgres \
-u postgres://kong:kong@kong-database:5432/konga
以上的ip172.18.0.2是postgreSQL的ip地址,可以使用docker inspect 容器ID
命令查看,也可以使用postgresql的自定义的容器名kong-database,否则会出现错误:
第二种可能出现的错误
问题出在postgres的版本上,使用postgres:9.6,参考https://github.com/pantsel/konga/issues/462
成功出现以下信息:
3.启动Konga
docker run -p 1337:1337
--network {{kong-network}} \ // optional
-e "TOKEN_SECRET={{somerandomstring}}" \
-e "DB_ADAPTER=the-name-of-the-adapter" \ // 'mongo','postgres','sqlserver' or 'mysql'
-e "DB_HOST=your-db-hostname" \
-e "DB_PORT=your-db-port" \ // Defaults to the default db port
-e "DB_USER=your-db-user" \ // Omit if not relevant
-e "DB_PASSWORD=your-db-password" \ // Omit if not relevant
-e "DB_DATABASE=your-db-name" \ // Defaults to 'konga_database'
-e "DB_PG_SCHEMA=my-schema"\ // Optionally define a schema when integrating with prostgres
-e "NODE_ENV=production" \ // or 'development' | defaults to 'development'
--name konga \
pantsel/konga
docker run -d -p 1337:1337 \
--network kong-net \
-e "TOKEN_SECRET=P@sswOrd" \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgres://kong:kong@kong-database:5432/konga" \
-e "NODE_ENV=production" \
--name konga \
pantsel/konga
注意细节:DB_URI此处使用的是容器名kong-database,也可以换成ip。
之后就可以在浏览器中访问了。