Service Mesh (ASM) では、カスタムリソース定義 (CRD) を使用して ASMGlobalRateLimiter 構成を宣言的に定義し、グローバルスロットリングを実装できます。このトピックでは、ASMGlobalRateLimiter CRD のフィールドについて説明します。
構成例
例 1:サーバーサイドスロットリング
この例では、バージョン 1.25.6.74 以降の ASM インスタンスが必要です。
次の例では、httpbin アプリケーションへのアクセスを 1 分あたり 1 回に制限します。
例 2:クライアントサイドスロットリング
この例では、バージョン 1.25.6.74 以降の ASM インスタンスが必要です。
次の例では、sleep アプリケーションから httpbin サービスへのアクセスを 1 分あたり 1 回のみに制限します。
例 3:Waypoint スロットリング
この例は Ambient モードにのみ適用され、バージョン 1.25.6.74 以降の ASM インスタンスが必要です。
この例では、default Waypoint 上のアプリケーションに対してスロットリングルールを構成します。リクエストに x-user リクエストヘッダーが含まれている場合、ヘッダー値に基づいてバケットが割り当てられ、アクセスは 1 分あたり 1 回に制限されます。リクエストにヘッダーが含まれていない場合、アクセスは 1 分あたり 20 回に制限されます。
spec
フィールド | タイプ | 必須 | 説明 |
workloadSelector | map<string, string> | はい | 速度制限ルールが適用されるワークロードのセットを指定する 1 つ以上のラベル。ラベルベースの検索の範囲は、リソースが存在する名前空間に制限されます。詳細については、「Workload Selector」をご参照ください。 |
isGateway | bool | いいえ | 速度制限ルールをゲートウェイに適用するかどうかを指定します。デフォルト値: false。 |
rateLimitService | はい | グローバル速度制限サービスの構成。 | |
configs | はい | グローバルスロットリングルール。複数のルールを構成できます。 | |
applyToTraffic | string | いいえ | レート制限ポリシーが適用されるトラフィックタイプ。オプションのパラメーター:
デフォルト値は 説明 このフィールドは ASM 1.25 以降のバージョンでのみサポートされます。 |
RateLimitServiceConfig
フィールド | タイプ | 必須 | 説明 |
host | string | はい | グローバル速度制限サービスが存在するクラスターのドメイン名。 |
port | int | はい | グローバル速度制限サービスの gRPC サービスポート。 |
timeout | Duration | いいえ | メッシュプロキシがグローバルスロットリングサービスに接続するためのタイムアウト期間。例: |
GlobalRateLimiterConfig
フィールド | タイプ | 必須 | 説明 |
name | string | はい | 速度制限ルールの名前。 |
match | はい | 一致基準。 | |
limit | はい | 速度制限しきい値の構成。 | |
limit_overrides | いいえ | 構成済みの速度制限しきい値をオーバーライドするかどうかを指定します。このフィールドを使用して、特定のリクエストに対して個別に速度制限しきい値を指定できます。複数の速度制限しきい値オーバーライドを構成できます。 説明 このフィールドは、V1.19.0 以降の ASM インスタンスでのみサポートされています。 | |
target_services | いいえ | スロットリングポリシーが適用されるサービス。 説明 このフィールドは ASM 1.25 以降のバージョンでのみサポートされます。 |
TargetServiceRef
このフィールドは ASM 1.25 以降のバージョンでのみサポートされます。
フィールド | タイプ | 必須 | 説明 |
kind | string | いいえ | レート制限ポリシーが適用されるサービスの種類。有効な値:
デフォルト値は |
name | string | はい | レート制限ポリシーが適用されるサービスの名前。 |
namespace | string | いいえ | レート制限ポリシーが適用されるサービスが存在する名前空間。デフォルト値は、レート制限ポリシーを定義する名前空間です。 |
port | int32 | いいえ | レート制限ポリシーが適用されるサービスのポート。 |
section_name | string | いいえ | サービスの追加プロパティ。このフィールドは
|
例 1
次の例は、default 名前空間の httpbin Service のポート 8000 に適用されます。
target_services:
- kind: Service
namespace: default
name: httpbin
port: 8000例 2
現在のインスタンスに次の ServiceEntry が存在すると仮定します。
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: se-httpbin-external
spec:
hosts:
- httpbin.test.com
location: MESH_EXTERNAL
ports:
- name: http
number: 80
protocol: HTTP
- name: https
number: 443
protocol: HTTPS
resolution: DNS次のポリシーは、この ServiceEntry のポート 80 に適用されます。
target_services:
- kind: ServiceEntry
namespace: default
name: se-httpbin-external
port: 80例 3
現在のインスタンスに次の VirtualService が存在すると仮定します。
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: vs-httpbin
spec:
hosts:
- httpbin.test.com
http:
- name: default
route:
- destination:
host: httpbin
port:
number: 8000次のポリシーは、VirtualService 内の default という名前のルーティングルールに適用されます。
target_services:
- kind: VirtualService
namespace: default
name: vs-httpbin
section_name: defaultレート制限一致
フィールド | タイプ | 必須 | 説明 |
vhost | はい | 仮想ホストの一致基準です。 |
GlobalServiceLimitConfig
フィールド | 種類 | 必須 | 説明 |
単位 | 文字列 | はい | 速度制限時間の単位。有効な値:
|
クォータ | int | はい | 単位時間あたりに許可されるリクエストの総数。 |
GlobalRateLimitOverrideConfig
フィールド | タイプ | 必須 | 説明 |
request_match | はい | 速度制限しきい値のオーバーライド構成が適用される際にリクエストが一致する必要がある条件。オーバーライド構成で指定された速度制限しきい値は、条件に一致するリクエストにのみ適用されます。 | |
limit | はい | 速度制限しきい値のオーバーライド構成で指定された速度制限しきい値。 |
VirtualHostMatch
フィールド | タイプ | 必須 | 説明 |
name | string | はい | 一致させる仮想ホストの名前です。 |
port | int | いいえ | 一致させるリクエスト ポートです。 |
route | いいえ | 一致させるリクエスト ポートに対応するルートの名前です。 |
ルート一致
フィールド | タイプ | 必須 | 説明 |
name_match | string | いいえ | 一致させるルートの名前。このフィールドは、仮想サービス内の単一のルートを指定します。 |
header_match | いいえ | 一致させるサービスリクエストのヘッダー。複数のヘッダーを設定できます。 説明 V1.19.0 以降の ASM インスタンスでは、このフィールドは非推奨です。 GlobalRateLimitOverrideConfig を使用してリクエストを一致させることをお勧めします。 |
RequestMatcher
RequestMatcher セクションでは、複数のフィールドを同時に使用できます。その場合、リクエストは指定されたすべてのフィールドの基準を満たした場合にのみ一致します。
フィールド | タイプ | 必須 | 説明 |
header_match | いいえ | リクエストを照合するためのヘッダー。複数のヘッダーを設定できます。 | |
remote_address | いいえ | リクエストを照合するための送信元 IP アドレス。 | |
query_match | いいえ | リクエストを照合するためのクエリパラメーター。複数のクエリパラメーターを設定できます。 |
RemoteAddressMatcher
フィールド | タイプ | 必須 | 説明 |
address | string | はい | リクエストを照合するための送信元 IP アドレス。 |
v4_prefix_mask_len | uint32 | いいえ | IPv4 アドレス範囲を照合する場合、このフィールドに IPv4 アドレスのサブネットマスク長を入力し、address フィールドに IPv4 アドレスを入力します。 サブネットマスクを使用した後に計算されたアドレス範囲が照合されます。 |
v6_prefix_mask_len | uint32 | いいえ | IPv6 アドレス範囲を照合する場合、このフィールドに IPv6 アドレスのサブネットマスク長を入力し、address フィールドに IPv6 アドレスを入力します。 サブネットマスクを使用した後に計算されたアドレス範囲が照合されます。 |
HeaderMatcher
フィールド | タイプ | 必須 | 説明 | |
name | string | いいえ | ヘッダーの名前。 | |
次のいずれかを選択 | regex_match | string | いいえ | ヘッダー照合に使用する正規表現。 |
exact_match | string | いいえ | 完全一致照合に使用する値。 | |
prefix_match | string | いいえ | プレフィックス照合に使用するプレフィックス。 | |
suffix_match | string | いいえ | サフィックス照合に使用するサフィックス。 | |
present_match | bool | いいえ |
| |
invert_match | bool | いいえ | デフォルト値は false です。
| |
QueryParameterMatcher
フィールド | タイプ | 必須 | 説明 | |
name | string | はい | クエリパラメーターの名前。 | |
次のいずれかを選択 | exact_match | string | いいえ | クエリパラメーターとの完全一致に使用する値。 |
prefix_match | string | いいえ | クエリパラメーターとのプレフィックス一致に使用するプレフィックス。 | |
suffix_match | string | いいえ | クエリパラメーターとのサフィックス一致に使用するサフィックス。 | |
regex_match | string | いいえ | クエリパラメーターとの正規表現一致に使用する正規表現。 | |
contains_match | string | いいえ | クエリパラメーターに部分一致させるための文字列。 クエリパラメーターの値には、この文字列が含まれている必要があります。 | |
present_match | bool | いいえ |
| |
ignore_case | bool | いいえ | クエリパラメーターの一致を実行するときに、大文字と小文字を区別するかどうかを指定します。 | |
関連ドキュメント
詳細については、「ASMGlobalRateLimiter を使用したイングレスゲートウェイおよびサービスへのインバウンドトラフィックのグローバルスロットリング設定」をご参照ください。