Kong 可以灵活地部署在用户的局域网中,其同样支持多种部署方式,官方在 DockerHub 上提供了 Docker 镜像,方便用户快速实现 Kong 的 Docker 化部署。部署步骤如下。
配置样例如下:
- # 安装yum工具
- yum install -y yum-utils
- # 安装Docker官方yum源
- yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- # 安装Docker及docker-compose应用
- yum install -y docker-ce docker-compose
- # 设置Docker服务开机自启动
- systemctl enable docker
- # 启动Docker服务
- systemctl start docker
Kong 将 Nginx 的配置存储在外部数据库,可以通过自带的数据库初始化命令自动完成数据库表结构的创建和初始数据的添加,为方便一次性创建,该脚本会启动独立的容器 kong-migrations 来完成此项操作。此处脚本创建的 Kong 规划为主管理服务器,管理接口不提供外部访问,仅提供在同一虚拟网络内的 Web 工具的访问,因此设置为固定 IP。
Docker-compose 脚本内容如下:
- version: '2.1'
- # 创建名为kong-net的虚拟网络
- networks:
- kong-net:
- ipam:
- config:
- - subnet: 172.19.0.0/24
- gateway: 172.19.0.1
- name: kong-net
- services:
- # 创建用于数据库初始化的独立容器
- kong-migrations:
- hostname: kong-migrations
- container_name: kong-migrations
- image: kong:latest
- command: kong migrations bootstrap
- depends_on:
- db:
- condition: service_healthy
- env_file:
- - .env_kong
- links:
- - db:db
- networks:
- - kong-net
- restart: on-failure
- # 创建Kong容器
- kong:
- hostname: kong-nginx
- container_name: kong-nginx
- image: kong:latest
- depends_on:
- db:
- condition: service_healthy
- env_file:
- - .env_kong
- networks:
- kong-net:
- ipv4_address: 172.19.0.201
- ports:
- - "8000:8000/tcp" # 用于监听HTTP协议的消费接口,实现用户请求的接入
- # - "8001:8001/tcp" # 用于监听HTTP协议的管理接口,此处关闭外部访问
- - "8443:8443/tcp" # 用于监听HTTPS协议的消费接口,实现用户请求的接入
- # - "8444:8444/tcp" # 用于监听HTTPS协议的管理接口,此处关闭外部访问
- # network_mode: host # 在高并发应用场景下,可以将Docker容器以host模式运行,
- # 提高传输效率
- healthcheck:
- test: ["CMD", "kong", "health"]
- interval: 10s
- timeout: 10s
- retries: 10
- restart: on-failure
- # 创建Kong的postgreSQL数据库容器
- db:
- hostname: kong-postgres
- container_name: kong-postgres
- image: postgres:9.5
- env_file:
- - .env_postgress
- healthcheck:
- test: ["CMD", "pg_isready", "-U", "kong"]
- interval: 30s
- timeout: 30s
- retries: 3
- restart: on-failure
- stdin_open: true
- tty: true
- networks:
- - kong-net
- ipv4_address: 172.19.0.202
- volumes:
- - /opt/data/apps/kong/postgresql/data:/var/lib/postgresql/data
环境变量文件内容如下:
- cat>.env_kong<<EOF
- KONG_ADMIN_ACCESS_LOG=/dev/stdout
- KONG_ADMIN_ERROR_LOG=/dev/stderr
- KONG_ADMIN_LISTEN=0.0.0.0:8001
- KONG_CASSANDRA_CONTACT_POINTS=db
- KONG_PROXY_ACCESS_LOG=/dev/stdout
- KONG_PROXY_ERROR_LOG=/dev/stderr
- KONG_DATABASE=postgres
- KONG_PG_DATABASE=kong-data
- KONG_PG_HOST=db
- KONG_PG_PASSWORD=kong
- KONG_PG_USER=kong
- EOF
-
- cat>.env_postgress<<EOF
- POSTGRES_DB=kong-data
- POSTGRES_PASSWORD=kong
- POSTGRES_USER=kong
- EOF
Konga 是基于 Node.js 开发的 Kong 开源管理工具,它不仅提供了 Kong 管理接口的全部操作对象的管理功能,同时还可以对多个 Kong 节点进行管理,包括 Kong 节点的备份、还原、健康监测等,还提供了多用户的功能,让 Kong 的日常管理操作可以更加方便灵活。
Konga 通过数据存储操作用户及 Kong 管理相关的配置,此处与 Kong 共用 PostgreSQL 数据库,可通过如下命令创建并初始化数据库实例 konga:
- docker run --network kong-net --rm pantsel/konga -c prepare -a postgres -u postgresql://kong:kong@172.19.0.202:5432/konga
编写 docker-compose 脚本,脚本内容如下:
- version: '2.1'
- services:
- # 创建konga容器
- konga:
- hostname: konga
- container_name: konga
- image: pantsel/konga
- env_file:
- - .env_konga
- external_links:
- - kong-postgres:db
- ports:
- - "1337:1337/tcp"
- networks:
- - kong-net
- # 加入名为kong-net的虚拟网络
- networks:
- kong-net:
- external: true
- name: kong-net
环境变量文件内容如下:
- cat>.env_konga<<EOF
- DB_ADAPTER=postgres
- DB_HOST=db
- DB_USER=kong
- DB_PASSWORD=kong
- DB_DATABASE=konga
- NODE_ENV=production
- EOF
Kong 集群只需在其他服务器部署 Kong 节点并连接到同一个 PostgreSQL 数据库即可,Kong 为避免频繁地进行数据库连接,会将数据库的内容缓存在本机内存中,管理接口修改数据库配置后,Kong 的配置会在同步周期下一次开始时生效,同步周期可以通过配置文件 kong.conf 中的配置参数 db_update_frequency 进行修改,默认时间为 5 秒。