レート制限
ratelimit カスタムリソース定義 (CRD) を使用すると、Kubernetesネイティブ構成を使用してNetScaler®上でレート制限およびスロットリングポリシーを設定できます。ratelimit CRDを使用すると、リクエスト、接続、またはトークンのレートを制限することで、サービスとAIバックエンドを過負荷から保護できます。
ratelimit CRDを使用して、次のことができます。
-
リクエストレート、接続数、またはトークンレートに基づいてトラフィックをスロットルします。
-
クライアントIPアドレスごと、APIパスごと、HTTPメソッドごと、またはHTTPヘッダーによって識別されるAPIクライアントごとに制限を適用します。
-
制限を超過した場合に実行するアクション(リクエストのドロップ、リセット、リダイレクト、応答など)を選択します。
-
ストリーム識別子を使用してトラフィック分析を収集し、リクエスト、接続、応答時間、帯域幅、およびトークン使用量の可観測性を実現します。
ratelimit CRDは、ExtensionRef フィルターを介して aigatewayroute から参照されるか、servicenames または targetRef を介してサービスに直接適用されます。
注:
ratelimits または streams の少なくともいずれか1つを指定する必要があります。
ratelimit CRDを展開する
ratelimit CRD をダウンロードし、次のコマンドを使用して展開します。
kubectl create -f https://raw.githubusercontent.com/netscaler/netscaler-k8s-ingress-controller/refs/heads/master/crd/ratelimit/ratelimit-crd.yaml
注:
CRDデプロイメントYAMLファイルを変更しないでください。
レートリミット CRD 属性
注記:
NetScaler Kubernetes Gateway Controller 2.2.0以降のリリースでは、
ratelimit CRDスキーマの属性はratelimits specの下に更新されました。また、新しいレート制限属性が導入されています。以前のリリースでは、ratelimit CRDスキーマはspecの下に直接定義されていました。
次の表に、
ratelimit CRDのspecの下で利用可能なトップレベルの属性を示します。
| 属性 | 説明 | サポートされる値 |
|---|---|---|
ingressclass |
イングレスクラス。指定されていない場合、クラスター内のすべてのNetScaler Ingress Controllerがリソースを処理します。それ以外の場合、そのイングレスクラスを持つコントローラーのみが処理します。 | 文字列 |
servicenames |
レート制限ポリシーが適用されるサービスの名称。 | 文字列の配列(最大長127) |
gatewayClassName |
このプロファイルが適用されるGatewayClassの名称。 |
文字列 |
targetRef |
このプロファイルが適用されるターゲットリソースのリスト。 | 配列 |
selector_keys |
レート制限またはスロットリングが適用されるトラフィック一致条件。 | オブジェクト |
ratelimits |
レート制限設定のリスト。 | 配列 |
streams |
トラフィック分析および追跡のためのストリーム識別子設定のリスト。 | 配列 |
targetRef 属性
| 属性 | 説明 |
|---|---|
name |
ターゲットリソースの名前。 |
namespace |
ターゲットリソースの名前空間。 |
group |
ターゲットリソースのグループ。 |
kind |
ターゲットリソースの種類。 |
sectionName |
ターゲットリソース内の特定のセクション。 |
selector_keys 属性
selector_keys.basic オブジェクトは、トラフィックストリームの選択基準を定義します。すべてのキーはAND条件として適用されます。キーが指定されていない場合、レート制限はサービスレベルで適用されます。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
path |
APIリソースパスのプレフィックス一致。例えば /api/v1/products。 |
文字列の配列 |
method |
一致させるHTTPメソッド。 | GET, PUT, POST, DELETE, HEAD, OPTIONS, TRACE, CONNECT, PATCH, UNKNOWN_METHOD |
header_name |
一意のAPIクライアントを識別するHTTPヘッダー。例えば X-apikey。 |
文字列 |
per_client_ip |
設定されている場合、APIリソースにアクセスしている各一意のクライアントIPアドレスにスロットリング制限を適用します。 | ブール値 |
ratelimits属性
ratelimits の各エントリは、以下の属性をサポートします。req_threshold 属性は必須です。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
req_threshold |
タイムスライスごとに許可される最大リクエスト数。このフィールドは必須です。 | 整数 |
timeslice |
タイムスライス(ミリ秒単位、10の倍数)。デフォルトは1000ミリ秒です。 | 整数 |
limittype |
制限タイプ。指定しない場合、デフォルトは SMOOTH です。 |
BURSTY, SMOOTH |
mode |
制限が適用されるメトリック。 | REQUEST_RATE, CONNECTION, TOKEN_RATE |
alertsintimeslice |
タイムスライス内で発生させるアラートの数。 | 整数 |
throttle_action |
制限を超過した場合に実行するアクション。DROP は制限を超過したリクエストをドロップし、RESET はクライアント接続をリセットし、REDIRECT は指定された URL にリダイレクトし、RESPOND は 429 Exceeded allowed rate of requests で応答します。 |
DROP, RESET, REDIRECT, RESPOND, NOOP |
redirect_url |
throttle_action が REDIRECT の場合に使用されるリダイレクトURL。 |
文字列 |
logpackets |
メッセージをログに記録するかどうか、およびどのログに記録するかを指定する監査メッセージアクションを追加します。 | オブジェクト (logexpression, loglevel) |
The
logpackets オブジェクトは次の属性をサポートします。logpackets が使用される場合、両方とも必須です。
| 属性 | 説明 | サポートされる値 |
|---|---|---|
logexpression |
ログメッセージの形式と内容を定義するデフォルト構文の式。 | 文字列 (最大長 7991) |
loglevel |
生成されるログメッセージの重大度を指定する監査ログレベル。 | EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFORMATIONAL, DEBUG |
ストリーム属性
streams の各エントリは次の属性をサポートします。sort 属性は必須です。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
interval |
セッション統計 (リクエスト数、帯域幅、応答時間) を計算する際に使用するデータの分数。 | 整数 (1~10080) |
sampleCount |
評価のためにリクエストを選択するサンプルのサイズ。すべてのリクエストを評価するには、サンプル数を1に設定します。 | 整数 (1~65535) |
sort |
指定された統計列で、保存されたレコードを降順にソートします。このフィールドは必須です。 | REQUESTS (デフォルト), CONNECTIONS, RESPTIME, BANDWIDTH, RESPTIME_BREACHES, TOKENS, NONE |
snmpTrap |
ストリーム識別子に対するSNMPトラップを有効または無効にします。 | ENABLED, DISABLED |
appflowLog |
ストリーム識別子に対するAppFlowロギングを有効または無効にします。 | ENABLED, DISABLED |
trackAckOnlyPackets |
ACKのみのパケットを追跡します。パケットレート制限が使用されている場合にのみ適用されます。 | ENABLED, DISABLED |
trackTransactions |
設定されたしきい値を超えるトランザクションを追跡します。TOKENSに設定されている場合、トランザクションしきい値属性は適用されません。 |
RESPTIME, TOKENS, NONE |
maxTransactionThreshold |
追跡されるメトリックのトランザクションごとの最大値。 | 整数 (最小値 0) |
minTransactionThreshold |
追跡されるメトリックのトランザクションごとの最小値。 | 整数 (最小値 0) |
acceptanceThreshold |
違反しないトランザクションの合計トランザクションに対するしきい値。パーセンテージで表されます。小数点以下6桁までサポートされます。 | 文字列 (最大長 10) |
breachThreshold |
間隔で計算された違反トランザクションのしきい値。 | 整数 (最小値 0) |
log |
識別子で収集されたオブジェクトがログに記録される場所。 | SYSLOG, NONE |
logInterval |
収集されたオブジェクトをログに記録する時間間隔(分)。ストリーム識別子の間隔以上である必要があります。 | 整数 (1–10080) |
logLimit |
ログ間隔でログに記録されるオブジェクトの最大数。 | 整数 (1–1000) |
レート制限設定の記述方法
ratelimit YAML定義で、kindをratelimitとして設定します。specセクションで、selector_keysでスロットルするトラフィックを選択し、ratelimitsの下に制限を、streamsの下に分析を、またはその両方を定義します。
以下のガイドラインを念頭に置いてください。
-
ratelimitsまたはstreamsの少なくともいずれか1つを指定します。 -
AIバックエンドのトークンベースのレート制限を適用するには、
mode: TOKEN_RATEを使用します。 -
クライアントごとの制限を適用するには、
selector_keys.basic.per_client_ipまたはheader_nameを使用します。
レート制限設定の例
トークンベースのレート制限
以下の設定では、クライアントIPアドレスごとのトラフィックを1分あたり100,000トークンに制限し、制限を超過した場合、
429ステータスで応答します。
apiVersion: citrix.com/v1beta1
kind: ratelimit
metadata:
name: token-ratelimit
namespace: default
spec:
selector_keys:
basic:
path:
- /v1/chat/completions
method:
- POST
per_client_ip: true
ratelimits:
- req_threshold: 100000
timeslice: 60000
mode: TOKEN_RATE
limittype: SMOOTH
throttle_action: RESPOND
ロギング付きのAPIクライアントごとのリクエストレート制限
以下の設定では、各APIクライアント(
X-apikeyヘッダーで識別)を1秒あたり500リクエストに制限し、制限に違反した場合にログを記録します。
apiVersion: citrix.com/v1beta1
kind: ratelimit
metadata:
name: apikey-ratelimit
namespace: default
spec:
servicenames:
- ai-backend-service
selector_keys:
basic:
header_name: X-apikey
ratelimits:
- req_threshold: 500
timeslice: 1000
mode: REQUEST_RATE
limittype: BURSTY
throttle_action: DROP
logpackets:
logexpression: "\"Rate limit exceeded for client: \" + HTTP.REQ.HEADER(\"X-apikey\")"
loglevel: WARNING
トラフィック分析用のストリーム識別子
以下の設定では、制限を適用せずにトークン使用量に関する分析を収集します。
apiVersion: citrix.com/v1beta1
kind: ratelimit
metadata:
name: token-analytics
namespace: default
spec:
selector_keys:
basic:
path:
- /v1/chat/completions
streams:
- interval: 5
sampleCount: 1
sort: TOKENS
appflowLog: ENABLED
trackTransactions: TOKENS
log: SYSLOG
logInterval: 5
logLimit: 100
関連情報
-
レート制限とストリームの設定