KongGateway

DockerでKong OSSを構築・運用する完全ガイド

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

前提条件と環境設定

このセクションでは、Kong OSS を Docker 上で安全に動作させるための最低限のソフトウェア要件とネットワーク構成を確認します。前提が揃っていないとコンテナ起動時にエラーやポート競合が頻発し、トラブルシューティングに余計な工数がかかります。ここで示す項目は Docker Engine ≥ 20.10Compose v2 系 を前提とした構成です。

Docker Engine のバージョン要件 (≥20.10)

Docker Engine が古いとブリッジネットワークやボリュームの機能が制限され、Kong の公式イメージが期待通りに動作しません。
- 推奨: 20.10 以上(実際には最新の安定版を使用)
- 確認方法:

バージョン文字列が 20.10 以降であれば要件は満たしています。もし古い場合は公式インストールガイド(https://docs.docker.com/engine/install/)に従ってアップデートしてください。

docker‑compose (v2 系) のインストール方法

Compose は Docker CLI のプラグインとして提供される v2 系を使用します。プラグイン方式は単一バイナリで管理でき、docker compose コマンドがそのまま利用可能です。
- インストール手順(Linux/macOS 共通):

インストールが完了したら、以降は docker compose up 形式でスタックを起動できます。

推奨 OS とポート設定

Kong のデフォルトリスニングポートは 8000 (HTTP)8443 (HTTPS)、そして管理用の 8001 (HTTP) / 8444 (HTTPS) です。これらのポートが外部から到達可能であることを確認してください。
- 推奨 OS: Ubuntu 22.04 LTS、Debian 12、または macOS の最新リリース(いずれも Docker Desktop / Engine が公式にサポートされています)。
- ファイアウォール例 (Ubuntu ufw):

ポート 8002 はデフォルトでは使用しないため、本稿の構成では記載せず、必要に応じて別途追加してください。


公式イメージ取得と Docker ネットワーク構築

この章では Kong の公式 Docker イメージを取得し、サービス間通信を安定させるカスタムブリッジネットワーク kong-net を作成する手順を示します。公式イメージは常に最新の安定版(Kong 3.x 系)を提供しているため、タグ名だけでバージョン管理が可能です。

stable タグの取得とバージョン確認

kong:stable は Kong の長期サポート(LTS)向けイメージであり、毎月セキュリティパッチが適用されます。
- 取得コマンド:

  • 内部バージョンの確認方法(実行時に kong version を呼び出す):

この方式なら、イメージのタグは固定で CI/CD パイプラインにロックでき、実際のバージョン番号はコンテナ内部で確認できます。

カスタムネットワーク kong-net の作成

Compose が自動生成するブリッジネットワークでも動作しますが、明示的に名前を付けることで他プロジェクトとの衝突を防ぎ、docker network inspect による可視化が容易になります。
- 作成手順:

Compose ファイル内では次のように参照します。

この設定により、Kong とデータベースが同一ネットワーク上で名前解決できるようになります。


PostgreSQL と Kong の DB 使用モード

本セクションでは、永続化データベースとして PostgreSQL を利用する標準的な構成を紹介します。DB 連携モードはスケールアウトや統計情報の保持が必要な本番環境で推奨されます。

PostgreSQL コンテナ設定

PostgreSQL の公式イメージは POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DB の 3 つだけを設定すれば初期化が完了します。
- docker‑compose.yml(抜粋):

healthcheck を追加することで、Kong コンテナが DB の起動完了を待機できるようになります。

Kong コンテナ設定(DB 連携)

Kong 側ではデータベース接続情報とリスニングポートを環境変数で明示します。KONG_ADMIN_GUI_AUTH は Admin GUI に Basic 認証を付与するオプションですが、必須ではない点に留意してください(公式ドキュメント参照: https://docs.konghq.com/gateway/latest/admin-api/#authentication)。
- docker‑compose.yml(続き):

depends_oncondition: service_healthy を入れることで、PostgreSQL が起動していることが確認できるまで Kong の起動を遅延させます。

マイグレーション手順とヘルスチェック

DB スキーマはコンテナ初回起動時に手動でマイグレーションする必要があります。以下のコマンドは docker compose up -d 後に実行します。
- マイグレーション:

マイグレーションが成功するとコンテナログに Migrations successful が出力されます。続いて Admin API のヘルスチェックを行い、Kong が正常に起動したことを確認します。


DB-less モードでのデプロイ

DB-less(宣言的)モードは永続化データベースが不要な軽量構成です。設定は YAML ファイルにすべて記述し、起動時にマウントするだけで完結します。

declarative config (kong.yml) の作成例

kong.yml は Kong 3.x 系の Declarative Config スキーマに準拠した YAML です。最小構成として Service と Route を定義します。
- ファイル例(プロジェクトルートに配置):

このファイルをマウントすれば、Kong 起動時に自動的に Service と Route がロードされます。

Compose 定義でのボリュームマウントと環境変数

DB-less モードを有効化するには KONG_DATABASE=offKONG_DECLARATIVE_CONFIG を設定します。TLS 終端や Admin API の認証は別途オプションで付与できます。
- docker‑compose.yml(DB-less 用):

-ro オプションで読み取り専用マウントにし、誤ってコンテナ内部から書き換えられないようにしています。

単体 docker run での起動例

開発環境や CI のステップだけを手早く検証したい場合は、Compose を使わずに docker run コマンドでも同等の構成が作れます。
- 実行コマンド:

起動後に curl http://localhost:8001/services とアクセスすれば、先ほど定義した Service が JSON で返ることが確認できます。


運用・トラブルシューティングとベストプラクティス

本章では実運用で直面しやすい課題を整理し、永続化・バックアップ・セキュリティの観点から安全に運用するための指針を示します。

永続化ボリュームとバックアップ戦略

PostgreSQL のデータは名前付きボリューム pgdata に格納し、Kong のプラグインやカスタム証明書は別途永続化ボリューム kong-data として管理します。定期的なスナップショット取得と外部ストレージへの転送が障害復旧の鍵です。
- docker‑compose.yml(volumes 定義):

  • バックアップ例(PostgreSQL ダンプ):

Kong 自体の設定ファイルは kong.yml(DB-less)やデータベーススキーマが永続化対象になるため、バックアップ対象に含めることを忘れないでください。

よくあるエラーと対処法

エラーシナリオ 主な原因 確認ポイント 推奨対策
address already in use(ポート 8000) ホスト上で同ポートが既に使用中 lsof -i :8000 または netstat -tulpn 競合サービスを停止、または Compose の ports マッピングを別ポートに変更
環境変数のスペルミス(例: KONG_DATABSE キー名が誤っている docker compose config で展開結果を確認 正しいキー名 KONG_DATABASE に修正し、再デプロイ
マイグレーション失敗:role "kong" does not exist PostgreSQL が起動前に Kong がマイグレートを試行 コンテナログの healthcheck 状態 depends_oncondition: service_healthy を設定し、DB 起動完了を待機
DB-less モードで Service がロードされない KONG_DECLARATIVE_CONFIG パスが不正 docker exec <kong> ls /etc/kong/ でファイル有無確認 マウントパスと環境変数の一致を再チェック

エラーメッセージは必ずコンテナログ(docker logs <container>)で取得し、上表の項目に当てはめながら原因究明してください。

本番向けセキュリティベストプラクティス(Admin API 認証・TLS 終端)

Admin API の認証化

デフォルトでは Admin API が無認証で HTTP/HTTPS 両方に公開されます。実運用では Basic AuthJWT による保護を必ず設定し、さらにファイアウォールで内部ネットワークからのみアクセスできるよう制限します。
- Compose への追加例(Basic Auth):

KONG_ADMIN_GUI_AUTH は公式ドキュメントに記載されているオプションで、basic-auth を指定すると Authorization: Basic <base64> ヘッダーが必須になります。

TLS 終端の設定

外部からの通信はすべて TLS で保護し、証明書と鍵を安全にマウントします。
- 必要な環境変数:

  • ボリュームマウント例:

証明書は Let’s Encrypt など自動更新が可能なものを使用し、キー管理は VaultAWS KMS と連携させるとさらに安全です。

ネットワーク制限

ufw やクラウドベンダーのセキュリティグループで Admin API のポート(8001/8444)を内部サブネットに限定し、インターネットから直接到達できないようにします。


まとめ

項目 主なポイント
前提条件 Docker Engine ≥ 20.10、Compose v2、ポート 8000/8443/8001(+8444) の開放
公式イメージ取得 docker pull kong:stable → コンテナ内部で kong version 確認
カスタムネットワーク kong-net を作成し、DB と Kong が同一ブリッジ上で通信
DB 使用モード PostgreSQL の環境変数設定、ヘルスチェック、マイグレーション実行、Admin API ヘルスチェック
DB-less モード kong.yml に Service/Route を宣言、KONG_DATABASE=off とボリュームマウントで起動
運用ベストプラクティス 永続化ボリュームとバックアップ、エラー対処表、Admin API の認証・TLS 終端、ネットワーク制限

上記手順に沿って構築すれば、Kong OSS を Docker Compose 1 ファイルで DB 連携モードDB-less モード の両方を安全かつ再現性の高い形でデプロイできます。さらに、永続化・バックアップ・認証・TLS といった本番向け要件も網羅しているため、開発環境から本番環境への移行がスムーズに行えるでしょう。


参考リンク

これらの公式ドキュメントは随時更新されるため、実装前に最新情報を確認してください。

スポンサードリンク

-KongGateway