Kong Gateway 官网仅仅提供了 docker 部署方式,本文提供一种
docker-compose
方式部署Kong。 官方支持使用两种数据库Cassandra
或PostgreSQL
, 本次使用PostgreSQL作为Kong Gateway 的数据库, 管理UI界面使用Konga.
1. 文件准备
- 创建docker network
docker network create kong-net
- postgresql-compose.yml 文件
version: "3.7"
services:
# 数据库服务
kong-database:
image: postgres:9.6
ports:
- "5432:5432"
environment:
# 访问数据库的用户
- POSTGRES_USER=kong
- POSTGRES_DB=kong
- POSTGRES_PASSWORD=kongpass
networks:
- kong-net
volumes:
# 数据库持久化目录
- ./docker-data/postgresql/postgresql:/var/lib/postgresql/data
networks:
kong-net:
external: true
- 初始化kong 数据库
docker run --rm --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_PASSWORD=kongpass" kong/kong-gateway:2.8.1.0-alpine kong migrations bootstrap
- kong-compose.yml 文件
version: "3.7"
services:
kong-gateway:
# 镜像版本,目前最新
image: kong/kong-gateway:2.8.1.0-alpine
container_name: kong-gateway
environment:
# 数据持久化方式,使用postgres数据库
- "KONG_DATABASE=postgres"
# 数据库容器名称,Kong连接数据时使用些名称
- "KONG_PG_HOST=kong-database"
- "KONG_PG_USER=kong"
- "KONG_PG_PASSWORD=kongpass"
# 数据库名称
- "KONG_CASSANDRA_CONTACT_POINTS=kong-database"
# 日志记录目录
- "KONG_PROXY_ACCESS_LOG=/dev/stdout"
- "KONG_ADMIN_ACCESS_LOG=/dev/stdout"
- "KONG_PROXY_ERROR_LOG=/dev/stderr"
- "KONG_ADMIN_ERROR_LOG=/dev/stderr"
# 暴露的端口
- "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl"
- "KONG_ADMIN_GUI_URL=http://localhost:8002"
ports:
- 8000:8000
- 8443:8443
- 8001:8001
- 8444:8444
- 8002:8002
- 8445:8445
- 8003:8003
- 8004:8004
# 使用docker网络
networks:
- kong-net
# 依赖数据库服务
depends_on:
- kong-database
# kong 管理界面
konga:
image: pantsel/konga
container_name: konga
environment:
- "TOKEN_SECRET=51liveup.cn"
# 初始化使用development, 去初始化数据表, 正式使用production
- "NODE_ENV=development"
- "DB_ADAPTER=postgres"
- "DB_HOST=kong-database"
- "DB_PORT=5432"
- "DB_USER=kong"
- "DB_PASSWORD=kongpass"
- "DB_DATABASE=konga-db"
ports:
- 8080:1337
networks:
- kong-net
depends_on:
- kong-database
networks:
kong-net:
external: true
2. 启动
- docker-compose -f postgresql-compose.yml up -d
- 初始化kong 数据库
- docker-compose -f kong-compose.yml up -d
3. 使用konga 配置一个网关demo
- 提供一个java 服务
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/re")
public String test(){
return "test request "+ System.currentTimeMillis();
}
@GetMapping("/update")
public String test2(){
return "update request "+ System.currentTimeMillis();
}
}
- konga 配置service
3. konga 配置router
其中Path handling 有两种模式:
- V0 - 其主要实现的为: 请求 /user => 路由的 path /a 则最后会被组合为 /a/user
- V1 - 其主要实现为: 请求 /user => 路由的 path /a 则最后被组合为 /auser
请求验证:
- konga 配置rate-limiting实现请求数量限流
如图: Router 配置请求限流, 每秒1次, 在浏览器连续点击两次请求,第一次成功返回结果, 第二次如下
- konga 配置http-log实现请求日志记录
- 提供日志记录接口:
@Slf4j
@RestController
@RequestMapping("/kong")
public class KongLogController {
@PostMapping("/log")
public String test(HttpServletRequest httpRequest){
String read = null;
try {
read = IoUtil.read(httpRequest.getInputStream(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
log.info(read);
return "log request "+ System.currentTimeMillis();
}
}
- 配置插件
3. 验证结果
请求接口, 查看日志服务器打印结果
总结:
以上就是kong gateway 的docker-compose 部署流程以及简单配置。详细使用将在后续流程持续更新,欢迎关注查看后续文章。。。