Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Configurer la limitation de débit local pour une passerelle d'entrée

Dernière mise à jour :Sep 29, 2026

Lors d'événements à fort trafic, tels que les ventes flash, des pics soudains peuvent submerger votre système, entraînant des files d'attente de requêtes et des pannes de service. ASM propose une fonctionnalité de limitation de débit local permettant de contrôler le trafic au niveau de la passerelle d'entrée et de protéger vos services backend. Cette rubrique explique comment configurer cette fonctionnalité.

Prérequis

  • Vous disposez d'une instance ASM répondant aux exigences suivantes :

    • ASM Enterprise Edition ou Ultimate Edition : version 1.11.5.30 ou ultérieure. Pour plus d'informations sur la mise à niveau d'une instance ASM, reportez-vous à la section Mettre à niveau une instance ASM.

    • ASM Standard Edition : version 1.9 ou ultérieure. Cette édition prend en charge la limitation de débit local uniquement via la méthode native Istio. Selon la version d'Istio utilisée, consultez la documentation correspondante. Pour la dernière version d'Istio, voir Enabling Rate Limits using Envoy.

  • Le cluster est ajouté à l'instance ASM.

  • Une passerelle d'entrée est déployée. Pour plus d'informations, reportez-vous à la section Créer une passerelle d'entrée.

  • Vous avez créé les services bookinfo et nginx. Dans cette rubrique, le service bookinfo est déployé dans l'espace de noms default, et le service nginx est déployé dans l'espace de noms foo. Pour plus d'informations sur la création du service bookinfo, reportez-vous à la section Déployer une application dans un cluster associé à une instance ASM.

    Créer le service nginx

    1. Créez un fichier nginx.yaml avec le contenu suivant.

      apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
      kind: Deployment
      metadata:
        name: nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        replicas: 1
        template:
          metadata:
            labels:
              app: nginx
              sidecarset-injected: "true"
          spec:
            containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
              - containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
      spec:
        ports:
          - name: http
            port: 80
            protocol: TCP
            targetPort: 80
        selector:
          app: nginx
        type: ClusterIP
    2. Exécutez la commande suivante pour déployer le service nginx dans l'espace de noms foo :

      kubectl apply -f nginx.yaml -n foo 
  • Vous avez créé une passerelle et un service virtuel. Pour plus d'informations, reportez-vous aux sections Gérer les passerelles et Gérer les services virtuels.

    YAML de la passerelle

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: bookinfo-gateway
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - bf2.example.com
        port:
          name: http
          number: 80
          protocol: http

    YAML du service virtuel

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: bookinfo
      namespace: default
    spec:
      gateways:
      - bookinfo-gateway
      hosts:
      - bf2.example.com
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        name: productpage-route-name1
        route:
        - destination:
            host: productpage
            port:
              number: 9080
      - match:
        - uri:
            prefix: /nginx
        name: nginx-route-name1
        rewrite:
          uri: /
        route:
        - destination:
            host: nginx.foo.svc.cluster.local
            port:
              number: 80
  • Vous avez installé un outil de test de charge. Pour plus d'informations, voir hey.

Applicabilité

La fonctionnalité de limitation de débit local dans ASM s'applique aux passerelles ASM et aux services d'application disposant d'un sidecar injecté.

Cas d'utilisation

Cette rubrique utilise les services bookinfo et nginx pour illustrer l'utilisation de la limitation de débit pour les passerelles et les services. Le service nginx est déployé dans l'espace de noms foo afin de vérifier la portée de la limitation de débit.Exemple de scénario

Scénario 1 : Limiter le débit d'une route de service virtuel

Configurez une règle de limitation de débit pour la route productpage-route-name1 sur la combinaison domaine et port bf2.example.com:80. productpage-route-name1 est une route du service virtuel bookinfo créée dans la section Prérequis. Elle correspond aux requêtes pour des chemins tels que /productpage, /static, /login et /logout, et les transfère vers le service productpage. Une fois la règle de limitation de débit configurée, elle limite le taux de trafic pour les requêtes adressées à ces chemins.

  1. Créez une règle de limitation de débit local.

    1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

    2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez Traffic Management Center > Traffic Protection and Scheduling. Sur la page qui s'affiche, cliquez sur Create.

    3. Sur la page Create, configurez les paramètres comme décrit ci-dessous et cliquez sur OK.

      Pour plus d'informations sur les paramètres, reportez-vous à la section Référence CRD ASMLocalRateLimiter.

      Section

      Paramètre

      Description

      Basic Information About Throttling

      Namespaces

      L'espace de noms de la règle de limitation de débit local. Il doit correspondre à l'espace de noms de la charge de travail limitée. Dans cet exemple, vous devez sélectionner istio-system, car toutes les passerelles ASM sont déployées dans l'espace de noms istio-system.

      Name

      Un nom personnalisé pour la configuration de limitation de débit local. Cet exemple utilise ingressgateway.

      Type of Effective Workload

      Le type de charge de travail auquel s'applique la limitation de débit. Les valeurs prises en charge sont Applicable Service et Applicable Gateway. Cet exemple utilise Applicable Gateway.

      Relevant Workload

      Si vous sélectionnez Applicable Gateway, vous devez également choisir une option Select Istio Gateway. La règle s'applique à la charge de travail associée à la passerelle sélectionnée. Cet exemple utilise bookinfo-gateway.

      List of Throttling Rules

      Gateway Domain Name

      Sélectionnez un domaine déclaré dans la passerelle. La règle de limitation de débit s'applique à la combinaison port et domaine spécifiée. Cet exemple utilise bf2.example.com.

      Gateway Port

      Sélectionnez un port déclaré dans la passerelle. La règle de limitation de débit s'applique à la combinaison port et domaine spécifiée. Cet exemple utilise 80.

      Match Routes of Virtual Service

      Sélectionnez une route déclarée dans le service virtuel associé à la passerelle. La règle de limitation de débit s'applique à la route de service virtuel spécifiée. Cet exemple utilise productpage-route-name1.

      Throttling Configuration

      Spécifiez la fenêtre de détection et le nombre de requêtes autorisées pour l'algorithme de bucket de jetons de limitation de débit local. Les requêtes dépassant la limite dans la fenêtre de détection sont limitées. Dans cet exemple, utilisez les configurations suivantes :

      • Définissez Time Window for Throttling Detection sur 1s.

      • Définissez Number of Requests Allowed in Time Window sur 10.

      Ces paramètres limitent les requêtes adressées à la charge de travail de service à 10 par seconde.

      advanced config

      Cliquez sur Show Advanced Settings pour spécifier les comportements avancés en cas de limitation de débit. Vous pouvez configurer les paramètres avancés selon vos besoins. Dans cet exemple, définissez Custom Throttling Response Body sur {"ret_code": xxx,"message": "Your request be limited"}.

      Le code suivant présente le fichier YAML pour la configuration de limitation de débit local.

      • Si vous ne configurez pas les paramètres avancés, le système renvoie la réponse par défaut lorsque la limitation de débit est déclenchée.

        YAML sans paramètres avancés

        apiVersion: istio.alibabacloud.com/v1beta1
        kind: ASMLocalRateLimiter
        metadata:
          name: ingressgateway
          namespace: istio-system
        spec:
          configs:
            - limit:
                fill_interval:
                  seconds: 1
                quota: 10
              match:
                vhost:
                  name: bf2.example.com
                  port: 80
                  route:
                    name_match: productpage-route-name1
          isGateway: true
          workloadSelector:
            labels:
              istio: ingressgateway
      • Si vous configurez les paramètres avancés, le système renvoie une réponse personnalisée lorsque la limitation de débit est déclenchée.

        YAML avec paramètres avancés

        apiVersion: istio.alibabacloud.com/v1beta1
        kind: ASMLocalRateLimiter
        metadata:
          name: ingressgateway
          namespace: istio-system
        spec:
          configs:
            - limit:
                custom_response_body: '{"ret_code": xxx, "message": "Your request be limited" }'
                fill_interval:
                  seconds: 1
                quota: 10
              match:
                vhost:
                  name: bf2.example.com
                  port: 80
                  route:
                    name_match: productpage-route-name1
          isGateway: true
          workloadSelector:
            labels:
              istio: ingressgateway
  2. Exécutez les commandes suivantes dans l'outil hey pour générer en continu un trafic de stress.

    hey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/productpage
    hey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/nginx
  3. Exécutez la commande suivante pour accéder au chemin /productpage de la passerelle.

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/productpage -v

    Résultat attendu :

    < HTTP/1.1 429 Too Many Requests
    < Content-Length: 18
    < Content-Type: text/plain
    < Date: Thu, 13 Jan 2022 03:03:09 GMT
    < Server: istio-envoy
    <
    local_rate_limited

    Le résultat indique que l'accès au service bookinfo est limité.

  4. Exécutez la commande suivante pour accéder au chemin /nginx de la passerelle.

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/nginx  -v

    La réponse ne contient pas de code d'état 429, ce qui indique que l'accès n'est pas limité.

Scénario 2 : Limiter le débit d'un domaine et d'un port de passerelle

Configurez une règle de limitation de débit pour la combinaison domaine et port bf2.example.com:80 afin de limiter le trafic vers tous les chemins associés à cette combinaison.

  1. Configurez une règle de limitation de débit.

    1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

    2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Traffic Management Center > Traffic Protection and Scheduling. Sur la page qui s'affiche, cliquez sur Create.

    3. Sur la page Create, configurez les paramètres comme décrit ci-dessous et cliquez sur OK.

      Pour plus d'informations sur les paramètres, consultez la rubrique Référence CRD ASMLocalRateLimiter.

      Section

      Paramètre

      Description

      Basic Information About Throttling

      Namespaces

      Le namespace pour la règle de limitation de débit local. Il doit correspondre au namespace de la charge de travail limitée. Dans cet exemple, vous devez sélectionner istio-system car toutes les passerelles ASM sont déployées dans le namespace istio-system.

      Name

      Un nom personnalisé pour la configuration de limitation de débit local. Cet exemple utilise ingressgateway.

      Type of Effective Workload

      Le type de charge de travail auquel s'applique la limitation de débit. Les valeurs prises en charge sont Applicable Service et Applicable Gateway. Cet exemple utilise Applicable Gateway.

      Relevant Workload

      Si vous sélectionnez Applicable Gateway, vous devez également choisir une option Select Istio Gateway. La règle s'applique à la charge de travail associée à la passerelle sélectionnée. Cet exemple utilise bookinfo-gateway.

      List of Throttling Rules

      Gateway Domain Name

      Sélectionnez un domaine déclaré dans la passerelle. La règle de limitation de débit s'applique à la combinaison port et domaine spécifiée. Cet exemple utilise bf2.example.com.

      Gateway Port

      Sélectionnez un port déclaré dans la passerelle. La règle de limitation de débit s'applique à la combinaison port et domaine spécifiée. Cet exemple utilise 80.

      Match Routes of Virtual Service

      Ne sélectionnez aucune route dans cet exemple. Cela applique la règle de limitation de débit à toutes les routes pour le domaine et le port spécifiés.

      Throttling Configuration

      Spécifiez la fenêtre de détection et le nombre de requêtes autorisées pour l'algorithme de bucket de jetons de limitation de débit local. Les requêtes dépassant la limite dans la fenêtre de détection sont limitées. Dans cet exemple, utilisez les configurations suivantes :

      • Définissez Time Window for Throttling Detection sur 1s.

      • Définissez Number of Requests Allowed in Time Window sur 10.

      Ces paramètres limitent les requêtes vers la charge de travail du service à 10 par seconde.

      Le code suivant présente le fichier YAML de la configuration de limitation de débit local.

      YAML de limitation de débit local

      apiVersion: istio.alibabacloud.com/v1beta1
      kind: ASMLocalRateLimiter
      metadata:
        name: ingressgateway
        namespace: istio-system
      spec:
        configs:
          - limit:
              fill_interval:
                seconds: 1
              quota: 10
            match:
              vhost:
                name: bf2.example.com
                port: 80
                route: {}
        isGateway: true
        workloadSelector:
          labels:
            istio: ingressgateway
  2. Exécutez la commande suivante dans l'outil hey pour générer en continu un trafic de stress.

    hey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/nginx
  3. Exécutez la commande suivante pour accéder au chemin /nginx de la passerelle.

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/nginx -v

    La réponse renvoie HTTP/1.1 429 Too Many Requests, ce qui indique que l'accès au chemin /nginx sur la passerelle est limité.

  4. Scénario 3 : Limitation de débit par en-tête de requête

    Configurez une règle de limitation de débit pour la route nginx-route-name1 sur la combinaison domaine et port bf2.example.com:80. Vous pouvez spécifier que la règle de limitation de débit s'applique uniquement aux requêtes contenant l'en-tête de requête ratelimit: "true". Cette règle n'affecte pas les autres requêtes adressées à la route. nginx-route-name1 est une route du service virtuel bookinfo créée dans la section Prérequis. Elle correspond aux requêtes pour le chemin /nginx et les transfère vers le service nginx.

    1. Configurez une règle de limitation de débit.

      1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

      2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Traffic Management Center > Traffic Protection and Scheduling. Sur la page qui s'affiche, cliquez sur Create.

      3. Sur la page Create, configurez les paramètres comme décrit ci-dessous et cliquez sur OK.

        Pour plus d'informations sur les paramètres, consultez la Référence CRD ASMLocalRateLimiter.

        Section

        Paramètre

        Description

        Basic Information About Throttling

        Namespaces

        Le namespace pour la règle de limitation de débit local. Il doit s'agir du même namespace que celui de la charge de travail soumise à la limitation. Dans cet exemple, vous devez sélectionner istio-system car toutes les passerelles ASM sont déployées dans le namespace istio-system.

        Name

        Un nom personnalisé pour la configuration de limitation de débit local. Cet exemple utilise ingressgateway.

        Type of Effective Workload

        Le type de charge de travail auquel s'applique la limitation de débit. Les valeurs prises en charge sont Applicable Service et Applicable Gateway. Cet exemple utilise Applicable Gateway.

        Relevant Workload

        Si vous sélectionnez Applicable Gateway, vous devez également sélectionner une option Select Istio Gateway. La règle s'applique à la charge de travail associée à la passerelle sélectionnée. Cet exemple utilise bookinfo-gateway.

        List of Throttling Rules

        Gateway Domain Name

        Sélectionnez un domaine déclaré dans la passerelle. La règle de limitation de débit s'applique à la combinaison port et domaine spécifiée. Cet exemple utilise bf2.example.com.

        Gateway Port

        Sélectionnez un port déclaré dans la passerelle. La règle de limitation de débit s'applique à la combinaison port et domaine spécifiée. Cet exemple utilise 80.

        Match Routes of Virtual Service

        Sélectionnez une route déclarée dans le service virtuel associé à la passerelle. La règle de limitation de débit s'applique à la route du service virtuel spécifiée. Cet exemple utilise nginx-route-name1.

        Match Request Attributes

        Spécifiez une condition de correspondance de requête pour déclencher la règle de limitation de débit. Dans cet exemple, utilisez les configurations suivantes :

        • Définissez Matched Attributes sur Specific Request Header.

        • Définissez Request Header sur ratelimit.

        • Définissez Matching Method sur Exact Match.

        • Définissez Matched Content sur true.

        Throttling Configuration

        Spécifiez la fenêtre de détection et le nombre de requêtes autorisées pour l'algorithme de bucket de jetons de limitation de débit local. Les requêtes dépassant la limite dans la fenêtre de détection sont limitées. Dans cet exemple, utilisez les configurations suivantes :

        • Définissez Time Window for Throttling Detection sur 1s.

        • Définissez Nombre de requêtes autorisées dans la fenêtre temporelle sur 10.

        Ces paramètres limitent les requêtes adressées à la charge de travail du service à 10 par seconde.

        Le code suivant présente le fichier YAML pour la configuration de limitation de débit local.

        YAML de limitation de débit local

        apiVersion: istio.alibabacloud.com/v1beta1
        kind: ASMLocalRateLimiter
        metadata:
          name: ingressgateway
          namespace: istio-system
        spec:
          configs:
            - limit:
                fill_interval:
                  seconds: 1
                quota: 10
              match:
                vhost:
                  name: bf2.example.com
                  port: 80
                  route:
                    header_match:
                      - exact_match: 'true'
                        invert_match: false
                        name: ratelimit
                    name_match: nginx-route-name1
          isGateway: true
          workloadSelector:
            labels:
              istio: ingressgateway
    2. Exécutez la commande suivante dans l'outil hey pour générer en continu un trafic de stress. Les requêtes contiennent toutes l'en-tête de requête ratelimit: true pour déclencher la limitation de débit.

      hey -host bf2.example.com -H 'ratelimit: true' -c 10 -n 10000 http://${ASM_GATEWAY_IP}/nginx
    3. Exécutez la commande suivante pour accéder au chemin /nginx de la passerelle.

      curl -H 'host: bf2.example.com' -H 'ratelimit: true'  http://${ASM_GATEWAY_IP}/nginx -v

      La réponse renvoie HTTP/1.1 429 Too Many Requests, ce qui indique que les requêtes adressées au chemin /nginx de la passerelle avec l'en-tête de requête ratelimit: true sont limitées.

    4. Exécutez la commande suivante pour accéder au chemin /nginx de la passerelle, mais sans l'en-tête de requête ratelimit: true.

      curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -v

      La réponse n'inclut pas de code d'état 429, ce qui indique que les requêtes sans l'en-tête de requête ratelimit: true ne sont pas limitées.

    5. Opérations connexes

      Supprimer la règle de limitation de débit

      1. Supprimez la règle de limitation de débit.

        1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

        2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Traffic Management Center > Traffic Protection and Scheduling.

        3. Sur la page Rate Limiting, recherchez la règle de limitation de débit cible, cliquez sur Delete dans la colonne Actions, puis cliquez sur OK dans la boîte de dialogue Submit.

      2. Exécutez la commande suivante pour accéder au chemin /nginx de la passerelle.

        curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/nginx -v

        La réponse n'inclut pas de code d'état 429, ce qui indique que l'accès n'est pas limité.

      Documentation connexe