Kong install by Docker 中文翻译

查看原文

关于如何在 Docker 中使用 Kong 的细节讨论可以在存有 Kong 镜像的 DockerHub 页面上找到。我们也有一个 Docker Compose 模板,内置了群组和可扩展性。

带数据库模式

以下是一个简单例子,展示了如何将一个 kong 容器连接至 Cassandra 或 PostgreSQL。
1. 创建 docker 网络 你需要手动创建一个网络,用于容器之间互相发现和沟通。在本例中,kong-net是网络的名称,你可以随便改个名字。

$ docker network create kong-net
  1. 运行数据库
    期望使用 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
  1. 准备数据库
    用一个临时 Kong 容器运行迁移。
$ 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

在上例中,Cassandra 和 PostgreSQL 均已完成配置,不过,你需要用 Cassandra 或 PostgreSQL 更新 KONG_DATABASE 环境变量。 对于版本低于 0.15 的注意点:版本号低于 0.15 的 kong (最高 0.14),用 up 子命令替换 bootstrap。另外,版本号低于 0.15 的 kong 禁止同时运行迁移。同一时间,只能有一个 kong 节点在运行迁移。这个限制对 kong 0.15,1.0 或更高版本不存在。

  1. 启动 kong
    准备好数据库和运行迁移后,启动一个连接至数据库容器的 kong 容器,就像前文的临时迁移容器一样。
$ 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
  1. 使用 kong
    kong 正在运行:
$ curl -i http://localhost:8001/

通过 5 分钟快速入门 快速学习如何使用 kong。

无数据库模式

无数据库模式 启动 kong 的步骤:
1. 创建 docker 网络
这与 Pg/Cassandra 教程中的一样。我们使用了相同的网络名 kong-net,你也可以改名成你想要的名字。

   $ docker network create kong-net

以无数据库模式运行 kong 并不强制要求此步骤,不过,万一以后你想添加一些其它玩意(例如由 Redis Cluster 驱动的限速插件)时是个不错的伏笔。
2. 创建一个 docker 磁盘 (volume)
本文中,一个 docker 磁盘就是实体主机中的一个目录,它被映射至容器内的一个目录。磁盘有一个名字,本里中,我们将其命名为 kong-vol

docker volume create kong-vol

现在,你可以检查这个磁盘了:

$ docker volume inspect kong-vol

结果类似这个:

[
     {
         "CreatedAt": "2019-05-28T12:40:09Z",
         "Driver": "local",
         "Labels": {},
         "Mountpoint": "/var/lib/docker/volumes/kong-vol/_data",
         "Name": "kong-vol",
         "Options": {},
         "Scope": "local"
     }
 ]

注意条目 MountPoint,下一步我们会用到这个路径。
3. 准备好你的配置文件
相关语法和属性在 声明式配置格式 中介绍。
在其中添加所有需要的条目(Services 服务,Route 路由,Plugins 插件,Consumers 消费者,等等)。
本教程中,我们假定你将其命名为 kong.yml
文件保存在上一部步提到的 MountPoint 路径下。在本例中,存储路径为 /var/lib/docker/volumes/kong-vol/_data/kong.yml

  1. 以无数据库模式启动 kong
    虽然可以通过 KONG_DATABASE=off 以无数据库模式启动 kong,但更常用的方式是通过 KONG_DECLARATIVE_CONFIG 变量将声明式配置文件作为参数传递。为此,我们要让此文件在容器中可见。我们通过 -v 实现操作,它将 kong-vol 映射至容器内的 /usr/local/kong/declarative 目录。
 $ docker run -d --name kong \
     --network=kong-net \
     -v "kong-vol:/usr/local/kong/declarative" \
     -e "KONG_DATABASE=off" \
     -e "KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml" \
     -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
  1. 使用 kong
    Kong 应该已经运行起来,包含了 kong.yml 中添加的条目。
$ curl -i http://localhost:8001/

例如,获取服务列表:

$ curl -i http://localhost:8001/services