搬瓦工 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

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。