Contents
はじめに:Kong Gateway導入の背景と目的
API管理において、セキュリティやスケーラビリティ、パフォーマンスは不可欠な要素です。Kong Gatewayはこれらの課題に対応するため設計され、以下のようなメリットがあります。
- 高可用性と拡張性:マイクロサービスアーキテクチャに最適化された設計
- 豊富なプラグインエコシステム:認証やレート制限など、即戦力となる機能が多数揃う
- 柔軟なデプロイオプション:Docker、Kubernetes、オンプレミスなど多様な環境で利用可能
ただし、Kong Gatewayの導入には公式ドキュメントとの併用が推奨され、最新バージョンでの実装が重要です。
Docker環境構築の準備
Docker環境を整えることは、Kong Gatewayの安定した運用にとって不可欠なステップです。ここでは、Docker Hubからイメージをpullする手順やネットワーク設定(bridgeモード推奨)について詳しく解説します。
Docker Hubイメージのpull手順
最新バージョンのKong Gateway公式イメージを取得するには以下を行います。なお、latestタグは不安定な場合があるため、具体的なバージョン(例:3.6.0)を使用することが推奨されます。
-
Docker CLIがインストールされているか確認
bash
docker --version -
公式リポジトリのイメージをpull
bash
docker pull kong/kong-gateway:latest
注意事項:
latestタグは変更される可能性があるため、バージョン指定(例:kong/kong-gateway:3.6.0)が推奨されます。公式リポジトリで確認し、導入に適したバージョンを選びましょう。
ネットワーク設定(bridgeモード推奨)
Kong Gatewayのネットワーク構成では、bridgeモードがセキュリティと柔軟性を兼ね備えているため、推奨されます。以下の表に設定項目をまとめます。
| 設定項目 | 値 | 補足 |
|---|---|---|
| ネットワークモード | bridge |
デフォルトではホストモードが選択されるが、セキュリティ上はbridgeモードが推奨 |
| ポートマッピング | 8000:8000, 8443:8443 |
APIゲートウェイの通信ポート(HTTP/HTTPS)をホストに公開 |
| ネットワーク名 | 自定義可能 | 同一プロジェクト内でコンテナ間通信を行う場合は、自前のネットワークを作成 |
PostgreSQLデータベースの構築
Kong GatewayはPostgreSQLをDBとして利用するため、永続化可能な環境構築が不可欠です。以下にDocker ComposeによるDB構成手順とその重要性について解説します。
Docker ComposeによるDB構成
以下のdocker-compose.ymlを配置し、PostgreSQLコンテナを作成します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
version: '3.8' services: db: image: postgres:latest environment: POSTGRES_USER: kong POSTGRES_PASSWORD: kong POSTGRES_DB: kong volumes: - ./postgres_data:/var/lib/postgresql/data ports: - "5432:5432" |
重要: データ永続化のため、
volumesセクションでローカルディレクトリをマウントしてください。
永続化設定のポイント
データベースの永続化は以下の理由から必須です:
- インスタンス再起動やコンテナ破棄時にデータが失われるのを防ぐ
- 大規模なDB操作の際のパフォーマンス向上
| 永続化方法 | 用途 | 備考 |
|---|---|---|
| ボリュームマウント | データ保存 | Dockerボリュームまたはローカルディレクトリ使用可能 |
| バックアップ・リストア | データ復元 | pg_dumpやDocker Composeでのバージョン管理を活用 |
コンフィギュレーションファイル設計
Kong Gatewayの挙動はYAML形式の設定ファイルで定義します。セキュリティと柔軟性を両立させるため、適切な構成が不可欠です。
基本構造とパラメータ例
コンフィギュレーションファイル(kong.conf)は以下の通りです:
|
1 2 3 4 5 6 7 |
database: postgres pg_host: db pg_port: 5432 pg_user: kong pg_password: kong pg_database: kong |
重要:
pg_hostにはPostgreSQLコンテナのネットワーク内で識別可能な名前(例:db)を指定してください。
セキュリティ設定テンプレート
セキュリティ強化のために、以下のパラメータを追加することをお勧めします。具体的な使用例も含めて解説します。
admin_gui_url: 管理GUIのURLを制限trusted_ips: 信頼できるIPアドレスのリスト(例:"10.0.0.0/24", "192.168.1.0/24")proxy_read_timeout: コネクションタイムアウトの設定
| セキュリティ設定 | 値例 | 説明 |
|---|---|---|
| admin_gui_url | http://localhost:8001 |
ローカルでのみアクセス可能に制限 |
| trusted_ips | "127.0.0.1/32", "192.168.1.100" |
内部ネットワークからのアクセスを許可 |
| proxy_read_timeout | "60s" |
長時間の接続を防止 |
Docker Composeファイルの作成
Kong GatewayとPostgreSQLコンテナを統合的に管理するには、Docker Composeファイルが中心です。カスタマイズ可能なテンプレートを作成します。
サービス定義のベストプラクティス
以下が基本的なdocker-compose.ymlの構成例です:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
version: '3.8' services: kong-gateway: image: kong/kong-gateway:latest ports: - "8000:8000" - "8443:8443" - "8001:8001" environment: KONG_DATABASE: postgres KONG_PG_HOST: db KONG_PG_PORT: 5432 KONG_PG_USER: kong KONG_PG_PASSWORD: kong KONG_PG_DATABASE: kong depends_on: - db networks: - kong-net db: image: postgres:latest environment: POSTGRES_USER: kong POSTGRES_PASSWORD: kong POSTGRES_DB: kong volumes: - ./postgres_data:/var/lib/postgresql/data ports: - "5432:5432" networks: - kong-net networks: kong-net: |
重要:
depends_onでDBサービスが起動した後にKong Gatewayを起動するように設定してください。
インストール後の検証と運用
インストール後は、サービスの正常性確認やトラブルシューティングが必要です。ここでは、サービス起動確認手順とヘルスチェックの実施方法を解説します。
サービス起動確認手順
以下のようにコマンドで動作確認を行います:
|
1 2 3 |
docker-compose up -d docker ps |
| コマンド | 用途 |
|---|---|
docker-compose up -d |
コンテナをバックグラウンドで起動 |
docker ps |
実行中のコンテナ一覧を確認 |
ヘルスチェックの実施方法
Kong Gatewayの状態は以下のエンドポイントで確認可能です。
- 管理API:
http://localhost:8001/status - プロキシAPI:
http://localhost:8000/status
例:
|
1 2 |
curl http://localhost:8001/status |
| 結果 | 説明 |
|---|---|
{"status": "healthy"} |
サービスが正常に動作中 |
{"error": "..."} |
設定ミスやDB接続エラーの可能性 |
まとめ
本記事では、Kong GatewayをDocker環境で導入するためのステップバイステップガイドとその背景を解説しました。技術的な手順に加え、セキュリティ設定や永続化、ネットワーク構成など実践的な知識も含んでいます。
導入後は公式ドキュメントを参照し、最新バージョンでの運用が推奨されます。Kong Gatewayの導入を通じて、API管理の柔軟性とセキュリティを向上させることが可能です。