Contrôleur d'entrée Citrix ADC

Limitation du débit dans Kubernetes à l’aide de Citrix ADC

Dans un déploiement Kubernetes, vous pouvez limiter le débit des demandes adressées aux ressources sur le serveur principal ou les services à l’aide de la fonctionnalité de limitation de débit fournie par Citrix ADC d’entrée.

Citrix fournit un CustomResourceDefinitions (CRD) Kubernetes appelé Rate limit CRD que vous pouvez utiliser avec le Citrix ingress controller pour configurer les configurations de limitation de débit sur les Citrix ADC utilisés comme appareils d’entrée.

Outre la limitation du débit des demandes aux services dans un environnement Kubernetes, vous pouvez également utiliser le CRD de limite de débit pour la sécurité des API. Le CRD de limite de débit vous permet de limiter la demande d’API REST aux serveurs d’API ou aux points de terminaison d’API spécifiques sur les serveurs d’API. Il surveille et assure le suivi des demandes adressées au serveur d’API ou aux points de terminaison par rapport à la limite autorisée par tranche de temps et protège ainsi contre les attaques telles que l’attaque DDoS.

Vous pouvez activer la journalisation pour l’observabilité avec la limite de débit CRD. Les journaux sont stockés sur Citrix ADC et peuvent être consultés en vérifiant les journaux à l’aide de la commande shell. L’emplacement du fichier est basé sur la configuration de Syslog. Par exemple, /var/logs/ns.log.

Définition de la limite de taux CRD

La spécification CRD de limite de débit est disponible dans le référentiel GitHub du Citrix ingress controller à l’adresse suivante : ratelimit-crd.yaml. Le CRD de limite de débit fournit des attributs pour les différentes options qui sont nécessaires pour définir les stratégies de limite de débit sur le Citrix ADC d’entrée qui agit en tant que passerelle d’API.

Attributs CRD de limite de taux

Le tableau suivant répertorie les différents attributs fournis dans le CRD Limite de taux :

Attribut CRD Description
servicename La liste des services Kubernetes auxquels vous souhaitez appliquer les politiques de limite de taux.
selector_keys Les touches de sélecteur de trafic qui filtrent le trafic pour identifier les demandes d’API pour lesquelles la limitation est appliquée et surveillée.
  Remarque : L’attribut selector_keys est facultatif. Vous pouvez choisir de configurer zéro, une ou plusieurs touches de sélection. Si plusieurs touches de sélection sont configurées, elle est considérée comme une expression logique ET.
  Dans cette version du CRD de limite de débit, selector_keys fournit la section de configuration basic que vous pouvez utiliser pour configurer les caractéristiques de trafic couramment utilisées suivantes en tant que clés par rapport auxquelles les limites configurées sont surveillées et limitées :
  path : tableau de préfixes de chemin d’accès d’URL qui font référence à un point de terminaison d’API spécifique. Par exemple, /api/v1/products/.
  method : tableau de méthodes HTTP. Les valeurs autorisées sont GET, PUT, POST ou DELETE.
  header_name : en-tête HTTP qui possède l’identifiant unique du client ou de l’utilisateur d’API. Par exemple, X-apikey qui est livré avec une clé API unique qui identifie le client API qui envoie la demande.
  per_client_ip : vous permet de surveiller et d’appliquer le seuil configuré à chaque demande d’API reçue par adresse IP client unique.
req_threshold Le nombre maximum de demandes autorisées dans la tranche de temps donnée (taux de demandes).
timeslice L’intervalle de temps spécifié en microsecondes (multiple de 10 s), pendant lequel les demandes sont surveillées par rapport aux limites configurées. S’il n’est pas spécifié, la valeur par défaut est de 1000 millisecondes.
limittype Il vous permet de configurer le type d’algorithmes de limitation que vous souhaitez utiliser pour appliquer la limite. Les algorithmes pris en charge sont éclatés et fluides. La valeur par défaut est le mode rafale .
throttle_action Il vous permet de définir l’action de limitation à prendre sur le trafic limité pour franchir le seuil configuré.
  Voici l’action de limitation que vous pouvez définir :
  DROP : supprime les demandes au-dessus des limites de trafic configurées.
  RESET : Réinitialise la connexion pour les demandes dépassant la limite configurée.
  REDIRECT : redirige le trafic vers le fichier configuré redirect_url.
  RÉPONDRE : Répond avec la réponse standard « 429 Trop de demandes ».
redirect_url Cet attribut est un attribut facultatif qui n’est requis que si throttle_action est configuré avec la valeur REDIRECT.
logpackets Active les journaux d’audit.
logexpression Spécifie l’expression de syntaxe par défaut qui définit le format et le contenu du message de journal.
loglevel Spécifie le niveau de gravité du message de journal généré.

Déployer le CRD de limite de débit

Effectuez les opérations suivantes pour déployer le CRD de limite de débit :

  1. Téléchargez le CRD (ratelimit-crd.yaml).

  2. Déployez le CRD de limite de débit à l’aide de la commande suivante :

    kubectl create -f ratelimit-crd.yaml
    

    Par exemple,

    root@master:~# kubectl create -f ratelimit-crd.yaml
    
    customresourcedefinition.apiextensions.k8s.io/ratelimits.citrix.com created
    
    root@master:~# kubectl get crd
    
    NAME CREATED AT
    ratelimits.citrix.com 2019-08-27T01:06:30Z
    

Comment écrire une configuration de stratégie basée sur les taux

Après avoir déployé le CRD fourni par Citrix dans le cluster Kubernetes, vous pouvez définir la configuration de stratégie basée sur le taux dans un fichier .yaml. Dans le fichier .yaml, utilisez ratelimit dans le champ kind et dans la section spec, ajoutez les attributs CRD limite de taux en fonction de vos besoins pour la configuration de la stratégie.

Après avoir déployé le fichier .yaml, le Citrix ingress controller applique la configuration de stratégie basée sur le taux sur l’appareil Citrix ADC d’entrée.

Voici quelques exemples de configuration de politique de limite de taux.

Limiter les demandes d’API aux préfixes d’extrémité d’API configurés

Imaginez un scénario dans lequel vous souhaitez définir une stratégie basée sur le taux dans Citrix ADC pour limiter les demandes d’API à 15 demandes par minute de chaque adresse IP client unique vers les préfixes de point de terminaison d’API configurés. Créez un fichier .yaml appelé ratelimit-example1.yaml et utilisez les attributs CRD appropriés pour définir la stratégie basée sur le taux comme suit :

apiVersion: citrix.com/v1beta1
kind: ratelimit
metadata:
  name: throttle-req-per-clientip
spec:
  servicenames:
    - frontend
  selector_keys:
   basic:
    path:
     - "/api/v1/products"
     - "/api/v1/orders/"
    per_client_ip: true
  req_threshold: 15
  timeslice: 60000
  throttle_action: "RESPOND"
  logpackets:
    logexpression: "http.req.url"
    loglevel: "INFORMATIONAL"
<!--NeedCopy-->

Remarque :

Vous pouvez initier plusieurs objets Kubernetes pour différents chemins qui nécessitent différentes configurations de limite de débit.

Après avoir défini la configuration de la stratégie, déployez le fichier .yaml à l’aide de la commande suivante :

root@master:~#kubectl create -f ratelimit-example1.yaml
ratelimit.citrix.com/throttle-req-per-clientip created

Le Citrix ingress controller applique la configuration de stratégie sur l’appareil Citrix ADC d’entrée.

Limiter les demandes d’API aux API de calendrier

Supposons un scénario dans lequel vous souhaitez définir une stratégie basée sur le taux dans un Citrix ADC pour limiter les demandes d’API (GET ou POST) à cinq demandes provenant de chaque client d’API identifié à l’aide de l’en-tête HTTP X-API-Key vers les API de calendrier. Créez un fichier .yaml appelé ratelimit-example2.yaml et utilisez les attributs CRD appropriés pour définir la stratégie basée sur le taux comme suit :

apiVersion: citrix.com/v1beta1
kind: ratelimit
metadata:
  name: throttle-calendarapi-perapikey
spec:
  servicenames:
    - frontend
  selector_keys:
    basic:
      path:
        - "/api/v1/calender"
      method:
        - "GET"
        - "POST"
      header_name: "X-API-Key"
  req_threshold: 5
  throttle_action: "RESPOND"
  logpackets:
    logexpression: "rate exceeded, you may want to configure higher limit"
    loglevel: "INFORMATIONAL"
<!--NeedCopy-->

Après avoir défini la configuration de la stratégie, déployez le fichier .yaml à l’aide de la commande suivante :

root@master:~#kubectl create -f ratelimit-example2.yaml
ratelimit.citrix.com/throttle-req-per-clientip created

Le Citrix ingress controller applique la configuration de stratégie sur l’appareil Citrix ADC d’entrée.

Limitation du débit dans Kubernetes à l’aide de Citrix ADC