サービスメッシュ (ASM) では、カスタムリソース定義 (CRD) を使用して ASMLocalRateLimiter の構成を宣言的に定義することで、ローカルレート制限を実現できます。このトピックでは、ASMLocalRateLimiter のフィールドについて説明し、構成例を示します。
構成例
次の構成では、ゲートウェイにレート制限を適用して、ダウンストリームサービスが着信トラフィックによって過負荷にならないようにします。seconds
を 1 に、quota
を 100 に設定すると、1 秒あたり 100 トークンが許可されます。つまり、ゲートウェイは 1 秒あたり最大 100 リクエストを処理します。
構成の limit.quota
は、単一のゲートウェイインスタンスにのみ適用されます。 n 個のゲートウェイインスタンスがある場合、ルートのバックエンドサービスレート制限しきい値は n*quota になります。ゲートウェイインスタンスの数が変更された場合は、それに応じてしきい値を調整してください。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMLocalRateLimiter
metadata:
name: for-api-test
namespace: default
spec:
workloadSelector:
labels:
app: istio-ingressgateway
isGateway: true
configs:
- match:
vhost:
name: "www.example1.com" # ゲートウェイに複数の仮想ホストが構成されている場合は、最後の仮想ホストの名前を入力します。
port: 80
route:
name_match: "test1" # 仮想サービスに構成されているルートの名前。仮想サービスに指定されたルートがない場合、レート制限は有効になりません。
limit:
fill_interval:
seconds: 1
quota: 10
- match:
vhost:
name: "www.example2.com"
port: 80
route:
name_match: "test1"
limit:
fill_interval:
seconds: 1
quota: 100
フィールドの説明
apiVersion
ASM 1.15.3.105 以降では、
istio.alibabacloud.com/v1
の使用がサポートされています。 Container Service for Kubernetes (ACK) クラスタで ASMCircuitBreaker を構成したときに apiVersion フィールドをistio.alibabacloud.com/v1beta1
に設定している場合は、値をistio.alibabacloud.com/v1
に変更し、クラスタを再デプロイします。1.15.3.105 より前の ASM の場合は、apiVersion フィールドを
istio.alibabacloud.com/v1beta1
に設定します。
spec
次の表は、spec セクションのフィールドについて説明しています。詳細については、「イングレスゲートウェイでローカルレート制限を設定する」をご参照ください。
フィールド | タイプ | 必須 | 説明 |
workloadSelector | map<string, string> | はい | ラベルを使用して、レート制限ルールが有効になる Pod のセットを指定します。ラベルベースの検索の範囲は、リソースが存在する名前空間に制限されます。詳細については、「ワークロードセレクター」をご参照ください。 |
isGateway | bool | いいえ | レート制限ルールがゲートウェイで有効になるかどうかを指定します。デフォルト値: |
configs | はい | ローカルレート制限ルール。 |
LocalRateLimiterConfig
フィールド | タイプ | 必須 | 説明 |
name | string | はい | レート制限ルールの名前。 |
match | はい | 一致した条件。 | |
limit | はい | レート制限しきい値の構成です。 | |
limit_overrides | いいえ | 設定済みのレート制限しきい値をオーバーライドするかどうかを指定します。 このフィールドを使用して、特定のリクエストのレート制限しきい値を指定できます。 V1.19.0 より前の ASM は、このフィールドをサポートしていません。 |
RatelimitMatch
フィールド | タイプ | 必須 | 説明 |
vhost | いいえ | 仮想ホストの一致基準。 |
LimitConfig
フィールド | タイプ | 必須 | 説明 |
status | int | いいえ | トラフィックがレート制限を超えたときに返される状態コード。デフォルトは 429 です。 400 以上である必要があります。 V1.24.6.64 より前の ASM は、このフィールドをサポートしていません。 |
fill_interval | Duration | いいえ | トークンが発行される間隔。例: |
quota | int | いいえ | トークンの数。値は整数である必要があります。例:1000。 |
per_downstream_connection | bool | いいえ | トークンバケットを共有できる範囲を指定します。デフォルト値: 有効な値:
V1.13.4 より前の ASM は、このフィールドをサポートしていません。 |
custom_response_body | string | いいえ | レート制限のためにリクエストが拒否されたときに返される本文コンテンツ。 V1.13.4 より前の ASM は、このフィールドをサポートしていません。 |
response_header_to_add | map[string]string | いいえ | レート制限のためにリクエストが拒否されたときに応答に追加されるカスタムヘッダー。 V1.13.4 より前の ASM は、このフィールドをサポートしていません。 |
RateLimitOverrideConfig
フィールド | タイプ | 必須 | 説明 |
request_match | はい | 一致ルール。 | |
limit | はい | 一致したリクエストが制限されるレート制限。 RateLimitOverrideConfig で宣言されている場合、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 V1.19.0 以降、このフィールドは非推奨です。 RateLimitOverrideConfig を代わりに使用してください。 |
RequestMatcher
以下のフィールドが同時に宣言されている場合、両方のフィールドで指定されたルールを満たすリクエストのみが一致します。
フィールド | タイプ | 必須 | 説明 |
header_match | いいえ | 一致したヘッダー。 | |
query_match | いいえ | 一致したクエリ。 |
HeaderMatcher
フィールド | タイプ | 必須 | 説明 | |
name | string | いいえ | ヘッダーの名前。 | |
一致モードに基づいてフィールドのいずれか 1 つを指定します | regex_match | string | いいえ | 正規表現。 |
exact_match | string | いいえ | 完全一致式。 | |
prefix_match | string | いいえ | プレフィックス一致式。 | |
suffix_match | string | いいえ | サフィックス一致式。 | |
present_match | bool | いいえ |
| |
invert_match | bool | いいえ | デフォルト値: false。
|
QueryParameterMatcher
フィールド | タイプ | 必須 | 説明 | |
name | string | はい | クエリパラメーターの名前。 | |
一致モードに基づいてフィールドのいずれか 1 つを指定します | exact_match | string | いいえ | 完全一致式。 |
prefix_match | string | いいえ | プレフィックス一致式。 | |
suffix_match | string | いいえ | サフィックス一致式。 | |
regex_match | string | いいえ | 正規表現一致式。 | |
contains_match | string | いいえ | クエリパラメータ値には、指定された内容が含まれている必要があります。 | |
present_match | bool | いいえ |
| |
ignore_case | bool | いいえ | 大文字と小文字を区別するかどうかを指定します。 |