Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Champs CRD ASMLocalRateLimiter

Dernière mise à jour :Sep 29, 2026

ASMLocalRateLimiter est une CustomResourceDefinition (CRD) permettant de définir de manière déclarative les configurations de limitation de débit locale dans Service Mesh (ASM).

Fonctionnement

ASMLocalRateLimiter utilise un algorithme de bucket à jetons pour contrôler le débit des requêtes :

  1. Chaque proxy Envoy maintient un bucket à jetons contenant un nombre configuré de jetons (quota).

  2. Les jetons sont reconstitués à intervalles réguliers (fill_interval).

  3. Si aucun jeton n'est disponible, la requête est rejetée avec le statut HTTP 429 (configurable).

Par défaut, tous les threads de travail d'un même processus Envoy partagent un seul bucket à jetons. Définissez per_downstream_connection sur true pour allouer un bucket distinct par connexion.

Important

La valeur quota s'applique à une seule instance Envoy. Si vous disposez de n instances de passerelle, la limite de débit effective pour les services backend est de n x quota. Recalculez les quotas à chaque mise à l'échelle du nombre d'instances.

Aperçu de la structure CRD

Ce squelette illustre l'imbrication des champs au sein de la CRD :

apiVersion: istio.alibabacloud.com/v1beta1   # or v1
kind: ASMLocalRateLimiter
metadata:
  name: <rule-name>
  namespace: <namespace>
spec:
  workloadSelector:
    labels:
      <label-key>: <label-value>
  isGateway: true | false
  configs:
    - name: <config-name>
      match:
        vhost:
          name: <virtual-host-name>
          port: <port>
          route:
            name_match: <route-name>
      limit:
        status: <http-status-code>
        fill_interval:
          seconds: <int>
          nanos: <int>
        quota: <int>
        per_downstream_connection: true | false
        custom_response_body: <string>
        response_header_to_add:
          <header-name>: <header-value>
      limit_overrides:
        - request_match:
            header_match:
              - name: <header-name>
                exact_match: <value>
            query_match:
              - name: <param-name>
                exact_match: <value>
          limit:
            fill_interval:
              seconds: <int>
            quota: <int>

Exemple de configuration

L'exemple suivant applique une limitation de débit à une passerelle d'entrée. Deux hôtes virtuels bénéficient de limites différentes : www.example1.com à 10 requêtes par seconde, et www.example2.com à 100 requêtes par seconde.

Développer pour afficher le contenu YAML

apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMLocalRateLimiter
metadata:
  name: for-api-test
  namespace: default
spec:
  workloadSelector:
    labels:
      app: istio-ingressgateway
  isGateway: true
  configs:
    - match:
        vhost:
          name: "www.example1.com" # If multiple vhosts are configured on the gateway, enter the name of the last vhost.
          port: 80
          route:
            name_match: "test1" # The name of the route that is configured for the virtual service. If the virtual service does not have the specified route, the rate limiting does not take effect.
      limit:
         fill_interval:
            seconds: 1
         quota: 10
    - match:
        vhost:
          name: "www.example2.com"
          port: 80
          route:
            name_match: "test1"
      limit:
         fill_interval:
            seconds: 1
         quota: 100

Valeurs apiVersion prises en charge

Version ASM Valeur apiVersion
1.15.3.105 ou ultérieure istio.alibabacloud.com/v1
Antérieure à 1.15.3.105 istio.alibabacloud.com/v1beta1

Si vous avez précédemment défini l'apiVersion sur istio.alibabacloud.com/v1beta1 pour ASMCircuitBreaker dans un cluster Container Service for Kubernetes (ACK), remplacez cette valeur par istio.alibabacloud.com/v1 et redéployez le cluster.

spec

Pour plus d'informations, consultez Configurer la limitation de débit locale sur une passerelle d'entrée.

Champ Type Obligatoire Description
workloadSelector map Oui Libellés sélectionnant les pods auxquels s'applique la limitation de débit. La correspondance est limitée au namespace de la ressource. Pour plus d'informations, consultez Workload Selector.
isGateway bool Non Définissez sur true si la règle cible une passerelle. Par défaut : false.
configs LocalRateLimiterConfig[] Oui Règles de limitation de débit.

LocalRateLimiterConfig

Champ Type Obligatoire Description
name string Oui Nom de la règle de limitation de débit.
match RatelimitMatch Oui Critères déterminant les requêtes auxquelles s'applique cette règle.
limit LimitConfig Oui Paramètres du bucket à jetons définissant la limite de débit.
limit_overrides RateLimitOverrideConfig[] Non Remplacements appliquant différentes limites de débit à des requêtes spécifiques. Nécessite ASM V1.19.0 ou version ultérieure.

RatelimitMatch

Champ Type Obligatoire Description
vhost VirtualHostMatch Non Critères de correspondance pour un hôte virtuel.

LimitConfig

Champ Type Obligatoire Description
status int Non Code de statut HTTP renvoyé lorsqu'une requête est limitée en débit. Par défaut : 429. Doit être supérieur ou égal à 400. Nécessite ASM V1.24.6.64 ou version ultérieure.
fill_interval Duration Non Fréquence d'ajout des jetons au bucket. Spécifiez seconds (entier) ou nanos (nanosecondes). Par exemple, seconds: 1 reconstitue le bucket chaque seconde. Avec quota, cela définit le débit autorisé.
quota int Non Nombre de jetons. La valeur doit être un entier. Par exemple, quota: 100 avec seconds: 1 autorise 100 requêtes par seconde par instance Envoy.
per_downstream_connection bool Non Portée du bucket à jetons. false (par défaut) : un bucket partagé entre tous les threads de travail par processus Envoy. true : un bucket par connexion descendante. Nécessite ASM V1.13.4 ou version ultérieure.
custom_response_body string Non Corps de réponse renvoyé lorsqu'une requête est limitée en débit. Nécessite ASM V1.13.4 ou version ultérieure.
response_header_to_add map[string]string Non En-têtes de réponse ajoutés lorsqu'une requête est limitée en débit. Nécessite ASM V1.13.4 ou version ultérieure.

RateLimitOverrideConfig

Utilisez les remplacements pour appliquer une limite de débit différente aux requêtes correspondant à des en-têtes ou paramètres de requête spécifiques, tout en conservant la limite de débit de base pour le reste du trafic.

Champ Type Obligatoire Description
request_match RequestMatcher Oui Critères identifiant les requêtes concernées par le remplacement.
limit LimitConfig Oui Limite de débit pour les requêtes correspondantes. Seuls fill_interval et quota prennent effet. Les valeurs de per_downstream_connection, custom_response_body et response_header_to_add sont héritées du parent LocalRateLimiterConfig.limit.

VirtualHostMatch

Champ Type Obligatoire Description
name string Oui Nom de l'hôte virtuel à faire correspondre.
port int Non Port à faire correspondre.
route RouteMatch Non Route à faire correspondre au sein de l'hôte virtuel.

RouteMatch

Champ Type Obligatoire Description
name_match string Non Nom d'une route spécifique définie dans un service virtuel.
header_match HeaderMatcher[] Non Obsolète depuis ASM V1.19.0. Utilisez plutôt RateLimitOverrideConfig.

RequestMatcher

Lorsque header_match et query_match sont tous deux spécifiés, une requête doit satisfaire toutes les conditions pour être mise en correspondance.

Champ Type Obligatoire Description
header_match HeaderMatcher[] Non Critères de correspondance basés sur les en-têtes.
query_match QueryParameterMatcher[] Non Critères de correspondance basés sur les paramètres de requête.

HeaderMatcher

Spécifiez exactement un champ de mode de correspondance (regex_match, exact_match, prefix_match, suffix_match ou present_match) par matcher.

Champ Type Obligatoire Description
name string Non Nom de l'en-tête.
regex_match string Non Fait correspondre la valeur de l'en-tête à une expression régulière.
exact_match string Non Fait correspondre la valeur de l'en-tête exactement.
prefix_match string Non Fait correspondre le début de la valeur de l'en-tête.
suffix_match string Non Fait correspondre la fin de la valeur de l'en-tête.
present_match bool Non true : correspond si l'en-tête existe, quelle que soit sa valeur. false : correspond si l'en-tête n'existe pas.
invert_match bool Non Inverse le résultat de la correspondance. Par défaut : false. Lorsque true, une requête qui correspondrait normalement est traitée comme ne correspondant pas, et vice versa.

QueryParameterMatcher

Spécifiez exactement un champ de mode de correspondance (exact_match, prefix_match, suffix_match, regex_match, contains_match ou present_match) par matcher.

Champ Type Obligatoire Description
name string Oui Nom du paramètre de requête.
exact_match string Non Fait correspondre la valeur du paramètre exactement.
prefix_match string Non Fait correspondre le début de la valeur du paramètre.
suffix_match string Non Fait correspondre la fin de la valeur du paramètre.
regex_match string Non Fait correspondre la valeur du paramètre à une expression régulière.
contains_match string Non Correspond si la valeur du paramètre contient la chaîne spécifiée.
present_match bool Non true : correspond si le paramètre existe, quelle que soit sa valeur. false n'est pas valide et équivaut à omettre ce champ.
ignore_case bool Non Ignore la casse lors de la comparaison des valeurs.