Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Use o desligamento graceful para evitar perda de tráfego

Última atualização: Jun 28, 2026

Ao reduzir a escala ou executar uma reinicialização contínua em um gateway de entrada ASM, alguns pods do gateway são excluídos, o que pode causar pequena perda de tráfego. Ative o desligamento graceful para evitar essa perda permitindo que as conexões existentes continuem transmitindo dados por um período especificado após a exclusão de um pod do gateway.

Pré-requisitos

Etapa 1: Ativar o desligamento graceful

Existing gateway

A partir do ASM 1.26, alterar a configuração de desligamento graceful aciona uma reinicialização do gateway. Execute esta operação fora dos horários de pico para minimizar o impacto.

Console

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.

  3. Na página Ingress Gateway, clique no nome do gateway desejado.

  4. Na página Gateway Details, clique em Advanced Options. Clique no ícone Edit à direita de SLB graceful offline, selecione SLB graceful offline, configure o Connection timeout (seconds) e clique em Submit.

YAML (before 1.26)

Adicione a anotação serviceAnnotations ao arquivo YAML do gateway.

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 and later)

Adicione a anotação annotations ao arquivo YAML do gateway.

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
...

New gateway

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.

  3. Na página Ingress Gateway, clique em Create.

  4. Na página Create, selecione um Cluster, defina o CLB instance type como Internet Access, selecione uma especificação de balanceador de carga na seção Create SLB Instance, defina Gateway instances como 10 e mantenha os valores padrão para os outros parâmetros.

    Para mais informações sobre os parâmetros, consulte Criar um gateway de entrada.

  5. Clique em Advanced Options, selecione SLB graceful offline, defina o Connection timeout (seconds) e clique em Create.

    Parâmetro

    Descrição

    SLB graceful offline

    Se esta opção estiver selecionada, a instância do Classic Load Balancer (CLB) encerra as conexões existentes gradualmente durante uma reinicialização contínua do pod do gateway. Esse processo minimiza o impacto no serviço durante alterações de configuração e atualizações do gateway.

    Connection timeout (seconds)

    Após remover o pod do gateway, a instância do CLB aguarda o tempo limite de conexão configurado antes de fechar a conexão com o pod. Este parâmetro fornece um período de buffer para que o pod do gateway processe as conexões existentes.

    A partir do ASM 1.26, há suporte para um tempo limite de até 890 segundos.

Etapa 2: Implantar uma aplicação de exemplo

  1. Conecte-se ao cluster ACK usando kubectl. Para mais informações, consulte Obter o arquivo kubeconfig de um cluster e usar kubectl para conectar-se ao cluster.

  2. Crie um arquivo chamado httpbin.yaml com o seguinte conteúdo.

    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. Implante a aplicação httpbin.

    kubectl apply -f httpbin.yaml -n default

Etapa 3: Criar um VirtualService e um Gateway

  1. Crie um VirtualService.

    1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha Traffic Management Center > VirtualService. Na página exibida, clique em Create from YAML.

    3. Na página Create, selecione um Namespaces e um Scenario Template, cole a seguinte configuração YAML e clique em 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. Crie um Gateway.

    1. Na página de detalhes da instância do ASM, escolha ASM Gateways > Gateway no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.

    2. Na página Create, selecione um Namespaces e um Scenario Template, cole a seguinte configuração YAML e clique em 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. Verifique a configuração de roteamento.

    1. Obtenha o endereço do gateway de entrada do ASM. Para mais informações, consulte Criar um gateway de entrada.

    2. Na barra de endereços do navegador, insira http://<endereço do gateway de entrada do ASM>.

      A página inicial do httpbin.org aparece no navegador com o título httpbin.org e a descrição A simple HTTP Request & Response Service. Isso confirma que o VirtualService e o Gateway estão configurados corretamente.

Etapa 4: Verificar o efeito do desligamento graceful

  1. Baixe e instale a versão da ferramenta leve de teste de estresse hey compatível com seu sistema operacional. Para mais informações, consulte hey.

  2. Reduza a escala do gateway de entrada do ASM.

    1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.

    3. Na página Ingress Gateway, localize o gateway desejado e clique em View YAML na coluna Actions.

    4. Na caixa de diálogo Edit, defina o valor do parâmetro replicaCount como 1 e clique em OK.

  3. Execute o comando a seguir para enviar 50.000 solicitações à aplicação httpbin com uma concorrência de 200 e compare a perda de tráfego antes e depois de ativar o desligamento graceful.

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

    Tipo

    Análise do resultado

    Desligamento graceful desativado

    A seguinte saída é retornada:

    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

    Apenas 49.747 das 50.000 solicitações retornaram um código de status 200, indicando que ocorreu uma pequena perda de tráfego.

    Desligamento graceful ativado

    A seguinte saída é retornada:

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

    Todas as 50.000 solicitações retornaram um código de status 200, indicando que não houve perda de tráfego.