Docker で Kong API Gateway をインストールする方法を解説します。
前提条件
以下を前提に手順を解説します。
- インストール先のシステムで docker が有効かつアクセスできる状態であること
- エンタープライズ版の有償ユーザは license.json ファイルがあること
- 当該手順はデータベースを利用する構成
- 当該手順は Kong 社の公式情報ではないため商用環境の動作やセキュリティは無保証
公式ドキュメントの手順ベースですが、独自の解説を加えています。商用環境利用の場合は、Kong 社の最新版ドキュメントの手順を参照ください。
Kong gateway と PostgreSQL のインストール
目次
Kong gateway イメージの pull と tag 付け
Kong の Docker イメージを pull します。
docker pull kong/kong-gateway:2.7.0.0-alpine
イメージに tag を付けます。
docker tag kong/kong-gateway:2.7.0.0-alpine kong-ee
Docker ネットワークの作成
コンテナ間で通信できるようにカスタム Docker ネットワークを作成します。
docker network create kong-ee-net
PostgreSQL の準備
この記事の執筆時点では、公式ドキュメントが PostgreSQL9.6 の指定になっていますが、PostgreSQL のサポート期限を考慮して PostgreSQL10 を入れます。
docker run -d --name kong-ee-database \
--network=kong-ee-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
postgres:10
kong migrations bootstrap を実行します。このコマンドにより、データベースに Kong が使うテーブル等が作成されます。
docker run --rm --network=kong-ee-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-ee-database" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_PASSWORD=kong" \
kong-ee kong migrations bootstrap
Kong の起動
以下のコマンドで Kong Gateway のコンテナを起動します。なお、この起動方法はKONG_ADMIN_LISTEN(admin_listen)が 0.0.0.0:8001 となっており、全てのネットワークインタフェースから Admin API を受け付ける設定であるため、安全ではありません。商用環境では KONG_ADMIN_LISTEN(admin_listen)をローカルホストのインタフェースのみ(例:127.0.0.1:8001)にするなどして、ネットワークレイヤーのアクセスを制限した方が望ましいです。
docker run -d --name kong-ee --network=kong-ee-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-ee-database" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
-e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
-p 8002:8002 \
-p 8445:8445 \
-p 8003:8003 \
-p 8004:8004 \
kong-ee
動作確認
Kong の Admin API で services エンドポイントにアクセスしてみます。200 のステータスコードが返れば動作しています。
curl -i -X GET --url http://localhost:8001/services
ブラウザで http://localhost:8002/ にアクセスすれば、Kong Manager が表示されます。
ライセンスの適用(エンタープライズ版の有償ユーザーのみ)
有償ユーザーは Kong 社から得た license を以下の手順で適用します。
※下記コマンドのデーターはダミーであるため、実行してもライセンスは有効になりません。
http POST :8001/licenses \
payload='{"license":{"version":1,"signature":"signature info","payload":{ライセンスデーター}}}'
Developer Portal の有効化(エンタープライズ版のみ)
以下のコマンドで Developer Portal を有効にします。
※Developer Portal 機能はエンタープライズ版で有効なライセンスを適用しないと利用できません。
curl -X PATCH http://localhost:8001/workspaces/default --data "config.portal=true"
ブラウザで Developer Portal にアクセスします。
http://localhost:8003/default
Kong の OSS 版とエンタープライズ版(有償ユーザー)の違いについて
エンタープライズ版の有償ユーザー(ライセンス登録をしたユーザー)は以下の機能が利用できます。
- Developer Portal:API 開発・利用時に使えるポータル機能(例:OpenAPI Specification (OAS) 形式のドキュメント配置など)
- Vitals:API のアクセス数やステータスコードなどをグラフィカル表示、InfluxDB を追加導入すると csv 形式でレポート出力可
- RBAC (Role-Based Access Control):ロール(役割)に応じてアクセスや操作権限を設定する機能
- Enterprise plugins:mTLS や OpenID Connect などエンタープライズ向けの専用プラグイン