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
Você possui uma instância do ASM da Enterprise Edition ou Ultimate Edition. Para mais informações, consulte Criar uma instância do ASM.
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
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, clique no nome do gateway desejado.
Na página Gateway Details, clique em Advanced Options. Clique no ícone
à 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
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, clique em Create.
-
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.
-
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
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.
-
Crie um arquivo chamado httpbin.yaml com o seguinte conteúdo.
-
Implante a aplicação httpbin.
kubectl apply -f httpbin.yaml -n default
Etapa 3: Criar um VirtualService e um Gateway
-
Crie um VirtualService.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha . Na página exibida, clique em Create from YAML.
-
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
-
Crie um Gateway.
Na página de detalhes da instância do ASM, escolha no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.
-
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
-
Verifique a configuração de roteamento.
Obtenha o endereço do gateway de entrada do ASM. Para mais informações, consulte Criar um gateway de entrada.
-
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
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.
-
Reduza a escala do gateway de entrada do ASM.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, localize o gateway desejado e clique em View YAML na coluna Actions.
Na caixa de diálogo Edit, defina o valor do parâmetro
replicaCountcomo 1 e clique em OK.
-
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 refusedApenas 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 responsesTodas as 50.000 solicitações retornaram um código de status 200, indicando que não houve perda de tráfego.