Gateway Management
APIゲートウェイとゲートウェイ管理とは何ですか?
API Gatewayは、APIトラフィックの中央管理ポイントです。クライアントのリクエストを適切なバックエンドサービスにルーティングし、必要に応じてリクエストとレスポンスを変換し、セキュリティポリシーを強制し、トラフィックを監視し、全体的なAPIの信頼性を確保します。
APIゲートウェイの主な機能
- Routing: クライアントのリクエストを適切なバックエンドサービスに指示します。
- Transformation: 必要に応じてリクエストまたはレスポンスの形式を変換します。
- Authentication & Authorization: クライアントの資格情報を検証し、アクセス権を付与します。
- Traffic Control: バックエンドの過負荷を防ぐためにAPIトラフィックを管理および制限します。
- Logging & Monitoring: トラッキングと分析のためにAPI使用データを記録します。
- Security & Protection: 悪意のある攻撃をブロックし、APIのセキュリティを強化します。
APIMでは、Kong APIゲートウェイが使用され、Kubernetes (K8s) デプロイメントとしてプロビジョニングされます。

ゲートウェイ管理メニュー
APIMのGateway Managementメニューでは、ユーザーが以下を行うことができます:
- ゲートウェイのリストを表示および管理します。
- 各ゲートウェイのステータスを監視します。
- プロジェクトごとにゲートウェイをクエリ、作成、更新、削除します。
- 複数のゲートウェイURLを管理します。
- ノードの親和性、耐障害性、およびトポロジー設定を構成します。
- HTTPSセキュリティのためにTLS証明書を設定します。
- アノテーション/ラベル(K8s Ingressアノテーション/ラベル)を介してメタデータを追加します。
各Gateway URLは、APIリクエストに使用されるエンドポイントを表します。
たとえば、APIがhttps://api.company.com/pathを介してアクセスされる場合、ゲートウェイURLはapi.company.comです。
ゲートウェイリスト画面
The Gateway List スクリーンは、プロジェクト内のすべてのゲートウェイの概要を提供し、ユーザーが以下を行えるようにします:
- すべてのゲートウェイを一目で確認する。
- CPU、メモリ、およびレプリカの設定を確認する。
- 各ゲートウェイの稼働中または待機中のステータスを監視する。
- 特定のゲートウェイを検索したり、新しいゲートウェイを作成したりする。

ゲートウェイの作成
新しいゲートウェイを作成するには、以下の手順に従ってください:
ゲートウェイ管理メニューに移動します。

「ゲートウェイを作成」をクリックします
プロジェクトを選択します
ゲートウェイが管理されるプロジェクトを選択します。プロジェクトを作成する手順については、Tenant Manager Console/Create a Project. を参照してください。

ゲートウェイ設定を構成します

Gateway Configuration セクションでは、ゲートウェイの詳細なカスタマイズが可能です。以下は主要なフィールドです:
Gateway Type- Purpose: APIゲートウェイのタイプを定義します。
- Mandatory: はい
- Input Instructions: プロジェクトのゲートウェイタイプに合わせます。変更できません。
- Purpose: ゲートウェイのユニークな識別子。
- Mandatory: はい
- Input Instructions: 英字、数字、spaces、ハイフン「-」、アンダースコア「_」、またはダブルコロン「:」のみ使用できます。英字で始める必要があります。

- Purpose: ゲートウェイインスタンスを識別します。
- Mandatory: はい
- Input Instructions: ゲートウェイ名に基づいて自動的に入力されます。
- Purpose: ゲートウェイに関する追加情報を提供します。
- Mandatory: いいえ
- Input Instructions: 短い説明を入力してください。
- Purpose: ゲートウェイのフィルタリングと検索に役立ちます。
- Mandatory: いいえ
- Input Instructions: ゲートウェイには多くのタグを持つことができます。Enterを押してタグを入力してください.

- Purpose: ゲートウェイのリソースを割り当てます。
- Mandatory: はい
- Input Instructions: スライダーを使用して調整します。値の範囲は500から16000 m/miです。

- Purpose: ゲートウェイによって使用される内部データベースのリソースを割り当てます。
- Mandatory: はい
- Input Instructions: スライダーを使用して調整します。値の範囲は500から16000 m/miです。

- Purpose: デプロイ後にゲートウェイのリソース割り当てを自動スケールするため
- Mandatory: はい
- Instructions: オートスケーリングをオンにするためのトグル。オンにしたら、最小レプリカ、最大レプリカ、CPU使用率、メモリ使用率のオートスケーリング値を設定します。

- Purpose: ゲートウェイがKubernetesでどこで実行されるかを決定します。
- Mandatory: はい
- Input Instructions: ドロップダウンリストから名前空間を選択します。
- Purpose: ゲートウェイのためのストレージがどのようにプロビジョニングされるかを定義します。
- Mandatory: はい
- Input Instructions: ドロップダウンリストからストレージクラスを選択します。
- Purpose: ゲートウェイのためのストレージ割り当てを指定します。
- Mandatory: はい
- Input Instructions: 5から500(Gi)の間の値を入力します。
- Purpose: Kongプロキシのサービスタイプを決定します。
- Mandatory: はい
- Input Instructions: ClusterIP、NodePort、LoadBalancerのいずれかを選択します。NodePortまたはLoadBalancerが選択された場合、ユーザーはKongプロキシサービスのNodePort値(30000から32767の間)を入力する必要があります。

- Purpose: アフィニティは、ノードラベルを一致させることによって、ゲートウェイポッドがスケジュールされるノードを制御するために使用されます。
- Mandatory: ONにトグルされた場合、はい。
- Input Instructions: アフィニティをONにトグルして有効にします。その後、ノードラベルのためのキーと値を提供します。これは、nodeAffinity ルールに変換され、Kubernetesで requiredDuringSchedulingIgnoredDuringExecution を使用します。例えば:

nodeAffinity:
- Purpose: トレランスは、特定のワークロードにマークされたノードにゲートウェイポッドをスケジュールできるようにします。
- Mandatory: ONに切り替えた場合は「はい」です。
- Input Instructions: ONに切り替えた後、次の内容を入力します:
- オペレーター: EqualまたはExistsのいずれかを選択します。Equal: キーと値は正確に一致する必要があります。Exists: キーのみが存在する必要があり、値は必須ではありません。
- キーと値: タイントキーと値を提供します(オペレーターがExistsの場合、値はオプションです)。

tolerations:
- effect: NoSchedule
key: "tolerationKey"
operator: "Equal" or Exists
value: "tolerationValue"
- Purpose: トポロジースプレッド制約は、ゲートウェイポッドが障害ドメイン(ゾーンやノードなど)全体に均等に分散されることを保証し、レジリエンスと可用性を向上させます。
- Mandatory: ONに切り替えた場合は「はい」です。
- Input Instructions: ONに切り替えた後、次の内容を入力します:
- Max Skew: トポロジードメイン間のゲートウェイポッドの数の最大許容差(例: 1に設定した場合、ゾーンごとのポッドの数は1を超えて異なることはできません)。
- When Unsatisfiable: 次のいずれかを選択します: ScheduleAnyway(デフォルト):スプレッド制約が完全に満たされなくてもスケジューリングを許可します; DoNotSchedule: 制約が失敗した場合、ポッドのスケジューリングをブロックします; DoNotScheduleIfNotSatisfied: スプレッド条件が満たされない場合にのみスケジューリングを制限する新しい戦略です。

このマッピングに対応するKubernetesルールの例:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector: matchLabels:
app.kubernetes.io/instance: test-kong
- Purpose: 内部Redisインスタンスをキャッシュ用に許可します。
- Mandatory: トグルされている場合は「はい」
- Input Instructions: ON/OFFを切り替えます。ONの場合、GatewayがデプロイされるとデフォルトのRedisがインストールされます。OFFの場合、ユーザーにはAPIM RedisがRedisを使用するポリシー(レート制限、jwtブラックリスト、OIDC)をサポートしていないことが通知されます。ユーザーはOFFに切り替えるためのプロンプトで確認する必要があります。

- Purpose: Fluent Bitは、ゲートウェイコンテナからログを収集、フィルタリング、および転送する軽量のログプロセッサです。
- Mandatory: いいえ
- Input Instructions: 有効にすると、次の宛先オプションのいずれかを追加で選択できます:
- OpenTelemetry: OpenTelemetryエージェントを使用してログとテレメトリデータを転送します。
- Elasticsearch: Elasticsearchクラスターにログを転送してインデックス作成と検索を行います。

注意:これらのオプションのうち、同時にアクティブにできるのは1つだけです。1つを有効にすると、他のオプションがすでにアクティブな場合、現在アクティブなものを無効にするための確認プロンプトが表示されます。

- Purpose: このフィールドでは、Kong Gatewayランタイムに対して、パフォーマンスや動作を微調整する必要がある場合に、JSON形式で生の設定を提供することにより、高度な低レベルの構成を直接適用できます。
- Mandatory: トグルされている場合は「はい」
- Input Instructions: トグル後、カスタムKongランタイム設定を入力できるJSONエディタが表示されます。

例:
"upstream_keepalive_idle_timeout": 60, "upstream_keepalive_max_requests": 100000,
"nginx_http_keepalive_requests": 100000,
"upstream_keepalive_pool_size": 1024
注意: 設定ミスは不安定なゲートウェイの動作を引き起こす可能性があります。変更を適用する前に、Kongのドキュメントまたはプラットフォーム管理者に相談してください。
ゲートウェイの設定は以下の表にまとめられています:
| Field Name | Purpose | Input Notes | Mandatory |
|---|---|---|---|
| ゲートウェイタイプ | APIゲートウェイのタイプを定義します。 | プロジェクトのゲートウェイタイプに合わせます。変更できません。 | はい。デフォルトはkongです。 |
| ゲートウェイ名 | ゲートウェイのユニークな識別子。 | 英字、数字、ハイフン「-」、アンダースコア「_」、またはコロン「:」のみ使用できます。英字で始める必要があります。 | はい |
| ゲートウェイインスタンス名 | ゲートウェイインスタンスを識別します。 | ゲートウェイ名に基づいて自動的に入力されます。 | はい |
| ゲートウェイの説明 | ゲートウェイに関する追加の詳細を提供します。 | 短い説明を入力してください。 | いいえ |
| ゲートウェイタグ | ゲートウェイのフィルタリングと検索に役立ちます。 | ゲートウェイには多くのタグを付けることができます。Enterを押してタグを入力します. | いいえ |
| ゲートウェイCPU/メモリ | ゲートウェイのリソースを割り当てます。 | スライダーを使用して調整します。値の範囲は500から16000 m/miです。 | はい |
| データベースCPU/メモリ | ゲートウェイが使用する内部データベースのリソースを割り当てます。 | スライダーを使用して調整します。値の範囲は500から16000 m/miです。 | はい |
| ゲートウェイオートスケーリング | デプロイ後に自動的にポッドリソースをスケーリングします。 | ON/OFFを切り替えます。ONの場合は、最小レプリカ、最大レプリカ、CPUしきい値(%)、メモリしきい値(%)を設定します。 | 切り替えた場合ははい |
| Kongネームスペース | Kubernetesでゲートウェイが実行される場所を決定します。 | ドロップダウンリストからネームスペースを選択します。 | はい |
| Kongストレージクラス | ゲートウェイのストレージがどのようにプロビジョニングされるかを定義します。 | ドロップダウンリストからストレージクラスを選択します。 | はい |
| ストレージ容量 | ゲートウェイのストレージ割り当てを指定します。 | 5から500(Gi)の間の値を入力してください。 | はい |
| Kongプロキシサービスの種類 | 外部アクセスのためのKongプロキシのサービスの種類を定義します。 | ClusterIP、NodePort、またはLoadBalancerから選択してください。デフォルトはClusterIPです。 | はい |
| アフィニティ | ゲートウェイポッドをラベルが一致するノードにスケジュールします。 | ON/OFFを切り替えます。ONの場合、ノードラベルのキーと値を入力してください。 | 切り替えた場合ははい |
| トレランス | ゲートウェイポッドが汚染されたノードで実行できるようにします。 | ON/OFFを切り替えます。ONの場合、演算子を選択します:EqualまたはExists。キーを入力し、オプションで値を入力します。 | 切り替えた場合ははい |
| トポロジースプレッド | 可用性を高めるために、ポッドをゾーン全体に均等に分配します。 | ON/OFFを切り替えます。ONの場合、Max Skew(例:1)を入力します。Unsatisfiableの場合のオプションを選択します:ScheduleAnyway、DoNotSchedule、DoNotScheduleIfNotSatisfiedから選択してください。 | 切り替えた場合ははい |
| インナーRedis | キャッシングのための内部Redisインスタンスを許可します。 | ON/OFFを切り替えます。ONの場合、ゲートウェイがデプロイされるときにデフォルトのRedisがインストールされます。 | 切り替えた場合ははい |
| Fluent Bit | メトリック収集のためのOpenTelemetryエージェントまたはログ収集のためのElasticsearchを有効にします。 | OpenTelemetryまたはElasticsearchのいずれかを選択できます。 | 切り替えた場合ははい |
| Kong設定 | Kongの設定を手動で上書きできるようにします。 | エディタを有効にするためにONに切り替え、有効なJSONを入力します。 | 切り替えた場合ははい |
完全な作成
CREATE A GATEWAYボタンをクリックして、作成を完了し、ゲートウェイの設定を保存します。
ゲートウェイURLの追加と管理
ゲートウェイURL設定では、ユーザーがAPIゲートウェイのために1つまたは複数の公開ドメインを定義することができます。また、HTTPS用のTLS証明書、APIルーティングのためのグローバルベースパス、およびアノテーションを通じた追加メタデータもサポートしています。各ゲートウェイは複数のゲートウェイURLを持つことができ、APIゲートウェイへのアクセス方法を定義します。
ゲートウェイURLを追加するには、ユーザーはゲートウェイ管理画面に表示されている作成済みのゲートウェイをクリックして、ゲートウェイ変更画面に入ることができます。

そこから、ユーザーは下にあるゲートウェイURL設定セクションを見つけることができます。

以下は、ゲートウェイURLを作成する手順です:
URLを作成する
複数のURLを作成するには、ADDITIONをクリックします。URLを設定するための新しいブロックが下に作成されます。
ゲートウェイURLを設定する
以下は、ゲートウェイURLを設定するための主要なフィールドです:
Gateway URL- Purpose: ゲートウェイにアクセス可能な公開ドメインを定義します。ユーザーが使用中のゲートウェイURLを変更すると、既存のAPIが正しく呼び出されない可能性があります。
- Mandatory: はい
- Input Instructions: 有効なドメインを入力してください。
- Example:
your.domain.com
your.domain.com:8443

- Purpose: このゲートウェイのすべてのAPIに共通のプレフィックスを設定します。定義されている場合、このゲートウェイのすべてのAPIはこのプレフィックスを継承します。使用中にベースパスが変更されると、既存のAPIが正しく呼び出されない可能性があります。
- Mandatory: はい
- Input Instructions: ベースパスを入力してください。/のままにすると、ルートが使用されます。
- Example:
/ /apim

- Purpose: tls.crtを含めて、SSL証明書とtls.keyファイルを提供することでHTTPS通信を有効にします。ネットワークポリシーが適用され、Gateway URLとの通信時にHTTPSのみを許可する場合、ユーザーはHTTPSをオンに切り替える必要があります。ユーザーがK8s SecretでTLS証明書を登録し、K8s Ingressを通じてTLS認証を処理する場合、ユーザーはtls.crt/tls.keyの値を入力する必要があります。
- Mandatory: 依存
- Input Instructions: PEM形式で証明書の内容を貼り付けます。安全なHTTPS接続に必要です。

- Purpose: このGateway URL構成に使用するIngressコントローラーを指定します。
- Mandatory: はい
- Input Instructions: ドロップダウンからIngressクラスを選択します。利用可能なオプションには以下が含まれる場合があります:
- nginx(デフォルト)
- alb
- appsec-kong
この設定は、選択したIngressコントローラーを通じてGateway URLをルーティングします。

- Purpose: このGateway URLのために作成されたIngressリソースにKubernetesラベルを追加します。分類や自動化の目的に役立ちます。
- Mandatory: いいえ
- Input Instructions: 1つ以上のキー-バリューのペアを入力します。これらのラベルは作成されたIngressオブジェクトに適用されます。複数のエントリを追加するにはプラスボタンを使用し、追加したエントリを削除するにはバツボタンを使用します。

- Purpose: Kubernetesのingressアノテーションを追加して、カスタムタイムアウト、ヘッダー操作、またはコントローラー固有のオプションなどの高度な設定を行います。
- Mandatory: いいえ
- Input Instructions: 2つのモードを使用してアノテーションを入力できます:
フォームモード(JSONトグルOFF):各アノテーションのキーと値を手動で入力します。システムの制約に応じて、一部のフィールドは編集できない場合があります。プラスボタンをクリックして複数のアノテーションを追加したり、クロスボタンをクリックして追加したアノテーションを削除したりできます。少なくとも1つのアノテーションを保持する必要があります。

例:
"key": "nginx.ingress.kubernetes.io/proxy-connect-timeout",
"value": "300"
JSONモード(JSONトグルON):エディターにキーと値のJSONオブジェクトの配列としてアノテーションを入力します。

例:
[
{
"key": "nginx.ingress.kubernetes.io/configuration-snippet",
"value": "more_clear_headers \"server\";more_clear_headers \"via\";"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-connect-timeout",
"value": "300"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-read-timeout",
"value": "300"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-send-timeout",
"value": "300"
}
]
ゲートウェイURLの設定は、以下の表にまとめられています:
| Field Name | Purpose | Input Notes |
|---|---|---|
| ゲートウェイURL | ゲートウェイにアクセス可能な公開ドメインを定義します。ユーザーが使用しているゲートウェイURLを変更すると、既存のAPIが正しく呼び出されない可能性があります。 | 有効なドメインを入力してください(例:api.example.com)。必須フィールドです。 |
| グローバルベースパス | このゲートウェイのすべてのAPIに共通のプレフィックスを設定します。定義されている場合、このゲートウェイのすべてのAPIはこのプレフィックスを継承します。 | ベースパスを入力してください(例:/api)。/のままにすると、ルートが使用されます。 |
| TLS Certificates (tls.crt) | SSL証明書を提供することでHTTPS通信を有効にします。 | 証明書の内容をPEM形式で貼り付けます。安全なHTTPS接続に必要です。 ユーザーがK8s SecretでTLS証明書を登録し、K8s Ingressを通じてTLS認証を処理する場合、ユーザーはtls.crt/tls.keyの値を入力する必要があります。 |
| TLS Private Key (tls.key) | TLS証明書を認証するために使用されます。 | プライベートキーの内容をPEM形式で貼り付けます。提供された証明書と一致する必要があります。 |
| Ingress Class | このGateway URL構成に使用するingressコントローラーを指定します。 | nginx(デフォルト)、alb、またはappsec-kongからingressクラスを選択します。 |
| Labels | このGateway URLのために作成されたingressリソースにKubernetesラベルを追加します。 | 1つ以上のキー-バリューのペアを入力します。ペアを追加または削除できます。 |
| Annotations | 高度な構成のためにKubernetes ingress注釈を追加します。 | 2つのモードを使用して複数の注釈を入力できます:キー-バリューのペア(JSONモードOFF)またはJSONスクリプト(JSONモードON)。 |
もし2つのGateway URL(api.example.comとservice.example.com)がBasePath /apiで構成されている場合、次のようになります:
https://api.example.com/api/{API-Path}
https://service.example.com/api/{API-Path}
が有効なAPIエンドポイントとなります。
ゲートウェイの変更
ユーザーは既存のゲートウェイを次のように変更できます:
-
リストからゲートウェイを選択します。

-
設定可能なフィールドと入力(ゲートウェイの説明、ゲートウェイのタグ、ゲートウェイのCPU/メモリ、データベースのCPU/メモリ、トグルと値など)を編集します。

- 必要に応じてGateway URLsを更新します。
- 変更を保存して更新を適用します。
ユーザーがゲートウェイURLを変更した場合、ゲートウェイを保存するボタンをクリックする前にSAVE GATEWAY URLボタンをクリックすることを忘れないでください。
ゲートウェイの削除
ゲートウェイを削除すると、permanently remove すべての関連データが失われます。このアクションは cannot be undone です。
- Gateway Management に移動します。
- 削除するゲートウェイを選択します。

- "Deleting A Gateway" をクリックし、アクションを確認します。
- このゲートウェイに依存しているAPIは、もはやアクセスできなくなります。
- 削除する前に、アクティブなAPIが依存していないことを確認してください。