Limitation de débit
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
ratelimitsoustreams. -
Utilisez
mode: TOKEN_RATEpour appliquer la limitation de débit basée sur les jetons pour les backends d'IA. -
Utilisez
selector_keys.basic.per_client_ipouheader_namepour appliquer des limites par client. -
Attachez le CRD
ratelimità unaigatewayroutevia un filtreExtensionRef, ou liez-le à des services viaservicenamesoutargetRef.
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
-
Configurer les limites de débit et les flux