搬瓦工 VPS 部署 Kong API 网关配置教程
Kong 是全球最流行的开源 API 网关之一,基于 Nginx 和 OpenResty 构建,提供高性能的请求代理、负载均衡、身份认证、限流熔断等功能。在微服务架构中,Kong 充当所有 API 请求的统一入口,帮助开发者集中管理后端服务。本教程将详细介绍如何在搬瓦工 VPS 上使用 Docker 部署 Kong Gateway,包括数据库配置、Admin API 使用、插件管理等核心操作。部署前请确保已安装好 Docker 和 Docker Compose。
一、Kong 架构概述
Kong 的架构分为以下几个核心组件:
- Kong Gateway:核心代理引擎,处理所有入站请求并路由到上游服务。
- Admin API:RESTful 管理接口,监听 8001 端口,用于配置路由、服务和插件。
- PostgreSQL:Kong 的持久化数据库,存储所有配置信息。
- Plugins:插件体系,提供认证、限流、日志、转换等扩展功能。
Kong 支持两种运行模式:DB 模式(使用 PostgreSQL 存储配置)和 DB-less 模式(使用声明式 YAML 配置文件)。本文主要介绍 DB 模式部署。
二、系统要求与准备
- 操作系统:Ubuntu 20.04+ 或 Debian 11+
- 内存:至少 1GB,推荐 2GB 以上
- Docker:已安装 Docker 和 Docker Compose
- 端口:8000(代理)、8443(代理 HTTPS)、8001(Admin API)、8444(Admin HTTPS)
三、使用 Docker Compose 部署 Kong
3.1 创建项目目录
mkdir -p /opt/kong && cd /opt/kong
3.2 编写 docker-compose.yml
创建 docker-compose.yml 文件,包含 Kong 和 PostgreSQL 两个服务:
version: '3.8'
services:
kong-database:
image: postgres:15
container_name: kong-database
restart: always
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong_db_pass_2026
volumes:
- kong_pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 10s
timeout: 5s
retries: 5
kong-migration:
image: kong:3.6
container_name: kong-migration
depends_on:
kong-database:
condition: service_healthy
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong_db_pass_2026
command: kong migrations bootstrap
restart: on-failure
kong:
image: kong:3.6
container_name: kong
restart: always
depends_on:
kong-database:
condition: service_healthy
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong_db_pass_2026
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
KONG_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl
ports:
- "8000:8000"
- "8443:8443"
- "127.0.0.1:8001:8001"
healthcheck:
test: ["CMD", "kong", "health"]
interval: 30s
timeout: 10s
retries: 3
volumes:
kong_pgdata:
注意:Admin API 端口 8001 绑定到 127.0.0.1,防止外部直接访问管理接口。
3.3 启动服务
cd /opt/kong
docker compose up -d
3.4 验证部署
# 检查 Kong 代理端口
curl -i http://localhost:8000
# 检查 Admin API
curl -s http://localhost:8001 | python3 -m json.tool | head -20
# 查看 Kong 版本
curl -s http://localhost:8001 | python3 -c "import sys,json;print(json.load(sys.stdin)['version'])"
四、配置服务与路由
Kong 的核心概念是 Service(上游服务)和 Route(路由规则)。Service 定义了后端服务地址,Route 定义了请求匹配条件。
4.1 添加上游服务
# 添加一个指向后端 API 的 Service
curl -i -X POST http://localhost:8001/services \
--data name=my-api \
--data url=http://192.168.1.100:3000
4.2 添加路由
# 为 Service 创建路由规则
curl -i -X POST http://localhost:8001/services/my-api/routes \
--data name=my-api-route \
--data 'paths[]=/api/v1' \
--data 'methods[]=GET' \
--data 'methods[]=POST'
4.3 测试路由
# 通过 Kong 代理访问后端服务
curl -i http://localhost:8000/api/v1/users
4.4 查看已配置的服务和路由
# 列出所有服务
curl -s http://localhost:8001/services | python3 -m json.tool
# 列出所有路由
curl -s http://localhost:8001/routes | python3 -m json.tool
五、常用插件配置
Kong 的插件系统是其最大优势。以下是几个最常用的插件配置示例。
5.1 Key Authentication(API 密钥认证)
# 为服务启用 key-auth 插件
curl -i -X POST http://localhost:8001/services/my-api/plugins \
--data name=key-auth
# 创建消费者
curl -i -X POST http://localhost:8001/consumers \
--data username=app-user
# 为消费者生成 API Key
curl -i -X POST http://localhost:8001/consumers/app-user/key-auth \
--data key=my-secret-api-key-2026
# 使用 API Key 访问
curl -i http://localhost:8000/api/v1/users \
-H 'apikey: my-secret-api-key-2026'
5.2 Rate Limiting(限流)
# 全局限流:每分钟最多 100 次请求
curl -i -X POST http://localhost:8001/services/my-api/plugins \
--data name=rate-limiting \
--data config.minute=100 \
--data config.policy=local
5.3 CORS(跨域资源共享)
curl -i -X POST http://localhost:8001/services/my-api/plugins \
--data name=cors \
--data 'config.origins[]=https://example.com' \
--data 'config.methods[]=GET' \
--data 'config.methods[]=POST' \
--data config.max_age=3600
5.4 Prometheus 监控
# 启用 Prometheus 插件
curl -i -X POST http://localhost:8001/plugins \
--data name=prometheus
# 访问 Prometheus 指标
curl http://localhost:8001/metrics
六、Konga 管理面板(可选)
Konga 是 Kong 的开源 Web 管理界面。在 docker-compose.yml 中添加:
konga:
image: pantsel/konga:latest
container_name: konga
restart: always
environment:
NODE_ENV: production
TOKEN_SECRET: your_konga_secret_2026
ports:
- "127.0.0.1:1337:1337"
depends_on:
- kong
添加后执行 docker compose up -d 启动 Konga,通过 Nginx 反向代理或 SSH 隧道访问 1337 端口即可使用图形化管理界面。
七、生产环境优化
7.1 Nginx 反向代理配置
建议使用 Nginx 作为前端反向代理,处理 SSL 终止并将请求转发给 Kong:
server {
listen 443 ssl http2;
server_name api.example.com;
ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
7.2 日志与监控
# 查看 Kong 实时日志
docker logs -f kong
# 查看数据库连接状态
curl -s http://localhost:8001/status | python3 -m json.tool
八、常见问题
数据库迁移失败
如果 kong-migration 容器退出且报错,检查 PostgreSQL 是否就绪:
docker logs kong-migration
docker logs kong-database
确认数据库已完全启动后,手动重启迁移容器:
docker compose restart kong-migration
Admin API 无法访问
如果在服务器本机以外无法访问 Admin API,这是正常的安全设计。可以使用 SSH 隧道远程访问:
ssh -L 8001:127.0.0.1:8001 root@your-server-ip
总结
Kong 是功能强大的 API 网关解决方案,适合需要统一管理多个后端服务的微服务架构。通过 Docker 部署简单高效,结合丰富的插件生态可以满足认证、限流、监控等各种需求。如果你需要更轻量的方案,可以参考 APISIX 网关教程。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net。