Kong gateway 之docker-compose 部署

1,410 阅读2分钟

Kong Gateway 官网仅仅提供了 docker 部署方式,本文提供一种docker-compose 方式部署Kong。 官方支持使用两种数据库CassandraPostgreSQL, 本次使用PostgreSQL作为Kong Gateway 的数据库, 管理UI界面使用Konga.

1. 文件准备

  1. 创建docker network
docker network create kong-net
  1. 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
  1. 初始化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
  1. 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

  1. 提供一个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();
    }
}
  1. konga 配置service

image.png 3. konga 配置router

image.png

image.png 其中Path handling 有两种模式:

  • V0 - 其主要实现的为: 请求 /user => 路由的 path /a 则最后会被组合为 /a/user
  • V1 - 其主要实现为: 请求 /user => 路由的 path /a 则最后被组合为 /auser

请求验证:

image.png

  1. konga 配置rate-limiting实现请求数量限流

image.png

image.png

image.png

如图: Router 配置请求限流, 每秒1次, 在浏览器连续点击两次请求,第一次成功返回结果, 第二次如下

image.png

  1. konga 配置http-log实现请求日志记录
    1. 提供日志记录接口:
@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();
    }
}
  1. 配置插件

image.png

image.png

image.png 3. 验证结果 请求接口, 查看日志服务器打印结果

image.png

总结:

以上就是kong gateway 的docker-compose 部署流程以及简单配置。详细使用将在后续流程持续更新,欢迎关注查看后续文章。。。