APIG Ingress は、Nginx Ingress のコアおよび共通のアノテーションをサポートしており、Nginx Ingress から APIG Ingress ゲートウェイへのシームレスな移行を可能にします。APIG Ingress はまた、Nginx Ingress アノテーションではサポートされていないトラフィックガバナンス機能を提供するために、追加のアノテーションを導入しています。このトピックでは、APIG Ingress でサポートされているアノテーションについて説明します。
機能概要
標準の Kubernetes Ingress は、レイヤー 7 HTTP トラフィックに対して TLS 暗号化とシンプルなルーティング機能のみを提供します。Ingress Controller は通常、アノテーションを使用して、トラフィックガバナンスとセキュリティ保護機能で Ingress リソースを強化します。
Ingress アノテーションのサポート状況
Nginx Ingress アノテーション
Nginx Ingress ユーザーが APIG Ingress にシームレスに移行できるように、APIG Ingress は Nginx Ingress アノテーションを幅広くサポートしています。次の表にサポート状況を示します。
Nginx Ingress アノテーション | サポート合計数 | 注釈 |
サポートされるアノテーション | 51 | ユーザーシナリオの 90% をカバーします。 |
機能に影響しないアノテーション | 15 | 構成は不要です。 |
一時的にサポートされていないアノテーション | 48 | サポートは進行中です。これらは少数のシナリオで使用されます。 |
サポートされていないアノテーション | 5 | 主に Nginx ネイティブのコードスニペットが含まれます。 |
Higress と Nginx の実装は異なるため、いくつかの動作上の違いが生じます。
Nginx Ingress アノテーション構成における NGINX 変数 とコードスニペットには互換性がありません。
Nginx Ingress は
nginx.ingress.kubernetes.io/proxy-body-sizeアノテーションを使用して、クライアントリクエストボディのサイズ制限を構成します。リクエストボディが指定されたサイズを超えると、Nginx はエラーを返します。Higress クラウドネイティブゲートウェイはチャンクストリーミングを使用するため、事前にリクエストボディサイズを設定する必要はありません。大きなファイルの転送の場合は、ゲートウェイインスタンスのパラメーター設定で `DownstreamConnectionBufferLimits` パラメーターを調整できます。
APIG Ingress アノテーション
APIG Ingress は、Nginx Ingress アノテーションでは提供されないガバナンス機能を提供するために、追加のアノテーションを導入しています。次の表にサポート状況を示します。
APIG Ingress アノテーション | サポート合計数 | 注釈 |
拡張アノテーション | 40 | Nginx を超えるトラフィックガバナンスとセキュリティ保護機能を強化します。 |
スコープの説明
Ingress: Ingress スコープのアノテーションは、現在の Ingress で定義されているルーティングルールにのみ適用されます。
ドメイン名: ドメイン名スコープのアノテーションは、現在の Ingress で指定されたホストに適用されます。このスコープは、同じホストを使用する他の Ingress に影響します。
Service: サービススコープのアノテーションは、現在の Ingress で指定されたサービスに適用されます。このスコープは、同じサービスを使用する他の Ingress に影響します。
アノテーションのプレフィックス
APIG Ingress は、すべての Nginx Ingress アノテーションをサポートしています。たとえば、nginx.ingress.kubernetes.io/xxx は higress.ingress.kubernetes.io/xxx と同じように機能します。プリファレンスに応じて nginx または higress プレフィックスのいずれかを使用できます。ただし、APIG Ingress 専用のアノテーションには `nginx` プレフィックスを使用できません。
アノテーションのサポート概要
以下のセクションでは、トラフィックガバナンスとセキュリティ保護のためのアノテーションについて説明します。
トラフィックガバナンス
段階的リリース
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/canary | Ingress | 互換 | 段階的リリースを有効または無効にします。 |
nginx.ingress.kubernetes.io/canary-by-header | Ingress | 互換 |
|
nginx.ingress.kubernetes.io/canary-by-header-value | Ingress | 互換 |
|
nginx.ingress.kubernetes.io/canary-by-header-pattern | Ingress | 互換 |
|
higress.ingress.kubernetes.io/canary-by-query | Ingress | Higress 拡張 |
|
higress.ingress.kubernetes.io/canary-by-query-value | Ingress | Higress 拡張 |
|
higress.ingress.kubernetes.io/canary-by-query-pattern | Ingress | Higress 拡張 |
|
nginx.ingress.kubernetes.io/canary-by-cookie | Ingress | 互換 |
|
higress.ingress.kubernetes.io/canary-by-cookie-value | Ingress |
|
|
nginx.ingress.kubernetes.io/canary-weight | Ingress | 互換 | 重みに基づいてトラフィックを分割します。 |
nginx.ingress.kubernetes.io/canary-weight-total | Ingress | 互換 | 重みの合計。 |
複数サービス
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/destination | Ingress | Higress 拡張 | ルートの重みベースのサービス配信を構成します。 構成構文は次のとおりです: 説明
|
構文例:
annotations:
# トラフィックの 60% は foo サービスに、40% は bar サービスに送信されます。
higress.ingress.kubernetes.io/destination: |
60% foo.default.svc.cluster.local:8080
40% bar.default.svc.cluster.local:9090サービスサブセット
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/service-subset | Ingress |
| これは、1 つの Service が複数のデプロイメントを管理するシナリオに適用されます。Ingress によって定義されたルートが、そのサービスの Pod のサブセットにトラフィックを転送することを指定します。
説明 サービスに指定されたラベルを持つ Pod がない場合、トラフィックはディザスタリカバリのためにそのサービスのすべての Pod に自動的にルーティングされます。 |
higress.ingress.kubernetes.io/subset-labels | Ingress |
| オプション。このアノテーションは |
フォールバック (ディザスタリカバリ)
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/default-backend | Ingress | 互換 | ディザスタリカバリサービス。Ingress で定義されたサービスに使用可能なノードがない場合、リクエストはこのディザスタリカバリサービスに自動的に転送されます。 |
nginx.ingress.kubernetes.io/custom-http-errors | Ingress | 互換 | このアノテーションは 重要 リクエストがディザスタリカバリサービスに転送されると、リクエストパスは `/` に再書き込みされます。この動作は |
正規表現の一致
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/use-regex | Ingress | 互換 | Ingress で定義されたパスが正規表現の一致を使用することを示します。正規表現は RE2 構文 を使用します。 |
再書き込み
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/rewrite-target | Ingress | 互換 | Ingress で定義された元のパスを指定されたターゲットに再書き込みします。 |
nginx.ingress.kubernetes.io/upstream-vhost | Ingress | 互換 | Ingress で定義されたルートに一致するリクエストがバックエンドサービスに転送されると、Host ヘッダーが指定された値に変更されます。 |
リダイレクト
Nginx と Nginx Ingress の機能セットは同一ではありません。Nginx はより広範な機能を備えています。Nginx Ingress の公式ドキュメントでは、リダイレクトに NGINX 変数 を使用することのサポートについては言及されていません。Nginx Ingress の一部のバージョンでは NGINX 変数の構成がサポートされている場合がありますが、公式に文書化されていないため、それらを使用すると互換性のリスクが生じる可能性があります。Nginx Ingress で NGINX 変数を使用することは避けてください。
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/ssl-redirect | Ingress | 互換 | HTTP を HTTPS にリダイレクトします。 |
nginx.ingress.kubernetes.io/force-ssl-redirect | Ingress | 互換 | HTTP を HTTPS にリダイレクトします。 |
nginx.ingress.kubernetes.io/permanent-redirect | Ingress | 互換 | 恒久的なリダイレクト。 |
nginx.ingress.kubernetes.io/permanent-redirect-code | Ingress | 互換 | 恒久的なリダイレクトの状態コード。 |
nginx.ingress.kubernetes.io/temporal-redirect | Ingress | 互換 | 一時的なリダイレクト。 |
nginx.ingress.kubernetes.io/app-root | Ingress | 互換 | アプリケーションのルートパスを変更します。`/` へのリクエストは新しいパスにリダイレクトされます。 |
クロスドメイン
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/enable-cors | Ingress | 互換 | クロスドメインアクセスを有効または無効にします。 |
nginx.ingress.kubernetes.io/cors-allow-origin | Ingress | 互換 | 許可されたサードパーティサイト。 |
nginx.ingress.kubernetes.io/cors-allow-methods | Ingress | 互換 | 許可されたリクエストメソッド (GET、POST、PUT など)。 |
nginx.ingress.kubernetes.io/cors-allow-headers | Ingress | 互換 | 許可されたリクエストヘッダー。 |
nginx.ingress.kubernetes.io/cors-expose-headers | Ingress | 互換 | ブラウザに公開する許可された応答ヘッダー。 |
nginx.ingress.kubernetes.io/cors-allow-credentials | Ingress | 互換 | 認証情報を許可するかどうかを指定します。 |
nginx.ingress.kubernetes.io/cors-max-age | Ingress | 互換 | プリフライト結果の最大キャッシュ期間。 |
ヘッダーコントロール
標準ルートで定義されたヘッダー制御のアノテーションは、グレースケールルートには適用されません。つまり、標準ルートとグレースケールルートで定義されたヘッダー制御のアノテーションは相互に排他的であり、独立して有効になります。この機能を使用して、標準ルートとグレースケールルートへのリクエストに対して異なるヘッダー操作ポリシーを設定できます。
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/request-header-control-add | Ingress | Higress 拡張 | リクエストがバックエンドサービスに転送されるときに、指定されたヘッダーを追加します。ヘッダーがすでに存在する場合、新しい値が元の値に追加されます。構文は次のとおりです。
|
higress.ingress.kubernetes.io/request-header-control-update | Ingress | Higress 拡張 | リクエストがバックエンドサービスに転送されるときに、指定されたヘッダーを更新します。ヘッダーがすでに存在する場合、新しい値が元の値を上書きします。構文は次のとおりです。
|
higress.ingress.kubernetes.io/request-header-control-remove | Ingress | Higress 拡張 | リクエストがバックエンドサービスに転送されるときに、指定されたヘッダーを削除します。構文は次のとおりです。
|
higress.ingress.kubernetes.io/response-header-control-add | Ingress | Higress 拡張 | バックエンドサービスからの応答に指定されたヘッダーを追加してから、クライアントに転送します。ヘッダーがすでに存在する場合、新しい値が元の値に追加されます。構文は次のとおりです。
|
higress.ingress.kubernetes.io/response-header-control-update | Ingress | Higress 拡張 | バックエンドサービスからの応答の指定されたヘッダーを更新してから、クライアントに転送します。ヘッダーがすでに存在する場合、新しい値が元の値を上書きします。構文は次のとおりです。
|
higress.ingress.kubernetes.io/response-header-control-remove | Ingress | Higress 拡張 | バックエンドサービスからの応答から指定されたヘッダーを削除してから、クライアントに転送します。構文は次のとおりです。
|
タイムアウト
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/timeout | Ingress | Higress 拡張 | リクエストのタイムアウト期間 (秒単位)。デフォルトでは、タイムアウトは構成されていません。 説明 タイムアウト設定はアプリケーション層に適用され、トランスポート層の TCP には適用されません。 |
リトライ
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/proxy-next-upstream-tries | Ingress | 互換 | リクエストの最大リトライ回数。デフォルトは 3 です。 |
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout | Ingress | 互換 | リクエストリトライのタイムアウト期間 (秒単位)。デフォルトでは、タイムアウトは構成されていません。 |
nginx.ingress.kubernetes.io/proxy-next-upstream | Ingress | 互換 | リクエストをリトライする条件。詳細については、「Nginx リトライメカニズム」をご参照ください。 |
トラフィックミラーリング
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/mirror-target-service | Ingress | Higress 拡張 | トラフィックをコピーし、指定されたミラーサービスに転送します。サービス形式は `namespace/name:port` です
|
higress.ingress.kubernetes.io/mirror-percentage | Ingress |
| コピーするトラフィックの割合。値の範囲は 0 から 100 です。デフォルトは 100 です。 |
ドメイン名エイリアス
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/server-alias | ドメイン名 |
| Ingress spec に表示されるドメイン名のエイリアスを定義します。ドメイン名エイリアスは、ソースドメインの TLS、ルーティング、およびトラフィックガバナンス構成を共有します。 |
シングルインスタンスのレート制限 (非推奨予定)
アノテーション | スコープ | サポートレベル | 説明 |
higress.ingress.kubernetes.io/route-limit-rpm | Ingress | Higress 拡張 | 各ゲートウェイインスタンス上のこの Ingress で定義されたルートの 1 分あたりの最大リクエスト数。最大瞬間リクエスト数は、この値に レート制限がトリガーされると、応答本文は
|
higress.ingress.kubernetes.io/route-limit-rps | Ingress | Higress 拡張 | 各ゲートウェイインスタンス上のこの Ingress で定義されたルートの 1 秒あたりの最大リクエスト数。最大瞬間リクエスト数は、この値に レート制限がトリガーされると、応答本文は
|
higress.ingress.kubernetes.io/route-limit-burst-multiplier | Ingress | Higress 拡張 | 最大瞬間リクエスト数の係数。デフォルトは 5 です。 |
グローバルレート制限 (推奨)
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/rate-limit | Ingress |
| ゲートウェイインスタンス上のこの Ingress で定義されたルートのグローバルレート制限 (1 秒あたりのリクエスト数)。 |
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-code | Ingress |
| この Ingress で定義されたルートに対してレート制限がトリガーされたときの応答ステータスコード。デフォルトは 429 です。 説明 このアノテーションは `rate-limit-fallback-redirect-url` と相互に排他的です。カスタム応答またはリダイレクトのいずれかを指定できます。 |
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-body-type | Ingress |
| この Ingress で定義されたルートに対してレート制限がトリガーされたときの応答本文のフォーマット。デフォルトは text です。
|
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-body | Ingress |
| この Ingress で定義されたルートに対してレート制限がトリガーされたときの応答本文。デフォルトは `sentinel rate limited` です。 |
higress.ingress.kubernetes.io/rate-limit-fallback-redirect-url | Ingress |
| この Ingress で定義されたルートに対してレート制限がトリガーされたときのリダイレクト URL。 説明 このアノテーションは `rate-limit-fallback-custom-response-code` と相互に排他的です。リダイレクトまたはカスタム応答のいずれかを指定できます。 |
グローバル同時実行制御
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/concurrency-limit | Ingress |
| ゲートウェイインスタンス上のこの Ingress で定義されたルートのグローバル同時実行制限。これは、同時に処理できるリクエストの最大数です。 |
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code | Ingress |
| この Ingress で定義されたルートに対して同時実行制限がトリガーされたときの応答ステータスコード。デフォルトは 429 です。 説明 このアノテーションは `concurrency-limit-fallback-redirect-url` と相互に排他的です。カスタム応答またはリダイレクトのいずれかを指定できます。 |
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body-type | Ingress |
| この Ingress で定義されたルートに対して同時実行制限がトリガーされたときの応答本文のフォーマット。デフォルトは text です。
|
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body | Ingress |
| この Ingress で定義されたルートに対して同時実行制限がトリガーされたときの応答本文。デフォルトは `sentinel rate limited` です。 |
higress.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url | Ingress |
| この Ingress で定義されたルートに対して同時実行制限がトリガーされたときのリダイレクト URL。 説明 このアノテーションは `concurrency-limit-fallback-custom-response-code` と相互に排他的です。リダイレクトまたはカスタム応答のいずれかを指定できます。 |
バックエンドサービスで使用されるプロトコル
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/backend-protocol | サービス | 部分的に互換。AJP と FCGI はサポートされていません。 | バックエンドサービスで使用されるプロトコルを指定します。デフォルトは HTTP です。サポートされている値は次のとおりです。
|
ロードバランシング
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/load-balance | サービス | 部分的に互換。 | バックエンドサービスの標準ロードバランシングアルゴリズム。デフォルトは
|
nginx.ingress.kubernetes.io/upstream-hash-by | サービス | 部分的に互換。NGINX 変数と定数の組み合わせはサポートされていません。 | 一貫性ハッシュロードバランシングアルゴリズム。APIG Ingress は次の形式をサポートしています。
|
サービスウォームアップ (グレースフル起動)
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/warmup | サービス | Higress 拡張 | サービスのランプアップ期間 (秒単位)。デフォルトでは無効になっています。 重要 サービスウォームアップは、選択したロードバランシングアルゴリズムに依存します。現在、`round_robin` と `least_conn` のみがサポートされています。 |
Cookie アフィニティ
アノテーション | 機能 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/affinity | サービス | 互換 | アフィニティタイプ。現在、cookie のみがサポートされています。デフォルトは |
nginx.ingress.kubernetes.io/affinity-mode | サービス | 部分的に互換。 | アフィニティモード。APIG Ingress は現在、balanced モードのみをサポートしています。デフォルトは |
nginx.ingress.kubernetes.io/session-cookie-name | サービス | 互換 | ハッシュキーとして使用される指定された Cookie の値を構成します。 |
nginx.ingress.kubernetes.io/session-cookie-path | サービス | 互換 | 指定された Cookie が存在しない場合、これは生成された Cookie のパス値です。デフォルトは |
nginx.ingress.kubernetes.io/session-cookie-max-age | サービス | 互換 | 指定された Cookie が存在しない場合、これは生成された Cookie の有効期限 (秒単位) です。デフォルトはセッションレベルです。 |
nginx.ingress.kubernetes.io/session-cookie-expires | サービス | 互換 | 指定された Cookie が存在しない場合、これは生成された Cookie の有効期限 (秒単位) です。デフォルトはセッションレベルです。 |
IP アクセス制御
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/whitelist-source-range | Ingress | 互換 | ルートの IP ホワイトリストを指定します。IP アドレスまたは Classless Inter-Domain Routing (CIDR) ブロックをサポートし、コンマで区切ります。 |
nginx.ingress.kubernetes.io/denylist-source-range | Ingress |
| ルートの IP ブラックリストを指定します。IP アドレスまたは CIDR ブロックをサポートし、コンマで区切ります。 説明 このアノテーションは、Higress 拡張アノテーション `higress.ingress.kubernetes.io/blacklist-source-range` よりも優先度が高くなります。 |
higress.ingress.kubernetes.io/blacklist-source-range | Ingress | Higress 拡張 | ルートの IP ブラックリストを指定します。IP アドレスまたは CIDR ブロックをサポートし、コンマで区切ります。 |
higress.ingress.kubernetes.io/domain-whitelist-source-range | Ingress | Higress 拡張 | ドメイン名の IP ホワイトリストを指定します。ドメインレベルの優先度はルートレベルの優先度よりも低くなります。IP アドレスまたは CIDR ブロックをサポートし、コンマで区切ります。 |
higress.ingress.kubernetes.io/domain-blacklist-source-range | Ingress | Higress 拡張 | ドメイン名の IP ブラックリストを指定します。ドメインレベルの優先度はルートレベルの優先度よりも低くなります。IP アドレスまたは CIDR ブロックをサポートし、コンマで区切ります。 |
ゲートウェイとバックエンドサービス間の接続プール構成
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/connection-policy-tcp-max-connection | サービス | Higress 拡張 | ゲートウェイとバックエンドサービス間で確立できる最大接続数。 |
higress.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint | サービス | Higress 拡張 | ゲートウェイとバックエンドサービスの単一ノード間で確立できる最大接続数。 |
higress.ingress.kubernetes.io/connection-policy-http-max-request-per-connection | サービス | Higress 拡張 | ゲートウェイとバックエンドサービス間の接続あたりの最大リクエスト数。 |
セキュリティ保護
クライアントとゲートウェイ間の暗号化通信
アノテーション | 適用範囲 | サポートレベル | 説明 |
higress.ingress.kubernetes.io/tls-min-protocol-version | ドメイン名 | Higress 拡張 | 最小 TLS バージョンを指定します。デフォルトは TLSv1.0 です。有効な値は次のとおりです。
|
higress.ingress.kubernetes.io/tls-max-protocol-version | ドメイン名 | Higress 拡張 | 最大 TLS バージョンを指定します。デフォルトは TLSv1.3 です。有効な値は次のとおりです。
|
nginx.ingress.kubernetes.io/ssl-cipher | ドメイン名 | 互換 | TLS の暗号スイートを指定します。コロン (:) で区切って複数のスイートを指定できます。これは、TLS ハンドシェイクが TLS v1.0 から TLS v1.2 を使用する場合にのみ有効になります。 デフォルトの暗号スイートは次のとおりです。
|
higress.ingress.kubernetes.io/auth-tls-secret | ドメイン名 | 部分的に互換。シークレット名は `(ドメイン名証明書が配置されているシークレットの名前) | mTLS ハンドシェイク中に提供されたクライアント証明書を検証するためにゲートウェイが使用する CA 証明書。このアノテーションは主に、ゲートウェイがクライアントの ID を認証する必要があるシナリオで使用されます。 |
ゲートウェイとバックエンドサービス間の暗号化通信
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/proxy-ssl-secret | サービス | 互換 | ゲートウェイが使用するクライアント証明書。バックエンドサービスは、この証明書をゲートウェイの ID 認証に使用します。 |
nginx.ingress.kubernetes.io/proxy-ssl-name | サービス | 互換 | TLS ハンドシェイク中に使用される SNI。 |
nginx.ingress.kubernetes.io/proxy-ssl-server-name | サービス | 互換 | TLS ハンドシェイク中の SNI の使用を有効または無効にします。 |
認証と権限付与
基本
アノテーション | 適用範囲 | サポートレベル | 説明 |
nginx.ingress.kubernetes.io/auth-type | Ingress | 部分的に互換。Basic のみサポートされています。 | 認証タイプ。 |
nginx.ingress.kubernetes.io/auth-secret | Ingress | 互換 | Secret の名前 ( |
nginx.ingress.kubernetes.io/auth-secret-type | Ingress | 互換 | Secret コンテンツのフォーマット。
|
nginx.ingress.kubernetes.io/auth-realm | Ingress | 互換 | 保護レルム。同じ名前のレルムはユーザー名とパスワードを共有します。 |
Nginx Ingress アノテーションの詳細については、「公式ドキュメント」をご参照ください。