
打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
https://docs.konghq.com/gateway/latest/
version: '3.8' services: kong-database: image: postgres:13 container_name: kong-database environment: POSTGRES_USER: kong POSTGRES_DB: kong POSTGRES_PASSWORD: kong ports: - "5432:5432" kong-migrations: image: kong:3.6.0 command: kong migrations bootstrap environment: KONG_DATABASE: postgres KONG_PG_HOST: kong-database KONG_PG_PASSWORD: kong depends_on: - kong-database kong: image: kong:3.6.0 container_name: kong environment: KONG_DATABASE: postgres KONG_PG_HOST: kong-database KONG_PG_PASSWORD: kong KONG_ADMIN_LISTEN: 0.0.0.0:8001 KONG_ADMIN_GUI_URL: http://localhost:8002 KONG_ADMIN_GUI_API_URL: http://localhost:8001 ports: - "8000:8000" # Proxy - "8443:8443" # Proxy SSL - "8001:8001" # Admin API - "8002:8002" # Kong Dashboard depends_on: - kong-database - kong-migrations
啟動指令:
docker-compose up -d
開啟 Dashboard: http://localhost:8002
預設就安裝了很多方便套件,不夠時也能自己做擴充
Port | 用途 | 協定 | 描述 |
---|---|---|---|
8000 | Proxy (HTTP) | HTTP | 外部 API 請求入口 |
8443 | Proxy (HTTPS) | HTTPS | 加密請求入口 |
8001 | Admin API | HTTP | 管理路由、服務、插件等 |
8002 | Kong Dashboard | HTTP | 圖形化管理介面 |
建立服務:
POST http://localhost:8001/services Content-Type: application/json { "name": "my-service", "url": "https://blog.markkulab.net/" }
建立路由:
POST http://localhost:8001/services/my-service/routes Content-Type: application/json { "paths": ["/blog"] }
測試結果:
http://localhost:8000/blog -> https://blog.markkulab.net/
策略名稱 | 說明 | 開源支援 |
---|---|---|
Round-robin | 輪詢分配請求 | ✅ |
Weighted round-robin | 按權重分配請求 | ✅ |
Least-connections | 連線數最少優先 | ❌(需企業版) |
補充:
透過 Consumer 與 Key Auth 搭配 Rate Limiting 插件,可根據用戶等級設定頻率。
等級 | 限制 |
---|---|
基礎會員 | 每分鐘 5 次 |
銅級 | 每秒 5 次 |
銀級 | 每秒 10 次 |
金級 | 每秒 30 次 |
白金級/專案 | 每秒 50 次 |
基本流程:
範例:
curl -i -X POST http://localhost:8001/consumers \ --data "username=gold" curl -i -X POST http://localhost:8001/consumers/gold/key-auth POST /consumers/gold/plugins { "name": "rate-limiting", "config": { "second": 30, "policy": "local" } } ...
API 請求時帶上 key:
GET /your-api apikey: <your-key>
官方實測:單台 8 vCPU 機器,QPS 可達 10~20 萬,延遲低於 10ms。
詳細報告:Kong Gateway Performance Benchmark
更大流量場景建議考慮硬體設備(如 F5)。
┌──────────────┐ │ LoadBalancer │ └─────┬────────┘ ┌────┴───────┐ ┌────▼────┐ ┌────▼────┐ │ Kong #1 │...│ Kong #N │ └────┬────┘ └────┬────┘ └────┬────┬───┘ │ │ ┌─────────────┐ │ PostgreSQL │ └─────────────┘
安裝:
npm install -g k6
測試腳本:
import http from 'k6/http'; import { sleep } from 'k6'; export default function () { http.get('http://localhost:8000/v1/users'); sleep(1); }
執行:
k6 run script.js