概要
KongはOpenResty(Nginx + Luaモジュール)を基盤とした高可用性・拡張性の高いAPIゲートウェイソリューションです。NGINXとApache CassandraまたはPostgreSQLで構築され、RESTful APIによる設定管理を提供します。水平スケーリングが可能で、複数のKongサーバーにリクエストを分散処理できます。
主要コンポーネント
- Kong Server:NGINXベースのAPIリクエスト処理サーバ
- Cassandra/PostgreSQL:操作データストレージ
- Konga:Web管理インターフェース
機能特性
- 高度なルーティングと負荷分散
- JWT/Basic認証によるAPI保護
- SSL/TLS終端とL4/L7トラフィック処理
- プラグインシステムによる機能拡張
- Kubernetesネイティブサポート
Docker環境構築
Docker Composeを使用した効率的な導入方法:
# Docker Composeインストール
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
コンポーザ定義
# docker-compose.yml
version: '3.8'
services:
db-service:
image: postgres:14
environment:
POSTGRES_USER: kong_admin
POSTGRES_PASSWORD: secure_pass
POSTGRES_DB: kong_db
networks:
- gateway-network
kong-setup:
image: kong:3.4
command: "kong migrations bootstrap"
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: db-service
KONG_PG_USER: kong_admin
KONG_PG_PASSWORD: secure_pass
depends_on:
- db-service
networks:
- gateway-network
gateway:
image: kong:3.4
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: db-service
KONG_PG_USER: kong_admin
KONG_PG_PASSWORD: secure_pass
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_ADMIN_ERROR_LOG: /dev/stderr
ports:
- "8080:8000"
- "8443:8443"
- "8001:8001"
healthcheck:
test: ["CMD", "kong", "health"]
interval: 10s
depends_on:
- kong-setup
networks:
- gateway-network
admin-ui:
image: pantsel/konga:0.15.0
environment:
NODE_ENV: production
DB_ADAPTER: postgres
DB_HOST: db-service
DB_USER: kong_admin
DB_PASSWORD: secure_pass
DB_DATABASE: konga_db
ports:
- "1337:1337"
depends_on:
- gateway
networks:
- gateway-network
networks:
gateway-network:
driver: bridge
起動手順
docker-compose up -d
docker-compose ps
基本操作例
ルーティング設定の実装フロー:
- Konga UIにアクセス(http://<host>:1337)
- 管理者アカウント作成
- Kong接続設定(Admin APIエンドポイント指定)
- Servicesメニューで新規サービス追加
- Routes設定でパスベースルーティング定義
動作検証用ホスト設定例:
# /etc/hosts
192.168.10.102 api.example.com
リクエストフロー:
クライアント → DNS解決 → Kongゲートウェイ → ルーティング判定 → バックエンドサービス → レスポンス返信