以Docker方式安装和配置Kong网关和Konga控制台
文章目录
- 以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
创建容器网络
docker network create kong-net
启动PostgreSQL数据库
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-v $HOME/kong/postgres-data:/var/lib/postgresql/data \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
postgres:9.6
说明:
- Kong支持Cassandra和PostgreSQL两种数据库,这里选用PostgreSQL关系型数据库。
- 挂载卷到本地宿主机的
$HOME/kong/postgres-data
目录。
初始化数据
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
kong:latest kong migrations bootstrap
对Kong Admin API作安全防护
这一步也可以等Kong和Konga启动完成后,再在Konga上配置。
- 创建一个
admin-api
的Service,url为http://127.0.0.1:8001
。- 再创建一个
admin-api
的Route,paths为/admin-api
。- 再添加Key Auth认证插件。
- 再为
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
目录下。
_format_version: "1.1"
services:
- name: admin-api
url: http://127.0.0.1:8001
routes:
- paths:
- /admin-api
plugins:
- name: key-auth
consumers:
- username: admin
keyauth_credentials:
- key: secret
说明:
- 这里采用了Key Authentiaction,设置
key
为secret
,实际使用时需要将该key设置为复杂难以猜测的字符串。 - 另外为了安全起见,实际使用中运行Kong的服务器不要对外开启8001端口,所有访问Kong的流量都通过8000进来。
导入Kong配置:
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-v $HOME/kong/config:/home/kong \
kong:latest kong config db_import /home/kong/kong.yml
启动Kong
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-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 127.0.0.1:8001:8001 \
-p 127.0.0.1:8444:8444 \
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数据库。
docker run -d --name konga-database \
--network=kong-net \
-p 5433:5432 \
-v $HOME/kong/konga/postgres-data:/var/lib/postgresql/data \
-e "POSTGRES_USER=konga" \
-e "POSTGRES_DB=konga" \
-e "POSTGRES_PASSWORD=konga" \
postgres:9.6
说明:
- Konga需要有自己的数据库保存相应配置,而不是直接使用Kong的数据库。
- Konga读取Kong数据时,是通过Kong Admin API去读取,而不是直接读取Kong的数据库。
- 挂载卷到本地宿主机的
$HOME/kong/konga/postgres-data
目录。
初始化数据
docker run --rm \
--network=kong-net \
pantsel/konga:latest \
-c prepare \
-a "postgres" \
-u "postgres://konga:konga@konga-database:5432/konga"
启动Konga
docker run -d --name konga \
--network kong-net \
-e "TOKEN_SECRET=secret123" \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \
-e "NODE_ENV=development" \
-p 1337:1337 \
pantsel/konga
访问http://localhost:1337 来访问Konga。
在Konga上配置
注册admin用户
初次使用Konga前,需要先注册一个Admin用户。
配置Kong连接
在Konga上,打开Connections,选择新建一个Kong连接。
选择连接类型为Kong Auth,输入连接名称、Loopback API URL和API Key。
示例:
Name: `kong-key`
Loopback API URL: `http://192.168.0.100:8000/admin-api/`
API KEy: `secret`
说明:
- 不能在API URL中使用
localhost
或127.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快速安装攻略
还没有评论,来说两句吧...