オープンソースの Kong API Gateway (Kong OSS) は、GitHub 上で 33,000 スター以上を獲得し、293 人のコントリビューターを擁する、人気のあるプロジェクトです。Kong、エコシステム パートナー、およびコミュニティが提供する数百のプラグインにより拡張可能な、強力なプラットフォームを提供します。Kong Enterprise サブスクリプションは、Kong OSS のコア基盤に加え、拡張された機能セットを提供します。ここでは、Kong OSS がすでにインストールされているシステムを Enterprise へ移行する方法について説明します。
Kong Enterprise Gateway を使用する理由
Kong Enterprise は豊富な機能を備えており、Kong OSS の基本機能を拡張し、運用環境で利用可能な API 管理プラットフォームを提供します。Kong Enterprise いくつかの機能を見てみましょう。
- Kong Manager は、Enterprise 機能を利用するための基礎となるプラットフォームで、設定と運用監視のグラフィカル ユーザー インターフェイスを提供します。
- Secrets Management は、パスワード、証明書、API キーなどの機密情報を保管場所に保存します。サポートされている保管場所は、AWS Secrets Manager、GCP Secrets Manager、および HashiCorp Vault です。
- Kong Developer Portal は、開発者が公開されている API の仕様を確認して評価したり、JavaScript、Python、Ruby などの一般的な言語でサンプル コード スニペットを表示したり、API をサブスクライブするための場所を提供します。
- Kong Vitals は、Kong Manager 内から直接、サービス、ルート、アプリケーションの使用状況の監視と分析にアクセスできるようにします。
- Kong Workspaces とロールベースのアクセス制御 (RBAC) は、ユーザーとロールの構造を作成し、複数のチームが関心を分離して (マルチテナント)、Kong Gateway のインスタンスを共有できるようにします。Kong Enterprise は、既存の Identity Management System と統合して、既存の ID とアクセス権ワークフローでロールと権限を管理できます。
これらの機能は、Kong を「API リクエストを転送し、基本的なセキュリティ機能と制御を追加できる」ものから、「エンタープライズで使用できる、可視性、監視、管理機能を備えた運用環境対応の API ゲートウェイ」へと変貌させます。しかし、Kong Enterprise にはあって、OSS にはない最も重要な要素は Enterprise Plugin です。Kong Enterprise では、運用環境に対応したセキュリティ、変換、トラフィック制御、および監視機能を提供する 29 の追加のプラグインを利用できます。以下に例を示します。
たとえば、開発者が Open API 仕様に従って、開発中の API で基本的なモッキングを行いたい場合、Enterprise ライセンスでは、Kong でサポートされている Kong Mocking プラグインをゲートウェイに追加できます。
または、サードパーティの ID プロバイダーを使用して、OpenID Connect (OIDC) による認証を実施する場合、Kong の OpenID Connect プラグインを利用できます。これも、Enterprise ライセンスで利用可能なプラグインで、Kong でサポートされています。
Plugin Hub では、API Gateway の用途別にプラグインの一覧が表示されており、「Enterprise」タグが付いているプラグインは、Enterprise ライセンスでのみ利用できます。
最後に、Kong Enterprise ライセンスでは、Kong Enterprise サポートおよびサービスも利用することができます。プロジェクトの基礎となるコードベースの方向性は、コミュニティのコラボレーションの影響を受けますが、Kong とパートナーシップを確立することで、成功を確実にし、プラットフォームのアップタイムと利用を最大化し、投資対効果を最大限に高めることができます。
Kong OSS と Kong Enterprise の機能の相対表は、以下のリンクを参照してください。
https://docs.konghq.com/gateway/latest/#features
移行シナリオ
Kong は、さまざまな方法でデプロイできる柔軟性の高い製品です。Kong の実行ファイルには、Control Plane と Data Plane の両方の機能が含まれており、特定の構成に基づいて有効または無効にできます。Traditional モードから拡張性の高い Hybrid アプローチまで、各種デプロイメント アーキテクチャについては、以下のドキュメントで説明されています。
https://docs.konghq.com/gateway/latest/production/deployment-topologies/
注: Kong の Konnect 実装では、Kong Gateway の Control Plane と設定ストアへのアクセス、サポート、および保守を、マルチテナントの Kong がサポートするパブリック クラウドベースの SaaS 実装にオフロードしています。この記事では、自己管理型の Kong Enterprise への移行に注目します。Kong Gateway OSS から Konnect への移行方法については、今後の記事で説明する予定です。
基本的に移行では、Kong 実行ファイルの共通要素と設定データのストアを移行します。データのストアは、以下のいずれかになります。
- 静的に定義された宣言型の yaml ファイル (db-less install と呼ばれる) に格納されており、Kong の起動時にメモリに読み込まれます。Enterprise では、OSS バージョンでサポートされていない Workspaces などの追加のオプションを利用できます。ただし、管理者、RBAC 権限/ロール、Dev Portal に関連するものなど、その他の Enterprise 専用のエンティティは管理されません。
- データベースの有無に関係なく実行可能な Kong Kubernetes Ingress Controller (KIC) 実装の etcd キー値のストアなど、信頼できる外部ソースから取得します。KIC ポッド内の Ingress Controller コンテナーは、K8s API サーバーを介して関連オブジェクトを読み取り、それを Kong 内のルート、サービス、およびプラグインに必要な状態に変換します。
- PostgreSQL データベースに格納されています。このアプローチは、Traditional と Hybrid の両方の Kong アーキテクチャで使用されています。Enterprise では、Enterprise の機能とプラグインによって提供される追加機能をサポートするため、データベース構造を更新および拡張する必要があります。kong migrations コマンドセットを使用して更新し、更新の状態を PostgreSQL にコミットします。
Kong の移行プロセスは、Kong 実行ファイルのバージョンを更新することと、Kong Enterprise で利用可能な追加機能に合わせてデータ ストアの形式を更新することに集約されます。宣言型ファイル形式の更新では、デフォルト以外のワークスペース名を使用している場合、ファイルに「_workspace」値を追加します。Kubernetes Ingress Controller の更新では、オリジナルの K8s インストールに使用したツールに応じて、kubectl apply によるインストール、またはプロセスを管理する Helm を使用した更新のいずれかを行います。
データベースの更新は、この記事の最後のセクションで説明する kong migrations コマンド セットによって自動で行われます。この記事では、データベースを使用している場合の移行方法を説明します。
Kong OSS のインストールと Enterprise への移行
移行プロセスがいかに容易かを理解し、確認する最良の方法は、実際に手順を実行してみることです。これは、Kong Enterprise のライセンスがなくても可能です。Kong OSS と PostgreSQL データベースがインストールされた Linux ホストを起動して、サービス/ルート構成を作成します。次に、Kong OSS 実行ファイルを削除して、Kong Enterprise の実行ファイルに置き換えます。指示に従って、データベースを移行し、Kong を起動します。Enterprise ライセンスは後で API を呼び出して適用できるため、Kong Enterprise の起動には必要ありません。それでは、実際の手順を見ていきましょう。最初に、OSS のセットアップに必要なコマンドを説明し、その後、移行プロセスの応答出力を含む完全な例を提供します。
注: これらの手順は、データベース移行ツールを使用して、Kong OSS から Enterprise へ移行する最もシンプルな例です。Kong API Gateway のすべてのトポロジとデプロイメント モードにそのまま適用することはできません。運用環境では、最初に同じ構成のテスト環境を用意し、Kong トポロジを使用してプロセスをシミュレーションし、特定のニーズに最適なコマンドと可能なアプローチを理解することを推奨します。
OSS のインストール
この記事で使用するテスト環境は、Ubuntu focal-20.04 が動作する AWS インスタンスです。一部の構文は、Linux のバージョンとリリースに固有です。以下は、Kong のインストールと起動に使用するコマンド シーケンスです。
注: Kong OSS Gateway の公式インストール手順は、以下を参照してください。
https://konghq.com/install#kong-community
Ubuntu OS の準備
sudo apt update
アップデート可能なパッケージを更新します。
sudo apt upgrade -y
新しいバージョンの Ubuntu で Kong の依存関係を解決するため、以下のコマンドを実行します。
sudo apt install zlib1g-dev
後で json の応答を表示するのに役立つ jq ユーティリティをインストールします。
sudo apt install jq
PostgreSQL のインストールと準備
sudo apt install postgresql -y
postgres ユーザーに変更して、データベースを準備します。
sudo -i -u postgres
postgres のインタラクティブ プロンプトを起動します。
psql
CREATE USER kong WITH PASSWORD 'super_secret'; CREATE DATABASE kong OWNER kong;
exit
exit
Ubuntu のコマンド プロンプトに戻ります。
Kong のダウンロードとインストール
curl -Lo kong-3.1.1.amd64.deb "https://download.konghq.com/gateway-3.x-ubuntu-$(lsb_release -sc)/pool/all/k/kong/kong_3.1.1_amd64.deb"
sudo dpkg -i kong-3.1.1.amd64.deb
Kong 設定ファイルの編集
sudo cp /etc/kong/kong.conf.default /etc/kong/kong.conf
sudo vi /etc/kong/kong.conf
設定ファイルの 1097 行目あたりにある DATASTORE セクションで、以下のようにフィールドのコメントを外します。
database = postgres
pg_user = kong
pg_password = super_secret
pg_database = kong
kong migrations データベース コマンドを実行して、Kong を起動します。
sudo KONG_PASSWORD=Kong1234 kong migrations bootstrap -c /etc/kong/kong.conf
sudo kong start -c /etc/kong/kong.conf
example サービスとルートの作成
curl -i -s -X POST http://localhost:8001/services --data name=example_service --data url='http://mockbin.org'
curl -i -X POST http://localhost:8001/services/example_service/routes --data 'paths[]=/mock' --data name=example_route
ルートのテスト
ゲートウェイの設定にルートが表示され、ルートのパスにアクセスしたときに「200 OK」ヘッダーの応答と出力が表示されることを確認します。
curl -X GET http://localhost:8001/services/example_service/routes | jq
上記のコマンドを実行すると、ルートの設定が表示されます。
curl -I -X GET http://localhost:8000/mock
上記のコマンドで実際のルート リクエストをテストできます。
この時点で、Kong OSS Gateway の完全なインスタンスを実行し、example ルートとサービスを利用できるはずです。これで、Enterprise への移行完了後も、利用可能ルートが保証されたベースライン環境が作成されました。
Enterprise への移行
このインストールを Enterprise に移行するには、まず既存の OSS モードの Kong を終了して削除します。このとき、データベースに保存された構成は残します。次に、Kong の Enterprise バージョンをインストールし、Enterprise をサポートするため、kong migrations コマンド セットを使用して PostgreSQL データベースを更新します。インストールした Kong のアーキテクチャに応じてこのプロセスは異なり、新しいリリースを実行するため新しい仮想ホストを構築したり、既存のデータベースをクローンして、それを基に Enterprise インストールを構築 (ブルーグリーン デプロイメント) することができます。さまざまなオプションにより、段階的な移行が可能です。ここでは、インプレース アップグレードを行います。移行中にダウンタイムが発生するため、適宜計画する必要があります。
注: 移行は、同じリリース バージョンの Kong OSS から Kong Enterprise へ行う必要があります。リリース バージョンが異なる場合、移行とは別に Kong リリース バージョンのアップグレードが必要になります。この記事の公開時点で最新の Kong 3.x リリースに移行するには、特定の要件があります。Kong アップグレード プロセスの詳細は、以下のドキュメント ページを参照してください。
https://docs.konghq.com/gateway/latest/upgrade/
Kong OSS の停止とアンインストール
sudo kong stop
Kong stopped
sudo dpkg -r kong
(Reading database ... 100879 files and directories currently installed.)
Removing kong (3.0.1) ...
Kong Enterprise のダウンロードとインストール
注: Kong Enterprise Gateway の公式インストール手順は、以下のページを参照してください。
https://docs.konghq.com/gateway/latest/install/linux/ubuntu/
curl -Lo kong-enterprise-edition-3.1.1.1.all.deb
"https://download.konghq.com/gateway-3.x-ubuntu-$(lsb_release -sc)/pool/all/k/kong-enterprise-edition/kong-enterprise-edition_3.1.1.1_amd64.deb"
.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10 100 10 0 0 175 0 --:--:-- --:--:-- --:--:-- 175
100 72.7M 100 72.7M 0 0 37.4M 0 0:00:01 0:00:01 --:--:-- 42.1M
sudo dpkg -i kong-enterprise-edition-3.1.1.1.all.deb
Selecting previously unselected package kong-enterprise-edition.
(Reading database ... 67424 files and directories currently installed.)
Preparing to unpack kong-enterprise-edition-3.1.1.1.all.deb ...
Unpacking kong-enterprise-edition (3.1.1.1) ...
Setting up kong-enterprise-edition (3.1.1.1) ...
Installing new version of config file /etc/kong/kong.conf.default ...
Processing triggers for man-db (2.9.1-1) ...
データベースの移行
注: Kong がサポートするさまざまなデプロイメント トポロジについて、運用環境で移行をステージングするオプションを検討するには、次のドキュメントを参照してください。
https://docs.konghq.com/gateway/latest/production/deployment-topologies/
このコマンドは、非破壊な方法でデータベースを更新します。つまり、Traditional または Hybrid トポロジの大規模な運用システムでは、OSS バージョンの運用を継続し、いくつかの更新を保留にできます。さまざまなアップデートが適用され、多くの出力行が生成されます。最後に、アップデートの合計と、保留中のアップデートを示す警告が表示されるはずです。
sudo kong migrations up
migrating core on database 'kong'...
core migrated up to: 014_230_to_260 (executed)
core migrated up to: 015_260_to_270 (executed)
core migrated up to: 016_270_to_280 (executed)
migrating canary on database 'kong'...
canary migrated up to: 001_200_to_210 (pending)
migrating degraphql on database 'kong'…
.
enterprise.oauth2 migrated up to: 002_2200_to_2211 (pending)
migrating enterprise.request-transformer-advanced on database 'kong'...
enterprise.request-transformer-advanced migrated up to: 001_1500_to_2100 (pending)
migrating enterprise.response-transformer-advanced on database 'kong'...
enterprise.response-transformer-advanced migrated up to: 001_1500_to_2100 (pending)
50 migrations processed
20 executed
30 pending
Database has pending migrations; run 'kong migrations finish' when ready
この例では、すでに 1 つのノードを Kong にアップグレードしています。運用環境では、すべての Kong OSS ノードを Kong Enterprise に更新後、以下のコマンドを適用してデータベース移行プロセスを完了できます。
sudo kong migrations finish
migrating canary on database 'kong'...
canary migrated up to: 001_200_to_210 (executed)
migrating key-auth-enc on database 'kong'...
key-auth-enc migrated up to: 001_200_to_210 (executed)
migrating mtls-auth on database 'kong'...
mtls-auth migrated up to: 001_200_to_210 (executed)
migrating openid-connect on database 'kong'…
.
enterprise.oauth2 migrated up to: 002_2200_to_2211 (executed)
migrating enterprise.request-transformer-advanced on database 'kong'...
enterprise.request-transformer-advanced migrated up to: 001_1500_to_2100 (executed)
migrating enterprise.response-transformer-advanced on database 'kong'...
enterprise.response-transformer-advanced migrated up to: 001_1500_to_2100 (executed)
30 migrations processed
30 executed
No pending migrations to finish
上記の出力の最後の行は、保留中の移行がないことを示しています。migrations up コマンドを実行後、Kong Enterprise を起動してデータベースを実行できますが、新機能を完全にサポートするためには、migrations finish コマンドを実行する必要があります。
Kong Enterprise の実行
sudo kong start -c /etc/kong/kong.conf
Kong started
OSS モードのインストールに対して使用したテスト コマンドを繰り返し、すべてが動作していることを確認します。以下は、期待される結果です。Kong Enterprise 3.0 上で稼働していることがわかります。
curl -X GET http://localhost:8001/services/example_service/routes | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 508 100 508 0 0 1269 0 --:--:-- --:--:-- --:--:-- 1273
{
"next": null,
"data": [
{
"protocols": [
"http",
"https"
],
"paths": [
"/mock"
],
"methods": null,
"sources": null,
"hosts": null,
"name": "example_route",
"created_at": 1668114173,
"destinations": null,
"snis": null,
"service": {
"id": "a521ef7f-95f3-49b0-8faf-3a55ff3f0912"
},
"tags": null,
"request_buffering": true,
"response_buffering": true,
"regex_priority": 0,
"id": "f84eb8f8-972e-4597-aa03-c93caed93f1c",
"headers": null,
"updated_at": 1668114173,
"preserve_host": false,
"strip_path": true,
"https_redirect_status_code": 426,
"path_handling": "v0"
}
]
}
curl -I -X GET http://localhost:8000/mock
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Date: Fri, 11 Nov 2022 20:26:17 GMT
Vary: Accept-Encoding
Via: kong/3.0.1.0-enterprise-edition
CF-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=93BCDXMDI5D55LBkwLPsVBvMzWrcTHTKL8T8OT6dJ8ohS7PpjR2aVwoWmwDD1646mHC8TIvuwW2m8%2F43FvlZ9g1ZTftpp6E09P91nV6EBOoxfVwmytiGWyJdxIl91w%3D%3D"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
CF-RAY: 7689c3148e5613ec-ORD
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
X-Kong-Upstream-Latency: 151
X-Kong-Proxy-Latency: 2
まとめ
ここで示したように、Kong OSS から Kong Enterprise への移行は簡単かつ安全に行うことができ、設定を維持したまま、Kong Enterprise Gateway プラットフォームの利点を得ることができます。Kong Enterprise では、新しい管理および運用機能、すべての Enterprise プラグイン、および業界をリードするサポートとサービスを利用できます。ぜひ、この手順をシンプルな仮想マシンで試してみてください。Kong では、ライセンスについてのご相談や、プロフェッショナル サービスによる移行計画の支援についてのご相談も承っております。
Kong Enterprise の概要、価格、およびライセンス体系などの詳細は、こちらを参照してください。
参照記事: 2023 年 1 月 10 日
Jerry Hency
© Kong Inc. 2023
「How and Why to Migrate From Kong Open Source to Kong Enterprise API Gateway」