Mark Ku's Blog
首頁 關於我
打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
Mark Ku
June 18, 2025
1 min

Kong 是什麼?

Kong 是一套基於 Nginx 和 OpenResty 的高效能 API Gateway,核心以 Lua 編寫,具備反向代理、API 管理與套件管理及擴充的應用,同時也繼承了Nginx 優點及特性,Kong 主要採用的資料是PostgreSQL 來儲存相關設定,也支援無資料庫(DB-less)模式,本身就提供Restful api 管理,非常適合 API 單一入口及API訂閱的場景。

Kong 可以做什麼?

  • 負載平衡(反向代理)
  • 統一 API 進入點(API Gateway)
  • 支援多環境與版本部署
  • API 使用統計與計費
  • 安全驗證(API Key、JWT、OAuth2 等)

核心特性

  • 管理與部署 RESTful API 變得簡單高效
  • 支援 API 版本控管與權限驗證
  • 可依使用者等級設定請求限制(Rate Limiting)
  • 變更設定時,基於 Nginx 架構無須重啟服務
  • 強大的插件機制,可擴充功能或自訂開發

官方文件

https://docs.konghq.com/gateway/latest/


類似工具

  • Apache APISIX
  • Tyk
  • NGINX Plus(商用)

佈署 Kong Api Gateway(Docker with db 版)

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

Dashboard
Dashboard

預設就安裝了很多方便套件,不夠時也能自己做擴充

Plugins
Plugins


常用 Port 說明

Port用途協定描述
8000Proxy (HTTP)HTTP外部 API 請求入口
8443Proxy (HTTPS)HTTPS加密請求入口
8001Admin APIHTTP管理路由、服務、插件等
8002Kong DashboardHTTP圖形化管理介面

快速測試 - 建立反向代理

建立服務:

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連線數最少優先❌(需企業版)

補充

  • 支援健康檢查,自動排除故障節點
  • 支援 DNS 動態發現 target

請求速率限制(Rate Limiting)

透過 Consumer 與 Key Auth 搭配 Rate Limiting 插件,可根據用戶等級設定頻率。

等級限制
基礎會員每分鐘 5 次
銅級每秒 5 次
銀級每秒 10 次
金級每秒 30 次
白金級/專案每秒 50 次

基本流程:

  1. 建立 Consumer
  2. 建立 key-auth 憑證
  3. 套用 rate-limiting 插件

範例:

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)


高可用架構(HA)

     ┌──────────────┐
     │ LoadBalancer │
     └─────┬────────┘
      ┌────┴───────┐
 ┌────▼────┐   ┌────▼────┐
 │ Kong #1 │...│ Kong #N │
 └────┬────┘   └────┬────┘
      └────┬────┬───┘
           │    │
       ┌─────────────┐
       │ PostgreSQL  │
       └─────────────┘

壓測工具:K6

安裝:

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

導入評估建議

  1. API 管理需求
    • API 數量、類型(REST、GraphQL、gRPC)
    • 是否需版本控制、文件生成
  2. 安全需求
    • 認證方式(OAuth2、JWT、API Key)
    • 權限控管與法規遵循(如 GDPR、PCI)
  3. 流量需求
    • 是否需負載平衡
    • 速率限制與流量整形

延伸閱讀與資源


Tags

kongapi gatewayreverse proxyrate limitingdocker
Mark Ku

Mark Ku

Software Developer

10年以上豐富網站開發經驗,開發過各種網站,電子商務、平台網站、直播系統、POS系統、SEO 優化、金流串接、AI 串接,Infra 出身,帶過幾次團隊,也加入過大團隊一起開發。

Expertise

前端(React)
後端(C#)
網路管理
DevOps
溝通
領導

Social Media

facebook github website

Quick Links

關於我

Social Media