⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 jianshu.com/p/a2e0bc8f4bfb 「肖金光xjg」欢迎转载,保留摘要,谢谢!


1. 前言

上一文我们对Kong网关的简单介绍,今天我们来搭建Kong的环境。以便于以后对Kong的进一步了解和学习。

2. Kong支持的环境

从上图来看Kong对Linux、MacOS、容器、云 支持的还是比较全面的。

3. 安装Kong

你的机器中必须有Docker环境,这个是前提。。Kong 安装有两种方式一种是没有数据库依赖的DB-less 模式,另一种是with a Database 模式。我们这里使用第二种带Database的模式,因为这种模式功能更全。

3.1 构建Kong的容器网络

首先我们创建一个Docker自定义网络,以允许容器相互发现和通信。在下面的创建命令中kong-net是我们创建的Docker网络名称。

docker network create kong-net

3.2 搭建数据库环境

Kong 目前使用Cassandra(Facebook开源的分布式的NoSQL数据库) 或者PostgreSql,你可以执行以下命令中的一个来选择你的Database。请注意定义网络 --network=kong-net

  • Cassandra容器:

docker run -d --name kong-database \
--network=kong-net \
-p 9042:9042 \
cassandra:3

  • PostgreSQL容器:

docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6

这里有个小问题。如果你使用的是PostgreSQL,想挂载卷持久化数据到宿主机。通过 -v 命令是不好用的。这里推荐你使用 docker volume create 命令来创建一个挂载。

docker volume create kong-volume

然后上面的PostgreSQL就可以通过- v kong-volume:/var/lib/postgresql/data 进行挂载了。

docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
- v kong-volume:/var/lib/postgresql/data
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6

3.3 初始化或者迁移数据库

我们使用docker run --rm来初始化数据库,该命令执行后会退出容器而保留内部的数据卷(volume)。

docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations bootstrap

这个命令我们还是要注意的,一定要跟你声明的网络,数据库类型、host名称一致。同时注意Kong的版本号,本文是在Kong 1.4.x 版本下完成的。

3.4 启动Kong容器

3.3步骤完成初始化或者迁移数据库后,我们就可以启动一个连接到数据库容器的Kong容器,请务必保证你的数据库容器启动状态,同时检查所有的环境参数 -e 是否是你定义的环境。

docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-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:latest

3.5 验证

可通过 curl -i http://localhost:8001/ 或者浏览器调用 http://localhost:8001/ 来验证Kong Admin 是否联通 。

[图片上传失败...(image-6e277e-1577349919300)]

4. 安装Kong 管理UI

Kong 企业版提供了管理UI,开源版本是没有的。但是有很多的开源的管理 UI ,其中比较好用的是Konga。项目地址:https://github.com/pantsel/konga

4.1 Konga 特性

Konga 主要是用 AngularJS 写的,运行于nodejs服务端。具有以下特性:

  • 管理所有Kong Admin API对象。
  • 支持从远程源(数据库,文件,API等)导入使用者。
  • 管理多个Kong节点。使用快照备份,还原和迁移Kong节点。
  • 使用运行状况检查监视节点和API状态。
  • 支持电子邮件和闲置通知。
  • 支持多用户。
  • 易于数据库集成(MySQL,postgresSQL,MongoDB,SQL Server)。

4.2 docker安装Konga

同样我们今天通过Docker来安装Konga。安装步骤同样遵循配置数据库,初始化数据库,启动容器的流程。

4.2.1 Konga数据库容器

上面在4.1特性介绍中我们介绍了Konga支持的数据库类型。这里我们依然使用PostgreSQL。请注意我新定义了挂载卷konga-postgresql

docker volume create konga-postgresql

docker run -d --name konga-database  \
--network=kong-net \
-p 5433:5432 \
-v konga-postgresql:/var/lib/postgresql/data \
-e "POSTGRES_USER=konga" \
-e "POSTGRES_DB=konga" \
postgres:9.6

4.2.2 初始化Konga数据库

初始化 PostgreSQL 数据库。

docker run --rm  --network=kong-net  \
pantsel/konga:latest
-a postgres
-u postgres://konga@konga-database:5432/konga

相关命令解读:

命令 描述 默认
-c 执行的命令,这里我们执行的是prepare -
-a adapter 简写 ,可以是postgres 或者mysql -
-u db url 数据库连接全称 -

到此Konga的数据库环境就搞定了。

4.2.3 环境参数

Konga 还有一些可配置的环境参数:

VAR DESCRIPTION VALUES DEFAULT
HOST The IP address that will be bind by Konga's server - '0.0.0.0'
PORT The port that will be used by Konga's server - 1337
NODE_ENV The environment production,development development
SSL_KEY_PATH If you want to use SSL, this will be the absolute path to the .key file. Both SSL_KEY_PATH & SSL_CRT_PATH must be set. - null
SSL_CRT_PATH If you want to use SSL, this will be the absolute path to the .crt file. Both SSL_KEY_PATH & SSL_CRT_PATH must be set. - null
KONGA_HOOK_TIMEOUT The time in ms that Konga will wait for startup tasks to finish before exiting the process. - 60000
DB_ADAPTER The database that Konga will use. If not set, the localDisk db will be used. mongo,mysql,postgres -
DB_URI The full db connection string. Depends on DB_ADAPTER. If this is set, no other DB related var is needed. - -
DB_HOST If DB_URI is not specified, this is the database host. Depends on DB_ADAPTER. - localhost
DB_PORT If DB_URI is not specified, this is the database port. Depends on DB_ADAPTER. - DB default.
DB_USER If DB_URI is not specified, this is the database user. Depends on DB_ADAPTER. - -
DB_PASSWORD If DB_URI is not specified, this is the database user's password. Depends on DB_ADAPTER. - -
DB_DATABASE If DB_URI is not specified, this is the name of Konga's db. Depends on DB_ADAPTER. - konga_database
DB_PG_SCHEMA If using postgres as a database, this is the schema that will be used. - public
KONGA_LOG_LEVEL The logging level silly,debug,info,warn,error debug on dev environment & warn on prod.
TOKEN_SECRET The secret that will be used to sign JWT tokens issued by Konga - -
NO_AUTH Run Konga without Authentication true/false -
BASE_URL Define a base URL or relative path that Konga will be loaded from. Ex: www.example.com/konga -
KONGA_SEED_USER_DATA_SOURCE_FILE Seed default users on first run. Docs. -
KONGA_SEED_KONG_NODE_DATA_SOURCE_FILE Seed default Kong Admin API connections on first run Docs -

4.2.4 启动Konga

通过以下命令就可以启动Konga容器了

docker run -d -p 1337:1337  \
--network kong-net \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgres://konga@konga-database:5432/konga" \
-e "NODE_ENV=production" \
-e "DB_PASSWORD=konga" \
--name konga \
pantsel/konga

运行完后,如果成功可以通过http://localhost:1337 链接到控制台。通过注册后进入,然后在dashboard面板里面添加Kong的管理Api路径http://yourdomain 。这里添加docker别名 http://kong:8001

文章目录
  1. 1. 1. 前言
  2. 2. 2. Kong支持的环境
  3. 3. 3. 安装Kong
    1. 3.1. 3.1 构建Kong的容器网络
    2. 3.2. 3.2 搭建数据库环境
    3. 3.3. 3.3 初始化或者迁移数据库
    4. 3.4. 3.4 启动Kong容器
    5. 3.5. 3.5 验证
  4. 4. 4. 安装Kong 管理UI
    1. 4.1. 4.1 Konga 特性
    2. 4.2. 4.2 docker安装Konga
      1. 4.2.1. 4.2.1 Konga数据库容器
    3. 4.3. 4.2.2 初始化Konga数据库
    4. 4.4. 4.2.3 环境参数
    5. 4.5. 4.2.4 启动Konga