Kong Gatewayとは

# はじめに
近年、APIはビジネスの成長と成功のために不可欠な要素となっています。その中で、APIを効果的に管理し、セキュリティやパフォーマンスを高めるためのツールとして「APIゲートウェイ」が注目されています。
そこでアドベントカレンダー企画の一部として、世界的に広く採用されているAPIゲートウェイ「Kong Gateway」に注目した記事を9日連続でお届けします！

本記事では、Kong Gatewayの概要やその特徴、どのような機能があるのかを紹介します。
Kong Gatewayのデプロイ方法については、明日以降の記事で詳しくご紹介します。

手軽にKong Gatewayを触ってみたいという方は、以下の記事をご参考ください。

https://qiita.com/caunu-s/items/636aff1d04778fbbd779


# Kong Gatewayとは

[Kong Gateway](https://docs.konghq.com/gateway/latest/)は、オープンソースソフトウェア（OSS）のAPIゲートウェイです。APIゲートウェイは、APIへのリクエストを管理、設定、ルーティングできる高度なリバースプロキシと言えます。
Kong Gatewayの特徴は、軽量で高速かつ柔軟なクラウドネイティブのAPIゲートウェイであることです。世界的に広く採用されており、最も人気のあるOSSのAPIゲートウェイとされています。

Kong Gatewayは、[Kong Inc.](https://konghq.com/)によって提供されています。Kong Inc.はAPIソフトウェアの開発や、OSSを基盤にしたソリューションを展開しています。また、日本市場にも積極的に進出しており、2023年11月には日本法人である[Kong株式会社](https://jp.konghq.com/)を設立しました。同社はOSSのKong Gateway（以下、「Kong Gateway (OSS)」）に加え、商用製品として、高度な機能を備えたKong Gateway Enterpriseや、Kong Gatewayを一元管理できるSaaS型のAPI管理プラットフォームであるKong Konnectも提供しています。

さらに、Kong Inc.は第三者からの評価も非常に高いです。API管理市場におけるGartnerのマジッククアドラントで5年連続リーダーとして認定されています。また、デジタル庁からは推奨APIゲートウェイとしても認定されています。

https://jp.konghq.com/news/data-society-alliance-apigateway

# Kong Gatewayの基本機能

## ServiceとRoute
Kong Gatewayでは、「Service」と「Route」という二つの要素を組み合わせることで、API、アプリ、またはマイクロサービスをクライアントに公開できます。

「Service」は、アップストリームアプリであるAPIやマイクロサービスを表すURLを設定する構成要素です。

「Route」は、アップストリームアプリにアクセス可能するために、Kong Gatewayから公開されるエンドポイントを指します。パスだけでなく、メソッドやヘッダも設定可能です。

1つの「Service」が複数の「Route」と関連する1対多の関係を持つため、高度なトラフィック制御が可能になっています。

![SeviceとRoute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/952d0d9a-a641-d140-b1ce-48f18989c1c6.png)

## Upstream
「Upstream」とは、Kong Gatewayがリクエストを転送する対象となるアップストリームアプリのことを指し、仮想ホスト名として使用することができます。「Upstream」は異なる2つ以上のターゲットを指すことが可能であり、アップストリームターゲット間での負荷分散を実現します。

![Upstream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/71cc4255-1325-a3a6-b962-c493a69181c7.png)

## プラグイン
Kong Gatewayは、LuaまたはGo、Javascript、Pythonのモジュールをロードして実行するように設計されたLuaアプリケーションです。このモジュールのことを「プラグイン」と呼びます。
Kong Gatewayが提供する「プラグイン」は多岐にわたります。公式プラグイン一覧は以下をご覧ください。

https://docs.konghq.com/hub/

また、Kong GatewayはOSSなので、公式プラグイン以外にもKongコミュニティから多くのコミュニティプラグインが提供されています。
コミュニティプラグインは、Kong Gateway (OSS)だけでなく、Kong Gateway EnterpriseやKong Konnectでも利用可能です。

## Consumer
Kong Gatewayでは、アップストリームアプリを利用するユーザやアプリケーションを「Consumer」として管理します。「Consumer」を設定することで、アクセス制御、使用状況の監視、セキュリティの確保ができます。リクエストがどの「Consumer」に紐づいているかを識別するためには、資格情報を使用した認証が必要です。この認証方法は、認証プラグインによって提供されています。

下図は、Key authプラグインを使用したAPIキー認証の例です。この例では、「Consumer」を識別し、その「Consumer」に基づいてRate Limitingプラグインを用いて流量制御を行っています。これにより、特定の「Consumer」に対してのAPIリクエストを効率的に管理することが可能となります。
![Consumer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/7b7fb405-95be-130c-8306-d1e6ed692346.png)


# Kong Gatewayの管理ツール
## Admin API
Kong Gatewayには、管理目的で使用されるRESTful Admin APIが付属しています。
以下はtest-serviceというServiceにRouteを追加する例です。

```bash
$ curl -i -X POST http://localhost:8001/services/test-service/routes \
    -H "Content-Type: application/json" \
    -d '{"name": "test-route", "paths": [ "/path/one", "/path/two" ]}'
```

提供されているAPIは、以下をご覧ください。

https://docs.konghq.com/gateway/latest/admin-api/

## Kong Manager
Kong Managerは、Kong Gatewayを管理するためのGUIです。Kong Admin APIを利用してKong Gatewayを管理・制御します。
Kong Managerで利用可能な機能は、Kong Gateway (OSS)、Kong Gateway Enterprise、Kong Konnect（正確にはKonnect UIと呼ばれる）により異なります。
ただし、GUIとして操作感に大きな違いはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/5d91d6f7-35f4-88ec-dd77-81371a8f4f4b.png)

## decK

decKは、APIライフサイクル自動化（APIOps）を促進するためのコマンドラインツールです。構成管理ファイルを使用すると、Kong Gatewayの設定を管理しやすくなり、CI/CDパイプラインに組み込むのにも便利です。

インストール方法については、以下をご覧ください。

https://docs.konghq.com/deck/latest/installation/

# Kong Gateway製品
Kong Inc.は、Kong Gateway (OSS)に加え、商用製品として、Kong Gateway EnterpriseやKong Konnectも提供しています。

## Kong Gateway (OSS)

Kong Gateway (OSS)は、APIゲートウェイの基本機能とオープンソースプラグインを含むオープンソースパッケージです。
ソースコードは以下をご覧ください。

https://github.com/Kong/kong


## Kong Gateway Enterprise

Kong Gateway Enterpriseは、Kong Gateway (OSS)を強化し、高度な機能とサポートを提供します。
Kong Gateway (OSS)と比較して、以下の追加機能があります。
* **RBAC**：
Kong ManagerにおいてRBAC（ロールベースのアクセス制御）機能を提供し、セキュリティを強化します。
* **エンタープライズプラグイン**：
OpenID ConnectやRate Limiting Advancedなどの高度な機能を提供します。詳細は[こちら](https://docs.konghq.com/hub/?tier=enterprise)をご覧ください。

https://docs.konghq.com/gateway/latest/kong-enterprise/

## Kong Konnect
Kong Konnectは、Kong Gatewayを一元管理できるSaaS型のAPI管理プラットフォームです。Kongがクラウドでコントロールプレーン[^1]をホストし、データプレーン[^2]を任意のネットワーク環境でホストできる構成になっています。

[^1]:コントロールプレーン：すべてのデータプレーンの設定を管理する。API構成管理、ノードへの構成データの配布、ノードの監視、管理インタフェースの提供などの機能を持つ。
[^2]:データプレーン：APIトラフィックの処理とルーティングを提供する。トラフィックのプロキシ、モニタリング、ロギング、保護などの機能をもつ。

Kong Konnectの機能の一つである[Kong Cloud Gateways](https://jp.konghq.com/products/kong-konnect/features/dedicated-cloud-gateways)では、データプレーンをKongがクラウドでホストすることが可能で、完全なマネージド構成となっています。
さらに、APIライフサイクル管理のために以下の機能が提供されています。
* **Service Catalog**：開発チームが自社のAPIを簡単に見つけて利用できる一覧表のようなツール
* **Gateway Manager**：APIを管理するためのツールで、Kong Gatewayを迅速に設定し、安全に接続できる
* **Mesh Manager**：複数の環境にまたがって[Kong Mesh](https://jp.konghq.com/products/kong-mesh)を設定・管理するためのツール
* **API Products**：複数のServiceをひとまとめにして管理できるツールで、APIのバージョン管理やドキュメントの更新も容易
* **Dev Portal**：開発者がAPIを見つけやすく、利用を容易にするためのポータル
* **Analytics**：Serviceの利用状況を把握し、状態を監視するためのツール
* **Teams**：ユーザ権限を管理する機能で、チームごとにアクセスレベルを設定可能

https://docs.konghq.com/konnect/

# Kong Gatewayの特徴

|特徴  |説明  |
|---|---|
|強力なOSSがベース  |軽量、高速、柔軟であり、世界的に広く採用されているOSSのAPIゲートウェイであるKong Gateway (OSS)上に構築されています。  |
|マルチプラットフォーム  |クラウド、オンプレミス、Kubernetes、仮想マシンなど、あらゆる環境でデプロイ可能です。  |
|さまざまな認証方式に対応<br>※商用版のみ  |OAuth 2.0、OpenID Coonect、SAML2.0など様々な認証方式に対応しています。さらにより高いセキュリティレベルを要求されるFinancial-grade API (FAPI)にも対応しています。  |
|複数リージョンに対応<br>※Kong Konnectのみ  |コントロールプレーンをデプロイするリージョンを、AU、EU、USから選択できます。|
|シンプルなアーキテクチャ  |データプレーンとコントロールプレーンから構成されるシンプルなアーキテクチャであるため、軽量かつ管理が容易です。  |
|細かいカスタマイズが可能  |Kongが提供する公式プラグインに加え、コミュニティが開発した1,000以上のプラグインを利用して機能を拡張できます。Lua、Go、Rust、JavaScript、Pythonを利用した独自のプラグイン開発も可能です。 |
|生成AIを活用したAPI開発を支援|複数のLLMに対応した、AIトラフィックの監視、コンプライアンスとガバナンスの実装、ノーコードでの統合を提供するAI Gateway機能があります。|


# さいごに
Kong GatewayはOSS版でも十分な機能を持ち合わせていますが、商用版ではさらにエンタープライズ向けの高度な機能やサポートが提供されており、あらゆる規模のビジネスニーズに対応しています。個人的には、Kongの公式プラグインに加え、Kongコミュニティから提供される豊富なプラグインの存在は非常に魅力的に感じます。商用版であっても、要件に応じた細かいカスタマイズが可能である点は、大きなメリットと言えるのではないでしょうか。