Service Mesh (ASM) では、ASMLocalRateLimiter カスタムリソース定義 (CRD) を使用して、ローカルレート制限を宣言的に構成できます。このトピックでは、構成例を示し、ASMLocalRateLimiter のフィールドについて説明します。
構成例
例 1: ゲートウェイのレート制限
次の構成では、ゲートウェイにレート制限を適用して、ダウンストリームサービスが着信トラフィックによって過負荷になるのを防ぎます。seconds を 1 に、quota を 100 に設定すると、毎秒 100 個のトークンが発行されます。これは、ゲートウェイが毎秒最大 100 件のリクエストを処理できることを意味します。
構成内の limit.quota は、単一のゲートウェイインスタンスに適用されます。ゲートウェイに n 個のインスタンスがある場合、test1 ルートのバックエンドサービスのレート制限のしきい値は n × quota になります。ゲートウェイインスタンスの数を調整する場合は、レート制限のしきい値も調整する必要があります。
例 2: クライアント側のレート制限
この例では、バージョン 1.25.6.74 以降の ASM インスタンスが必要です。
次の例では、sleep アプリケーションから httpbin サービスへのリクエストを 10 秒ごとに 1 回に制限します。
例 3: サーバー側のレート制限
この例では、バージョン 1.25.6.74 以降の ASM インスタンスが必要です。
次の例では、httpbin アプリケーションへのアクセスを 10 秒ごとに 1 回に制限します。
例 4: Waypoint のレート制限
次の例では、default という名前の Waypoint が httpbin サービスに転送するリクエストを 10 秒ごとに 1 回のみに制限します。
この例は Ambient モードにのみ適用され、バージョン 1.25.6.74 以降の ASM インスタンスが必要です。
フィールドの説明
apiVersion
ASM インスタンスのバージョンが 1.15.3.105 以降の場合は、
apiVersion: istio.alibabacloud.com/v1を使用できます。ACK クラスターに既存の構成がある場合は、対応する ASMLocalRateLimiter CRD のapiVersion: istio.alibabacloud.com/v1beta1をapiVersion: istio.alibabacloud.com/v1に変更してから再デプロイしてください。ASM インスタンスのバージョンが 1.15.3.105 より前の場合は、
apiVersion: istio.alibabacloud.com/v1beta1を使用できます。
spec
次の表は、spec セクションのフィールドについて説明しています。ASMLocalRateLimiter の機能と使用例の詳細については、「イングレスゲートウェイのローカルレート制限を構成する」をご参照ください。
フィールド | タイプ | 必須 | 説明 |
workloadSelector | map<string, string> | はい | レート制限構成が有効になる特定の Pod のセットを指定するために使用される 1 つ以上のラベル。ラベル検索の範囲は、リソースが存在する構成の名前空間に限定されます。詳細については、「Workload Selector」をご参照ください。 |
isGateway | bool | いいえ | 構成がゲートウェイに適用されるかどうかを指定します。デフォルト値は |
configs | はい | ローカルレート制限の構成。複数の構成を構成できます。 | |
applyToTraffic | string | いいえ | レート制限ポリシーが適用されるトラフィックタイプ。オプションのパラメーター:
デフォルト値は 説明 このフィールドは ASM 1.25 以降のバージョンでのみサポートされます。 |
LocalRateLimiterConfig
フィールド | タイプ | 必須 | 説明 |
name | string | はい | 単一のレート制限構成の名前。 |
match | はい | 一致条件。 | |
limit | はい | レート制限のしきい値の構成。 | |
limit_overrides | いいえ | レート制限のしきい値のオーバーライド構成。このフィールドを使用して、特定のリクエストに対して個別のレート制限のしきい値を指定できます。複数のオーバーライド構成を構成できます。 説明 ASM 1.19.0 以降のバージョンでのみサポートされます。 | |
target_services | いいえ | レート制限ポリシーが適用されるサービス。 説明 このフィールドは ASM 1.25 以降のバージョンでのみサポートされます。 |
TargetServiceRef
このフィールドは ASM 1.25 以降のバージョンでのみサポートされます。
フィールド | タイプ | 必須 | 説明 |
kind | string | いいえ | レート制限ポリシーが適用されるサービスの種類。有効な値:
デフォルト値は |
name | string | はい | レート制限ポリシーが適用されるサービスの名前。 |
namespace | string | いいえ | レート制限ポリシーが適用されるサービスが存在する名前空間。デフォルト値は、レート制限ポリシーを定義する名前空間です。 |
port | int32 | いいえ | レート制限ポリシーが適用されるサービスのポート。 |
section_name | string | いいえ | サービスの追加プロパティ。このフィールドは
|
例 1
次の例は、default 名前空間の httpbin サービスのポート 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: defaultRemoteAddressMatcher
フィールド | タイプ | 説明 | |
distinct | bool | いいえ | リクエストの異なるソース IP にレート制限を個別に適用するかどうかを指定します。 説明 このフィールドは ASM 1.25 以降のバージョンでのみサポートされます。 |
RatelimitMatch
フィールド | タイプ | 必須 | 説明 |
vhost | いいえ | VirtualHost の一致条件。 |
LimitConfig
フィールド | タイプ | 必須 | 説明 |
status | int | いいえ | スロットルされたリクエストに対するカスタム HTTP 応答コード。リクエストがスロットルされると、この応答コードが返されます。デフォルト値は 429 です。値は 400 以上である必要があります。 説明 このフィールドは ASM 1.24.6.64 以降のバージョンでサポートされます。 |
fill_interval | Duration | いいえ | トークンを補充する時間単位。例: |
quota | int | いいえ | トークンの数。値は整数である必要があります。例:1000。 |
per_downstream_connection | bool | いいえ | レートリミッターのトークンバケットの範囲。デフォルト値は 有効な値:
説明 ASM 1.13.4 以降のバージョンでのみサポートされます。 |
custom_response_body | string | いいえ | リクエストがスロットルされたときに返すカスタム応答本文のコンテンツ。 説明 ASM 1.13.4 以降のバージョンでのみサポートされます。 |
response_header_to_add | map[string]string | いいえ | リクエストがスロットルされたときに追加するカスタムヘッダーのコンテンツ。 説明 ASM 1.13.4 以降のバージョンでのみサポートされます。 |
RateLimitOverrideConfig
フィールド | タイプ | 必須 | 説明 |
request_match | はい | レート制限のしきい値のオーバーライド構成で指定されたリクエストの一致条件。一致条件を満たすリクエストのみに、オーバーライド構成のレート制限のしきい値が適用されます。 | |
limit | はい | レート制限のしきい値のオーバーライド構成で指定されたリクエストのレート制限のしきい値。 説明 レート制限のしきい値のオーバーライド構成 (RateLimitOverrideConfig) で limit フィールドが宣言されている場合、fill_interval と quota フィールドのみが有効になります。他のフィールド (per_downstream_connection、custom_response_body、および response_header_to_add) は、LocalRateLimiterConfig.limit フィールドの宣言と一致したままになります。 |
VirtualHostMatch
フィールド | タイプ | 必須 | 説明 |
name | string | はい | 一致させる |
port | int | いいえ | 一致させるリクエストポート。 |
route | いいえ | 一致させるリクエストインターフェイスに対応するルートの名前。 |
RouteMatch
フィールド | タイプ | 必須 | 説明 |
name_match | string | いいえ | 一致させるルートの名前。これは |
header_match | いいえ | 一致させるサービスリクエストのヘッダー。複数のヘッダーを構成できます。 重要 ASM 1.19.0 以降のバージョンでは、このフィールドは非推奨です。リクエストを照合するには RateLimitOverrideConfig を使用してください。 |
RequestMatcher
RequestMatcher では複数のフィールドを同時に使用できます。複数のフィールドを使用する場合、リクエストが一致と見なされるには、すべての一致条件を満たす必要があります。
フィールド | タイプ | 必須 | 説明 |
header_match | いいえ | 一致させるリクエストヘッダー。複数のヘッダーを構成できます。 | |
query_match | いいえ | 一致させるリクエストのクエリパラメーター。複数のクエリパラメーターを構成できます。 |
HeaderMatcher
フィールド | タイプ | 必須 | 説明 | |
name | string | いいえ | ヘッダー名。 | |
次のいずれかを選択します | regex_match | string | いいえ | 正規表現一致。 |
exact_match | string | いいえ | 完全一致。 | |
prefix_match | string | いいえ | プレフィックス一致。文字列の先頭に基づいて一致させます。 | |
suffix_match | string | いいえ | サフィックス一致。文字列の末尾に基づいて一致させます。 | |
present_match | bool | いいえ |
| |
invert_match | bool | いいえ | デフォルト値は false です。
| |
distinct | bool | いいえ | 同じリクエストヘッダーの異なる値に対して個別のレート制限バケットを割り当てるかどうかを指定します。distinct を true に設定した場合、他のマッチタイプは使用できません。 説明 このフィールドは ASM 1.25 以降のバージョンでのみサポートされます。 | |
QueryParameterMatcher
フィールド | タイプ | 必須 | 説明 | |
name | string | はい | クエリパラメーターの名前。 | |
次のいずれかを選択します | exact_match | string | いいえ | クエリパラメーターのコンテンツと完全に一致します。 |
prefix_match | string | いいえ | クエリパラメーターのコンテンツとプレフィックスが一致します。 | |
suffix_match | string | いいえ | クエリパラメーターのコンテンツとサフィックスが一致します。 | |
regex_match | string | いいえ | クエリパラメーターのコンテンツと正規表現が一致します。 | |
contains_match | string | いいえ | クエリパラメーターのコンテンツの部分一致。これにより、クエリパラメーターのコンテンツに特定のサブストリングが含まれている必要があります。 | |
present_match | bool | いいえ |
| |
ignore_case | bool | いいえ | クエリパラメーターを照合する際に大文字と小文字を区別しないかどうかを指定します。 | |