Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Utiliser l'arrêt gracieux pour éviter les pertes de trafic

Dernière mise à jour :Aug 11, 2026

Lors d'une réduction de capacité (scale-in) ou d'un redémarrage progressif d'une passerelle d'entrée ASM, la suppression de certains pods peut entraîner une légère perte de trafic. Activez l'arrêt gracieux pour éviter ce phénomène : les connexions existantes continuent de transmettre des données pendant une période définie après la suppression d'un pod.

Prérequis

Étape 1 : Activer l'arrêt gracieux

Passerelle existante

À partir d'ASM 1,26, toute modification de la configuration de l'arrêt gracieux redémarre la passerelle. Effectuez cette opération aux heures creuses pour minimiser l'impact.

Console

  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 ASM Gateways > Ingress Gateway.

  3. Sur la page Ingress Gateway, cliquez sur le nom de la passerelle cible.

  4. Sur la page Gateway Details, cliquez sur Advanced Options. Cliquez sur l'icône Edit à droite de SLB graceful offline, cochez SLB graceful offline, configurez le paramètre Connection timeout (seconds), puis cliquez sur Submit.

YAML (avant 1,26)

Ajoutez l'annotation serviceAnnotations au fichier YAML de la passerelle.

apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
  name: ingressgateway
  namespace: istio-system
spec:
  gatewayType: ingress
  serviceAnnotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on'          # Enables connection draining for the load balancer, which implements graceful shutdown.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10'  # The connection draining timeout period, in seconds. Valid values: 10 to 30.
...

YAML (1,26 et versions ultérieures)

Ajoutez l'annotation annotations au fichier YAML de la passerelle.

apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
  annotations:
    # For CLB and NLB gateways, the valid range is [10, 890].
    # For ClusterIP and NodePort gateways, there is no upper limit.
    asm.alibabacloud.com/gateway-drain-timeout-seconds: "30"
  name: ingressgateway
  namespace: istio-system
...

Nouvelle passerelle

  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 ASM Gateways > Ingress Gateway.

  3. Sur la page Ingress Gateway, cliquez sur Create.

  4. Sur la page Create, sélectionnez un Cluster, définissez le CLB instance type sur Internet Access, choisissez une spécification d'équilibreur de charge dans la section Create SLB Instance, définissez le nombre d'Gateway instances sur 10 et conservez les valeurs par défaut pour les autres paramètres.

    Pour plus d'informations sur les paramètres, consultez Créer une passerelle d'entrée.

  5. Cliquez sur Advanced Options, cochez SLB graceful offline, définissez le Connection timeout (seconds), puis cliquez sur Create.

    Paramètre

    Description

    SLB graceful offline

    Si cette option est activée, l'instance Classic Load Balancer (CLB) vide progressivement les connexions existantes lors du redémarrage progressif du pod de passerelle. Ce processus limite l'impact sur le service lors des modifications de configuration et des mises à niveau.

    Connection timeout (seconds)

    Après avoir retiré le pod de passerelle, l'instance CLB attend la durée d'expiration configurée avant de fermer la connexion. Ce délai permet au pod de traiter les connexions en cours.

    À partir d'ASM 1,26, la durée d'expiration peut atteindre 890 secondes.

Étape 2 : Déployer un exemple d'application

  1. Connectez-vous au cluster ACK avec kubectl. Pour plus d'informations, consultez Obtenir le fichier kubeconfig d'un cluster et utiliser kubectl pour se connecter au cluster.

  2. Créez un fichier nommé httpbin.yaml contenant le code suivant.

    httpbin.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  3. Déployez l'application httpbin.

    kubectl apply -f httpbin.yaml -n default

Étape 3 : Créer un VirtualService et une Gateway

  1. Créez un VirtualService.

    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 > VirtualService. Sur la page affichée, cliquez sur Create from YAML.

    3. Sur la page Create, sélectionnez un Namespaces et un Scenario Template, collez la configuration YAML suivante, puis cliquez sur Create.

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: httpbin
        namespace: default
      spec:
        gateways:
          - httpbin-gateway
        hosts:
          - '*'
        http:
          - route:
              - destination:
                  host: httpbin
                  port:
                    number: 8000
  2. Créez une Gateway.

    1. Sur la page des détails de l'instance ASM, sélectionnez ASM Gateways > Gateway dans le volet de navigation de gauche. Sur la page affichée, cliquez sur Create from YAML.

    2. Sur la page Create, sélectionnez un Namespaces et un Scenario Template, collez la configuration YAML suivante, puis cliquez sur Create.

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: httpbin-gateway
        namespace: default
      spec:
        selector:
          istio: ingressgateway
        servers:
          - hosts:
              - '*'
            port:
              name: http
              number: 80
              protocol: HTTP
  3. Vérifiez la configuration de routage.

    1. Récupérez l'adresse de la passerelle d'entrée ASM. Pour plus d'informations, consultez Créer une passerelle d'entrée.

    2. Dans la barre d'adresse de votre navigateur, saisissez http://<adresse de la passerelle d'entrée ASM>.

      La page d'accueil de httpbin.org s'affiche, avec le titre httpbin.org et la description A simple HTTP Request & Response Service. Le VirtualService et la Gateway sont correctement configurés.

Étape 4 : Vérifier l'effet de l'arrêt gracieux

  1. Téléchargez et installez la version de l'outil de test de charge léger hey compatible avec votre système d'exploitation. Pour plus d'informations, consultez hey.

  2. Réduisez la capacité (scale-in) de la passerelle d'entrée ASM.

    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 ASM Gateways > Ingress Gateway.

    3. Sur la page Ingress Gateway, localisez la passerelle cible et cliquez sur View YAML dans la colonne Actions.

    4. Dans la boîte de dialogue Edit, définissez la valeur du paramètre replicaCount sur 1 et cliquez sur OK.

  3. Exécutez la commande suivante pour envoyer 50 000 requêtes à l'application httpbin avec une concurrence de 200, puis comparez les pertes de trafic avant et après l'activation de l'arrêt gracieux.

    hey -c 200 -n 50000 -disable-keepalive http://<ASM ingress gateway address>/

    Type

    Analyse des résultats

    Arrêt gracieux désactivé

    Le résultat suivant est renvoyé :

    Status code distribution:
      [200] 49747 responses
    
    Error distribution:
      [253] Get "http://47.55.2xx.xx": dial tcp 47.55.2xx.xx:80: connect: connection refused

    Seules 49 747 des 50 000 requêtes ont renvoyé un code d'état 200, indiquant une légère perte de trafic.

    Arrêt gracieux activé

    Le résultat suivant est renvoyé :

    ............
    Status code distribution:
      [200] 50000 responses

    Les 50 000 requêtes ont renvoyé un code d'état 200, confirmant l'absence de perte de trafic.