Kong Gatewayをデプロイする（Kong Konnect編）

# はじめに

Kong Gatewayは、以下の4つのモードでデプロイすることができます。
* Traditionalモード
* DB-less and declarativeモード
* Hybridモード
* Kong Konnect

それぞれの方式には利点と制限事項があります。そのため、Kong Gatewayを本番環境にインストールする際には、どのモードを選択するかを慎重に判断することが重要です。

本記事では、Kong Konnectの特徴、メリット、制限事項、ならびにデプロイ手順について説明します。

Kong Gatewayとは何かを知りたい場合は、以下の記事をご覧ください。

https://qiita.com/m5takeda/items/d7c74681c66692144ccc

:::note warn
他のデプロイ方式と異なり、Kong Konnectは商用製品のみで提供されています。
:::

# Kong Konnectとは
Kong Konnectは、Hybridモード同様にKong Gatewayをコントロールプレーン[^1]とデータプレーン[^2]に分割した構成です。ただし、Kongがコントロールプレーンをホストする構成になります。

![Kong Konnect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/1c23dfbe-d961-40c0-6bfc-d7992d1409d6.png)

Kong Konnectでは、コントロールプレーンが停止してもデータプレーンがトラフィックを継続的に処理できるため、信頼性を保持します。これは、コントロールプレーンがSelf-mamagedのHybridモードと同じ特徴です。
このように、基本的な特徴やメリット、制約事項はHybridモードと同様です。
詳細については、以下をご覧ください。

https://qiita.com/m5takeda/items/162c690b9dbf393246af

ただし、下記のHybridモードの制限事項は、Kong Konnectでは解消されています。

>異なるデータプレーンが異なる設定を持つためには、それぞれのコントロールプレーンインスタンスが必要になります。

Kong Konnectではコントロールプレーングループをサポートしており、用途に応じたセグメント化（例えば、事業部別や環境別）も可能です。これにより、一つのコントロールプレーン（同じUIとAdmin API）で異なるデータプレーンの設定を効率的に管理することができます。

[^1]: すべてのデータプレーンの設定を管理する。API構成管理、ノードへの構成データの配布、ノードの監視、管理インタフェースの提供などの機能を持つ。

[^2]: APIトラフィックの処理とルーティングを提供する。トラフィックのプロキシ、モニタリング、ロギング、保護などの機能をもつ。

## Kong Konnectの機能
Kong Konnectは、APIゲートウェイとしてだけでなく、APIマネジメントプラットフォームとしてもすぐれた機能を持っています。

### Service Catalog（サービスカタログ）

サービスカタログは、社内のアプリ開発チームが社内のAPIを見つけて利用しやすくするツールです。これにより、すべてのサービスを一元管理でき、組織内のサービス情報を正確に把握できるようになります。アプリ開発者は既存のサービスを簡単に見つけて使えるため、新しい製品の市場投入までの時間を短縮できます。

※2024/12現在はベータ版としてリリースされており、本番環境利用は非推奨のようです。

### Gateway Manager（ゲートウェイマネージャー）

ゲートウェイマネージャーは、Kong Gatewayの管理を手軽に始められるツールです。これを使うと、APIのセキュリティを強化するための各種プラグインをすぐに利用でき、安全な環境でAPIを管理できます。

### Mesh Manager（メッシュマネージャー）

メッシュマネージャーは、サービスメッシュを効率的に作成・管理できるツールです。異なるプラットフォームにまたがるメッシュを簡単にデプロイでき、複数のリージョンやクラウド環境でも柔軟に対応可能です。

### API Products（APIプロダクト）

Kong Gatewayに登録されたServiceは、APIの一つのバージョンとして扱われます。
APIプロダクトを使うと、APIの複数バージョン（複数Service）を一つのAPIプロダクトとしてまとめて管理できます。
バージョン管理やドキュメントのアップロードも簡単で、APIプロダクトをデベロッパーポータルに公開して、スムーズに製品化が進められます。

### Dev Portal（デベロッパーポータル）

デベロッパーポータルは、アプリ開発者がAPIにアクセスしやすくするためのサイトです。ここでは、APIの登録や利用がセルフサービスで行えます。
また、デベロッパーポータルは独自のブランドイメージに合わせてカスタマイズも可能です。

### Analytics (アナリティクス)

アナリティクス機能を活用することで、Serviceやアプリケーションの使用状況が詳しく分析できます。さらに、Kong Gatewayのプラグインを使用することで、DatadogやPrometheusなどの外部ツールと統合し、より強力な監視と分析も可能です。

### Teams（チーム）

Kong Konnectでは、チーム単位で認証管理が可能です。標準的なロールを使った設定だけでなく、独自のカスタムチームも作れます。ユーザーをチームに招待してアクセスを管理したり、既存のIDプロバイダーと連携することもできます。

# Kong Konnectのセットアップ
Kong Konnectのゲートウェイマネージャーを使用して、セルフマネージドのデータプレーンを構築し、Kongでホストされてるコントロールプレーンと接続する方法を説明します。


(1) Kong KonnectのKonnect UIを開き、「Gateway Manager」から使用するコントロールプレーンを選択します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/4489d863-760a-ec75-1b90-36e6377eea86.png)

(2) 「Data Plane Nodes」から「Create a New Data Plane Nodes」をクリックします。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/e9e2feb1-278e-1be1-a54d-0ae06261ee23.png)

(3) 「Gateway Version」と「Platform」を選択します。今回は「Platform」は「Linux (Docker)」にします。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/da13db32-2c0f-a33b-82cc-e7c78b74ce84.png)

(4) 表示されたセットアップスクリプトをコピーし、データプレーンを構築したいプラットフォームで実行します。このコマンドを実行することで、Dockerコンテナを作成し、Konnect Cloudアカウントに接続します。

```bash
$ docker run -d \
-e "KONG_ROLE=data_plane" \
-e "KONG_DATABASE=off" \
-e "KONG_VITALS=off" \
-e "KONG_CLUSTER_MTLS=pki" \
-e "KONG_CLUSTER_CONTROL_PLANE=xxx.us.cp0.konghq.com:443" \
-e "KONG_CLUSTER_SERVER_NAME=xxx.us.cp0.konghq.com" \
-e "KONG_CLUSTER_TELEMETRY_ENDPOINT=xxx.us.tp0.konghq.com:443" \
-e "KONG_CLUSTER_TELEMETRY_SERVER_NAME=xxx.us.tp0.konghq.com" \
-e "KONG_CLUSTER_CERT=-----BEGIN CERTIFICATE-----
省略
-----END CERTIFICATE-----" \
-e "KONG_CLUSTER_CERT_KEY=-----BEGIN PRIVATE KEY-----
省略
-----END PRIVATE KEY-----" \
-e "KONG_LUA_SSL_TRUSTED_CERTIFICATE=system" \
-e "KONG_KONNECT_MODE=on" \
-p 8000:8000 \
-p 8443:8443 \
kong/kong-gateway:3.8.0.0
```

(4) コントロールプレーンとデータプレーンの接続が完了されると、UI上にデータプレーンが表示されます。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/34a2df9d-ccd1-d934-ad34-c933e0af7594.png)


# Kong Cloud Gatewaysとは

Kong Konnectでは、データプレーンをKongがホストするフルマネージドのKong Cloud Gatewaysを提供しています。これにより、ユーザはデータプレーンを自分でホストする必要がなくなります。また、Kongがノードを自動スケーリングするため、運用の複雑さが軽減されるのも特徴です。

![Kong Cloud Gateways.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/4eb530b2-bad1-2097-a5f7-d00b25693e07.png)

https://jp.konghq.com/products/kong-konnect/features/dedicated-cloud-gateways

## メリット

* **自動アップグレード**：
Kong Konnectがゲートウェイのアップグレードを管理します。

* **モード選択**
パブリックモードとプライベートモードがあり、APIの公開範囲を管理できます。パブリックモードではインターネットにAPIを公開可能です。プライベートモードでは、内部ネットワークでのみAPIを利用可能です。

* **Autopilotモード**：
Kong Cloud Gatewaysの設定には、AutopilotモードとCustomモードの2種類があり、Autopilotモードを選択すると、リクエスト負荷に応じたノードの自動スケーリングが行われます。一方、Customモードでは、ユーザーがノードのサイズやタイプを手動で指定することが可能です。

* **クラウドサポート**：
AWSとAzureの[特定リージョン](https://docs.konghq.com/konnect/geo/)でサポートします。AWSの場合は、東京もサポートされています。

## 制限事項
* **コントロールプレーンの制約**：
Konnectのコントロールプレーンには、Kong Cloud Gatewaysyとセルフマネージドデータプレーンのノードを同時に含めることができません。

# さいごに
本記事では、Kong Gatewayのデプロイ方式であるKong Konnectの特徴、セットアップ手順を紹介しました。Kong Konnectは、Kongがコントロールプレーンをホストすることで、データプレーンのホスティングや管理の手間を軽減する信頼性の高いソリューションです。
また、フルマネージド型のKong Cloud Gatewaysは、オートスケールやクラウドサポートが可能で、柔軟にAPIを管理できます。
Kong Konnectを活用することで、より効率的なAPI管理を実現できるのではないでしょうか。