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 です。
ゲートウェイ一覧画面
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: ドロップダウンリストからKubernetesストレージクラスを選択します。
- 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で変換されます。例えば:

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の場合、次の入力を行います: 最大偏差(例: 1)。満たされない場合のオプションを選択します: 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はこのプレフィックスを継承します。使用中にBasepathが変更されると、既存のAPIが正しく呼び出されない可能性があります。
- Mandatory: はい
- Input Instructions: ベースパスを入力してください。/のままにすると、ルートが使用されます。
- Example:
/ /apim

- Purpose: tls.crtを含めて、SSL証明書とtls.keyファイルを提供することでHTTPS通信を有効にします。ネットワークポリシーが適用され、ゲートウェイURLとの通信時にHTTPSのみを許可する場合、ユーザーはHTTPSをオンに切り替える必要があります。ユーザーがK8s SecretでTLS証明書を登録し、K8s Ingressを通じてTLS認証を処理する場合、ユーザーはtls.crt/tls.keyの値を入力する必要があります。
- Mandatory: 依存
- Input Instructions: PEM形式で証明書の内容を貼り付けます。安全なHTTPS接続に必要です。
- 注: APIMはTLS 1.2およびTLS 1.3のみをサポートしています。TLS 1.0およびTLS 1.1は、現代のセキュリティ基準に準拠するためにデフォルトで無効になっています。

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

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

- Purpose: Kubernetesイングレスアノテーションを追加して、カスタムタイムアウト、ヘッダー操作、またはコントローラー固有のオプションなどの高度な設定を行います。
- 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 |
|---|---|---|
| Gateway URL | ゲートウェイにアクセス可能な公開ドメインを定義します。ユーザーが使用中のゲートウェイURLを変更すると、既存のAPIが正しく呼び出されない可能性があります。 | 有効なドメインを入力してください(例:api.example.com)。必須フィールドです。 |
| Global BasePath | このゲートウェイのすべての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 | このゲートウェイURL構成に使用するIngressコントローラーを指定します。 | nginx(デフォルト)、alb、またはappsec-kongからIngressクラスを選択してください。 |
| Labels | このゲートウェイURLのために作成されたIngressリソースにKubernetesラベルを追加します。 | 1つ以上のキー-バリューのペアを入力してください。ペアを追加または削除できます。 |
| Annotations | 高度な構成のためにKubernetes Ingress注釈を追加します。 | 2つのモードを使用して複数の注釈を入力できます:キー-バリューのペア(JSONモードOFF)またはJSONスクリプト(JSONモードON)。 |
2つのゲートウェイ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が依存していないことを確認してください。