别再手动配置了!用Docker Compose 5分钟搞定Kong网关+Konga管理面板(保姆级教程)
5分钟极速部署:用Docker Compose搭建Kong网关与Konga可视化平台
当你需要快速搭建一个API网关环境时,手动配置数据库、安装依赖、调试参数的过程往往令人望而生畏。特别是对于刚接触Kong的开发者,面对纯命令行操作和复杂的配置项,很容易陷入"从入门到放弃"的困境。本文将带你用Docker Compose一键部署包含Kong网关和Konga管理面板的完整环境,无需手动配置即可获得生产级API管理能力。
1. 为什么选择Docker Compose部署Kong
传统部署方式需要分别安装PostgreSQL数据库、Kong服务以及Konga界面,过程中可能遇到版本兼容性、依赖冲突等问题。而Docker Compose方案将所有组件容器化,通过声明式配置实现:
- 环境隔离:每个服务运行在独立容器中,避免污染主机环境
- 版本固化:精确控制各组件版本,确保稳定性
- 一键启停:单个命令即可创建或销毁整个环境
- 配置即代码:docker-compose.yml文件可纳入版本控制
以下是最简化的部署架构:
┌───────────────────────────────────────────────┐
│ Docker Host │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Kong │ │ Konga │ │
│ │ (3.3.0) │ │ (latest) │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ ┌──────▼──────┐ │ │
│ │ PostgreSQL │ │ │
│ │ (13-alpine)│ │ │
│ └─────────────┘ │ │
│ │ │
└────────────────────────────┼─────────────────┘
│
┌──────▼──────┐
│ 用户访问 │
└─────────────┘
2. 编写docker-compose.yml文件
创建名为kong-konga的目录,新建docker-compose.yml文件:
version: '3.8'
services:
postgres:
image: postgres:13-alpine
environment:
POSTGRES_USER: kong
POSTGRES_PASSWORD: kong
POSTGRES_DB: kong
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U kong"]
interval: 5s
timeout: 5s
retries: 5
kong:
image: kong:3.3.0
depends_on:
postgres:
condition: service_healthy
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: postgres
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: 0.0.0.0:8001 reuseport backlog=16384, 0.0.0.0:8444 http2 ssl reuseport backlog=16384
ports:
- "8000:8000" # 代理端口
- "8001:8001" # 管理API
- "8443:8443" # HTTPS代理
- "8444:8444" # 管理API HTTPS
volumes:
- ./plugins:/usr/local/share/lua/5.1/kong/plugins
healthcheck:
test: ["CMD", "kong", "health"]
interval: 10s
timeout: 10s
retries: 10
konga:
image: pantsel/konga:latest
depends_on:
kong:
condition: service_healthy
environment:
TOKEN_SECRET: secure_token_here
DB_ADAPTER: postgres
DB_HOST: postgres
DB_USER: kong
DB_PASSWORD: kong
DB_DATABASE: kong
KONGA_HOOK_TIMEOUT: 120000
ports:
- "1337:1337"
restart: unless-stopped
volumes:
postgres_data:
关键配置说明:
-
PostgreSQL服务:
- 使用轻量级alpine镜像
- 通过healthcheck确保数据库就绪后才启动Kong
- 数据卷持久化存储
-
Kong服务:
depends_on确保数据库健康后才启动- 开放四个核心端口:
- 8000:HTTP代理端口
- 8001:管理API端口
- 8443/8444:对应HTTPS端口
- 预留plugins目录用于自定义插件
-
Konga服务:
- 与Kong共享PostgreSQL实例
- 设置较长的HOOK_TIMEOUT避免操作超时
- 1337为默认Web访问端口
提示:生产环境应替换所有默认密码,并配置TLS证书
3. 启动与验证服务
在项目目录下执行:
# 启动所有服务(-d表示后台运行)
docker-compose up -d
# 查看服务状态
docker-compose ps
预期输出应显示三个服务状态均为running:
Name Command State Ports
-------------------------------------------------------------------------------------------------------------
kong-konga_kong_1 /docker-entrypoint.sh kong ... Up 0.0.0.0:8000-8001->8000-8001/tcp, 0.0.0.0:8443-8444->8443-8444/tcp
kong-konga_konga_1 /app/start.sh Up 0.0.0.0:1337->1337/tcp
kong-konga_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp
验证Kong管理API:
curl -i http://localhost:8001/
应返回200状态码和Kong版本信息。
4. 配置Konga管理界面
访问http://localhost:1337完成初始化:
-
注册管理员账户:
- 填写邮箱、用户名和密码
- 首次登录后进入设置向导
-
连接Kong管理API:
- 选择"Connect to Kong Admin API"
- 名称:Local Kong
- Kong Admin URL:http://kong:8001
- 不启用JWT认证
-
初始化仪表盘:
- 创建成功后进入Konga主界面
- 左侧菜单包含Services、Routes、Consumers等管理项
常见问题排查:
-
Konga无法连接Kong:
# 检查Kong容器日志 docker-compose logs kong # 测试容器间连通性 docker-compose exec konga curl http://kong:8001 -
数据库迁移失败:
# 手动执行迁移 docker-compose exec kong kong migrations bootstrap
5. 通过Konga管理API网关
5.1 创建第一个Service
-
导航至"Services" → "Add New Service"
-
填写基础信息:
- Name:example-service
- Protocol:http
- Host:mockbin.org
- Port:80
-
点击"Submit"保存
5.2 添加路由规则
-
在刚创建的Service详情页点击"Add Route"
-
配置路由规则:
- Paths:/mock
- 其他保持默认
-
测试路由:
curl -i http://localhost:8000/mock/request应返回Mockbin的响应内容
5.3 启用限流插件
-
在Service详情页点击"Add Plugin"
-
选择"Rate Limiting"插件
-
配置参数:
- Minute:10 (每分钟10次请求)
- Policy:local (使用内存计数器)
-
测试限流:
# 快速发起11次请求 for i in {1..11}; do curl -I http://localhost:8000/mock/request; done第11次请求应返回429状态码
6. 生产环境优化建议
6.1 安全加固配置
在docker-compose.yml中增加:
environment:
KONG_ADMIN_GUI_AUTH: basic-auth
KONG_ADMIN_GUI_AUTH_CONF: '{"admin":"$2a$10$N9qo8uLOickgx2ZMRZoMy.MrqopwcX6VYjX7U1qZQeAYn3vlzCQZO"}'
生成密码哈希:
docker run --rm kong:3.3.0 kong hash-password YourSecurePassword
6.2 性能调优参数
environment:
KONG_PROXY_LISTEN: 0.0.0.0:8000 reuseport backlog=16384
KONG_NGINX_WORKER_PROCESSES: "auto"
KONG_NGINX_WORKER_CONNECTIONS: "4096"
KONG_DB_CACHE_WARMUP_ENTITIES: "on"
6.3 日志与监控集成
ELK日志配置示例:
environment:
KONG_LOG_LEVEL: info
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_PLUGINS: bundled, prometheus
在Konga中启用Prometheus插件后,可通过http://localhost:8001/metrics获取监控数据
更多推荐



所有评论(0)