Limitation de débit

Dernière publication : Oct 02, 2026
La définition de ressource personnalisée (CRD) ratelimit vous permet de configurer des politiques de limitation de débit et de régulation sur NetScaler® en utilisant la configuration native de Kubernetes. Vous pouvez utiliser la CRD ratelimit pour protéger vos services et vos backends d'IA contre la surcharge en limitant le débit des requêtes, des connexions ou des jetons.
Vous pouvez utiliser la CRD ratelimit pour :
  • Réguler le trafic en fonction du débit des requêtes, du nombre de connexions ou du débit des jetons.
  • Appliquer des limites par adresse IP du client, par chemin d'API, par méthode HTTP ou par client API identifié par un en-tête HTTP.
  • Choisir l'action à entreprendre lorsqu'une limite est dépassée, telle que la suppression, la réinitialisation, la redirection ou la réponse aux requêtes.
  • Collecter des analyses de trafic avec des identifiants de flux pour l'observabilité des requêtes, des connexions, des temps de réponse, de la bande passante et de l'utilisation des jetons.
La CRD ratelimit est référencée à partir d'un aigatewayroute via un filtre ExtensionRef, ou appliquée directement aux services via servicenames ou targetRef.
Remarque :
Vous devez spécifier au moins l'un des éléments ratelimits ou streams.

Déployer la CRD de limitation de débit

Téléchargez la CRD de limitation de débit et déployez-la à l'aide de la commande suivante :
kubectl create -f https://raw.githubusercontent.com/netscaler/netscaler-k8s-ingress-controller/refs/heads/master/crd/ratelimit/ratelimit-crd.yaml
Remarque :
Ne modifiez pas le fichier YAML de déploiement de la CRD.

Attributs de la CRD de limitation de débit

Remarque :
Dans NetScaler Kubernetes Gateway Controller 2.2.0 et les versions ultérieures, les attributs du schéma CRD ratelimit sont mis à jour pour être sous la spécification ratelimits. De nouveaux attributs de limitation de débit sont également introduits. Dans les versions précédentes, le schéma CRD ratelimit était défini directement sous spec.
Le tableau suivant répertorie les attributs de niveau supérieur disponibles sous spec pour le CRD ratelimit.
Attribut Description Valeurs prises en charge
ingressclass Classe d'entrée. Si elle n'est pas spécifiée, tous les contrôleurs d'entrée NetScaler du cluster traitent la ressource. Sinon, seul le contrôleur avec cette classe d'entrée la traite. Chaîne
servicenames Nom des services auxquels les politiques de limitation de débit sont appliquées. Tableau de chaînes (longueur maximale 127)
gatewayClassName Nom du GatewayClass auquel ce profil est appliqué. Chaîne
targetRef Liste des ressources cibles où ce profil est appliqué. Tableau
selector_keys Critères de correspondance du trafic auxquels s'applique la limitation de débit ou la régulation. Objet
ratelimits Liste des configurations de limitation de débit. Tableau
streams Liste des configurations d'identificateurs de flux pour l'analyse et le suivi du trafic. Tableau

Attributs targetRef

Attribut Description
name Nom de la ressource cible.
namespace Espace de noms de la ressource cible.
group Groupe de la ressource cible.
kind Type de la ressource cible.
sectionName Section spécifique au sein de la ressource cible.

Attributs selector_keys

L'objet selector_keys.basic définit les critères de sélection du flux de trafic. Toutes les clés sont appliquées comme une condition ET. Si aucune clé n'est spécifiée, la limite de débit s'applique au niveau du service.
Attribut Description Valeurs prises en charge
path Correspondance du préfixe du chemin de ressource API, par exemple /api/v1/products. Tableau de chaînes
method Méthodes HTTP à faire correspondre. GET, PUT, POST, DELETE, HEAD, OPTIONS, TRACE, CONNECT, PATCH, UNKNOWN_METHOD
header_name En-tête HTTP qui identifie le client API unique, par exemple X-apikey. Chaîne
per_client_ip Lorsqu'il est défini, applique la limite de limitation à chaque adresse IP de client unique accédant à la ressource API. Booléen

Attributs de ratelimits

Chaque entrée dans ratelimits prend en charge les attributs suivants. L'attribut req_threshold est requis.
Attribut Description Valeurs prises en charge
req_threshold Nombre maximal de requêtes par tranche de temps autorisé. Ce champ est obligatoire. Entier
timeslice Tranche de temps en millisecondes, par multiples de 10. La valeur par défaut est 1000 millisecondes. Entier
limittype Type de limite. La valeur par défaut est SMOOTH si non spécifié. BURSTY, SMOOTH
mode Métrique à laquelle la limite est appliquée. REQUEST_RATE, CONNECTION, TOKEN_RATE
alertsintimeslice Nombre d'alertes à déclencher dans un intervalle de temps. Entier
throttle_action Action à effectuer lorsque la limite est dépassée. DROP supprime les requêtes dépassant la limite, RESET réinitialise la connexion client, REDIRECT redirige vers l'URL spécifiée, RESPOND répond avec 429 Exceeded allowed rate of requests. DROP, RESET, REDIRECT, RESPOND, NOOP
redirect_url URL de redirection utilisée lorsque throttle_action est REDIRECT. Chaîne de caractères
logpackets Ajoute une action de message d'audit qui spécifie si le message doit être journalisé et dans quel journal. Objet (logexpression, loglevel)
L'objet logpackets prend en charge les attributs suivants. Les deux sont requis lorsque logpackets est utilisé.
Attribut Description Valeurs prises en charge
logexpression Expression de syntaxe par défaut qui définit le format et le contenu du message de journal. Chaîne (longueur maximale 7991)
loglevel Niveau de journal d'audit qui spécifie la gravité du message de journal généré. EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFORMATIONAL, DEBUG

attributs des flux

Chaque entrée dans streams prend en charge les attributs suivants. L'attribut sort est requis.
Attribut Description Valeurs prises en charge
interval Nombre de minutes de données à utiliser lors du calcul des statistiques de session (nombre de requêtes, bande passante et temps de réponse). Entier (1–10080)
sampleCount Taille de l'échantillon à partir duquel sélectionner une requête pour évaluation. Pour évaluer toutes les requêtes, définissez le nombre d'échantillons sur 1. Entier (1–65535)
sort Trie les enregistrements stockés par la colonne de statistiques spécifiée, par ordre décroissant. Ce champ est obligatoire. REQUESTS (par défaut), CONNECTIONS, RESPTIME, BANDWIDTH, RESPTIME_BREACHES, TOKENS, NONE
snmpTrap Active ou désactive le piège SNMP pour l'identifiant de flux. ENABLED, DISABLED
appflowLog Active ou désactive la journalisation AppFlow pour l'identifiant de flux. ENABLED, DISABLED
trackAckOnlyPackets Suit les paquets ACK uniquement. Applicable uniquement lorsque la limitation du débit de paquets est utilisée. ENABLED, DISABLED
trackTransactions Suivre les transactions dépassant le seuil configuré. Lorsqu'il est défini sur TOKENS, les attributs de seuil de transaction ne s'appliquent pas. RESPTIME, TOKENS, NONE
maxTransactionThreshold Valeur maximale par transaction de la métrique suivie. Entier (minimum 0)
minTransactionThreshold Valeur minimale par transaction de la métrique suivie. Entier (minimum 0)
acceptanceThreshold Seuil des transactions non-violantes par rapport au total des transactions, exprimé en pourcentage. Un maximum de 6 décimales est pris en charge. Chaîne (longueur maximale 10)
breachThreshold Seuil des transactions violantes calculé sur l'intervalle. Entier (minimum 0)
log Emplacement où les objets collectés sur l'identifiant sont enregistrés. SYSLOG, NONE
logInterval Intervalle de temps en minutes pour l'enregistrement des objets collectés. Doit être supérieur ou égal à l'intervalle de l'identifiant de flux. Entier (1–10080)
logLimit Nombre maximal d'objets à enregistrer dans l'intervalle de journalisation. Entier (1–1000)

Comment rédiger la configuration de la limite de débit

Dans la définition YAML ratelimit, définissez kind comme ratelimit. Dans la section spec, sélectionnez le trafic à limiter avec selector_keys, et définissez les limites sous ratelimits, les analyses sous streams, ou les deux.
Gardez les directives suivantes à l'esprit :
  • Spécifiez au moins l'un des éléments ratelimits ou streams.
  • Utilisez mode: TOKEN_RATE pour appliquer la limitation de débit basée sur les jetons pour les backends d'IA.
  • Utilisez selector_keys.basic.per_client_ip ou header_name pour appliquer des limites par client.
  • Attachez le CRD ratelimit à un aigatewayroute via un filtre ExtensionRef, ou liez-le à des services via servicenames ou targetRef.

Exemples de configurations de limitation de débit

Limitation de débit basée sur les jetons

La configuration suivante limite le trafic par adresse IP client à 100 000 jetons par minute et répond avec un statut 429 lorsque la limite est dépassée.
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

Limitation de débit des requêtes par client API avec journalisation

La configuration suivante limite chaque client API (identifié par l'en-tête X-apikey) à 500 requêtes par seconde et enregistre un journal lorsque la limite est dépassée.
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

Identifiant de flux pour l'analyse du trafic

La configuration suivante collecte des analyses sur l'utilisation des jetons sans appliquer de limite.
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

Articles connexes