以Docker方式安装和配置Kong网关和Konga控制台

Bertha 。 2022-08-30 05:16 469阅读 0赞

文章目录

  • 以Docker方式安装和配置Kong网关和Konga控制台
    • 前言
    • 安装Kong
      • 创建容器网络
      • 启动PostgreSQL数据库
      • 初始化数据
      • 对Kong Admin API作安全防护
      • 启动Kong
    • 安装Konga
      • 启动PostgresSQL数据库
      • 初始化数据
      • 启动Konga
    • 在Konga上配置
      • 注册admin用户
      • 配置Kong连接
    • 参考文档

以Docker方式安装和配置Kong网关和Konga控制台

前言

本文描述了以Docker方式安装和配置Kong网关和Konga控制台。

安装Kong

Kong官方提供的以docker-compose方式安装的docker-compose.yml有问题,所以这里还是以docker方式直接安装。

参考文档:

  • https://docs.konghq.com/install/docker/
  • https://github.com/Kong/docker-kong/tree/master/compose

创建容器网络

  1. docker network create kong-net

启动PostgreSQL数据库

  1. docker run -d --name kong-database \
  2. --network=kong-net \
  3. -p 5432:5432 \
  4. -v $HOME/kong/postgres-data:/var/lib/postgresql/data \
  5. -e "POSTGRES_USER=kong" \
  6. -e "POSTGRES_DB=kong" \
  7. -e "POSTGRES_PASSWORD=kong" \
  8. postgres:9.6

说明:

  • Kong支持Cassandra和PostgreSQL两种数据库,这里选用PostgreSQL关系型数据库。
  • 挂载卷到本地宿主机的$HOME/kong/postgres-data 目录。

初始化数据

  1. docker run --rm \
  2. --network=kong-net \
  3. -e "KONG_DATABASE=postgres" \
  4. -e "KONG_PG_HOST=kong-database" \
  5. -e "KONG_PG_USER=kong" \
  6. -e "KONG_PG_PASSWORD=kong" \
  7. kong:latest kong migrations bootstrap

对Kong Admin API作安全防护

这一步也可以等Kong和Konga启动完成后,再在Konga上配置。

  1. 创建一个admin-api的Service,url为http://127.0.0.1:8001
  2. 再创建一个admin-api 的Route,paths为/admin-api
  3. 再添加Key Auth认证插件。
  4. 再为admin Consumer 创建一个Key Auth credential,并设置apikey 值。

参见:

  • https://docs.konghq.com/gateway-oss/2.5.x/secure-admin-api/

设置不能通过http://<kong-host>:8001 访问Kong Admin API,只能通过<kong-host>:8000 代理后才能访问Kong Admin API,比如http://<kong-host>:8000/admin-api/?apikey=<secret>

将下面kong.yml 文件放到$HOME/kong/config 目录下。

  1. _format_version: "1.1"
  2. services:
  3. - name: admin-api
  4. url: http://127.0.0.1:8001
  5. routes:
  6. - paths:
  7. - /admin-api
  8. plugins:
  9. - name: key-auth
  10. consumers:
  11. - username: admin
  12. keyauth_credentials:
  13. - key: secret

说明:

  • 这里采用了Key Authentiaction,设置keysecret,实际使用时需要将该key设置为复杂难以猜测的字符串。
  • 另外为了安全起见,实际使用中运行Kong的服务器不要对外开启8001端口,所有访问Kong的流量都通过8000进来。

导入Kong配置:

  1. docker run --rm \
  2. --network=kong-net \
  3. -e "KONG_DATABASE=postgres" \
  4. -e "KONG_PG_HOST=kong-database" \
  5. -e "KONG_PG_USER=kong" \
  6. -e "KONG_PG_PASSWORD=kong" \
  7. -v $HOME/kong/config:/home/kong \
  8. kong:latest kong config db_import /home/kong/kong.yml

启动Kong

  1. docker run -d --name kong \
  2. --network=kong-net \
  3. -e "KONG_DATABASE=postgres" \
  4. -e "KONG_PG_HOST=kong-database" \
  5. -e "KONG_PG_USER=kong" \
  6. -e "KONG_PG_PASSWORD=kong" \
  7. -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
  8. -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
  9. -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
  10. -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
  11. -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
  12. -p 8000:8000 \
  13. -p 8443:8443 \
  14. -p 127.0.0.1:8001:8001 \
  15. -p 127.0.0.1:8444:8444 \
  16. kong:latest

可通过以下方式访问Kong Admin API:

  • http://localhost:8001
  • http://localhost:8000/admin-api?apikey=secret
  • http://<kong-host>:8000/admin-api?apikey=secret , 比如 http://192.168.0.100:8000/admin-api?apikey=secret

Tips: 在MacOS上可通过ipconfig getifaddr en0 获取本机IP。

安装Konga

因为Kong Community版本没有Web控制台,为了方便管理,选择安装Konga作为Kong Admin Web控制台。

参见:

  • https://github.com/pantsel/konga
  • https://hub.docker.com/r/pantsel/konga/
  • https://pantsel.github.io/konga/

启动PostgresSQL数据库

启动konga PostgresSQL数据库。

  1. docker run -d --name konga-database \
  2. --network=kong-net \
  3. -p 5433:5432 \
  4. -v $HOME/kong/konga/postgres-data:/var/lib/postgresql/data \
  5. -e "POSTGRES_USER=konga" \
  6. -e "POSTGRES_DB=konga" \
  7. -e "POSTGRES_PASSWORD=konga" \
  8. postgres:9.6

说明:

  • Konga需要有自己的数据库保存相应配置,而不是直接使用Kong的数据库。
  • Konga读取Kong数据时,是通过Kong Admin API去读取,而不是直接读取Kong的数据库。
  • 挂载卷到本地宿主机的$HOME/kong/konga/postgres-data 目录。

初始化数据

  1. docker run --rm \
  2. --network=kong-net \
  3. pantsel/konga:latest \
  4. -c prepare \
  5. -a "postgres" \
  6. -u "postgres://konga:konga@konga-database:5432/konga"

启动Konga

  1. docker run -d --name konga \
  2. --network kong-net \
  3. -e "TOKEN_SECRET=secret123" \
  4. -e "DB_ADAPTER=postgres" \
  5. -e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \
  6. -e "NODE_ENV=development" \
  7. -p 1337:1337 \
  8. pantsel/konga

访问http://localhost:1337 来访问Konga。

在Konga上配置

注册admin用户

初次使用Konga前,需要先注册一个Admin用户。

配置Kong连接

在Konga上,打开Connections,选择新建一个Kong连接。

选择连接类型为Kong Auth,输入连接名称、Loopback API URL和API Key。

示例:

  1. Name: `kong-key`
  2. Loopback API URL: `http://192.168.0.100:8000/admin-api/`
  3. API KEy: `secret`

说明:

  • 不能在API URL中使用localhost127.0.0.1 ,不然会无法激活连接。参见:https://github.com/pantsel/konga/issues/136

创建连接后,点击Active按钮,激活Kong连接。

激活连接后可以看到Konga已经可以通过Kong Admin API读取到Kong的相关数据。

参考文档

  • How to setup Konga using Docker
  • Managing microservices and APIs with Kong and Konga
  • Setup (Kong + Konga) as API Gateway
  • https://docs.konghq.com/gateway-oss/2.5.x/secure-admin-api/
  • 云原生微服务网关 Kong 和Kong 管理UI Konga快速安装攻略

发表评论

表情:
评论列表 (有 0 条评论,469人围观)

还没有评论,来说两句吧...

相关阅读

    相关 KONGKONGA部署及配置

    个人理解,仅供参考: 首先,kong+konga除去其他高级功能,个人觉得就是把nginx,变成可以页面配置的了。比如,配置的router,service就是反向代理,配置