レート制限

最終公開日 : Oct 02, 2026
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を使用します。
  • ratelimit CRDをExtensionRefフィルターを介してaigatewayrouteにアタッチするか、servicenamesまたはtargetRefを介してサービスにバインドします。

レート制限設定の例

トークンベースのレート制限

以下の設定では、クライアント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

関連情報