Como fazer com que minhas tarefas do Amazon ECS que usam o tipo de inicialização do Amazon EC2 passem na verificação de integridade do Application Load Balancer?

11 minuto de leitura
0

Quero solucionar e resolver problemas com as verificações de integridade do Application Load Balancer para tarefas do Amazon Elastic Container Service (Amazon ECS) que são executadas nas minhas instâncias do Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrição

Quando sua tarefa do Amazon ECS falha na verificação de integridade do balanceador de carga, você recebe um dos seguintes erros da mensagem de evento de serviço do Amazon ECS:

  • “(service AWS-service) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [502 or 504]) or (request timeout)”
  • “(service AWS-Service) (port 8080) is unhealthy in target-group tf-20190411170 due to (reason Health checks failed)”
  • “(service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)”

Você também pode receber o seguinte erro do seu console de tarefas do Amazon ECS:

“Task failed ELB health checks in (grupo de destino arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)”

Para falhas nas verificações de integridade do contêiner, consulte Como solucionar problemas na verificação de integridade de contêiner em tarefas do Amazon ECS?

Para determinar por que sua tarefa do Amazon ECS foi interrompida, consulte Visualizar erros de tarefas interrompidas do Amazon ECS e Why is my Amazon ECS task stopped? (Por que minha tarefa do Amazon ECS foi interrompida?)

Resolução

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Configurar diferentes grupos de segurança

É uma prática recomendada configurar grupos de segurança diferentes para permitir todo o tráfego entre seus balanceadores de carga e instâncias de contêiner ou interface de rede elástica de tarefas. Também é possível configurar suas instâncias de contêiner para aceitar tráfego na porta especificada para a tarefa.

Em sua configuração, verifique as seguintes configurações:

  • O grupo de segurança associado ao seu balanceador de carga permite tráfego de saída para suas instâncias de contêiner ou interface de rede de tarefas na porta registrada. Além disso, permita o tráfego de saída para suas instâncias de contêiner na porta de verificação de integridade.
  • Permita tráfego de entrada no intervalo de portas do host de tarefas do grupo de segurança associado ao seu balanceador de carga.

Ative a zona de disponibilidade do seu balanceador de carga

Quando você habilita uma zona de disponibilidade para seu balanceador de carga, o Elastic Load Balancing cria um nó de balanceador de carga nessa zona de disponibilidade. Se você registrar destinos em uma zona de disponibilidade, mas não ativá-la, esses destinos registrados não receberão tráfego. Para mais informações, consulte Zonas de disponibilidade e nós de balanceador de carga.

Para determinar as zonas de disponibilidade para as quais seu balanceador de carga está configurado, conclua as seguintes etapas:

  1. Abra o console do Amazon EC2.
  2. No painel de navegação, em Balanceamento de carga, escolha Balanceadores de carga.
  3. Selecione o balanceador de carga que você está usando para o seu serviço do Amazon ECS.
  4. Na guia Descrição, é possível ver as zonas de disponibilidade.

Ou execute o comando describe-load-balancers da AWS CLI:

aws elbv2 describe-load-balancers --load-balancer-arns EXAMPLE-ALB-ARN --query 'LoadBalancers[*].AvailabilityZones[].{Subnet:SubnetId}'

Observação: substitua EXAMPLE-ALB-ARN pelo ARN do seu Application Load Balancer.

Para descobrir as zonas de disponibilidade para as quais suas instâncias de contêiner estão configuradas, conclua as seguintes etapas:

  1. Abra o console do Amazon EC2.
  2. No painel de navegação, em Ajuste de escala automático, selecione Grupos do Auto Scaling.
  3. Selecione o grupo do Auto Scaling da instância de contêiner associado ao seu cluster.
  4. Na guia Detalhes, em Rede, verifique se as zonas de disponibilidade correspondem às zonas de disponibilidade do seu balanceador de carga.

Ou execute o comando describe-auto-scaling-groups da AWS CLI:

aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names EXAMPLE-ASG-NAME --query 'AutoScalingGroups[*].{Subnets:VPCZoneIdentifier}' --output text

Observação: substitua EXAMPLE-ASG-NAME pelo nome do seu grupo do Auto Scaling.

Para modificar as zonas de disponibilidade do seu cluster, conclua as seguintes etapas:

  1. Abra o console do AWS CloudFormation.
  2. Selecione a pilha do CloudFormation do seu cluster.
  3. Atualize a pilha.
  4. Na página Especificar detalhes da pilha, atualize sua configuração de IDs de sub-rede.

Para determinar as zonas de disponibilidade para as quais sua tarefa está configurada, conclua as seguintes etapas:

  1. Abra o console do Amazon ECS.

  2. No painel de navegação, escolha Clusters e selecione o cluster que contém seu serviço.

  3. Na guia Serviços da página do seu cluster, na coluna Nome do serviço, selecione o serviço que você deseja verificar.

  4. Escolha a guia Configuração e rede.

  5. Em Configuração de rede, veja as sub-redes configuradas.

  6. Abra o console do Amazon Virtual Private Cloud (Amazon VPC) para ver informações adicionais que não estão disponíveis no console do ECS.

  7. Execute o comando describe-services para verificar se as zonas de disponibilidade de suas sub-redes correspondem às zonas de disponibilidade do balanceador de carga:

    aws ecs describe-services --cluster EXAMPLE-CLUSTER-NAME --service EXAMPLE-SERVICE-NAME --query
    'services[*].deployments[].networkConfiguration[].awsvpcConfiguration.{Subnets:subnets}'

    Observação: substitua EXAMPLE-CLUSTER-NAME pelo nome do seu cluster e EXAMPLE-SERVICE-NAME pelo nome do seu serviço.

Não é possível usar o console do Amazon ECS para alterar a configuração de sub-rede de um serviço do Amazon ECS. Em vez disso, execute o comando update-service da AWS CLI.

Configure sua ACL de rede para permitir o tráfego entre sub-redes

As sub-redes do balanceador de carga e da instância de contêiner ou da interface de rede de tarefas podem ser diferentes.

Para permitir o tráfego entre as sub-redes, use as seguintes configurações da lista de controle de acesso à rede (ACL de rede):

  • A ACL de rede associada às sub-redes do balanceador de carga deve permitir tráfego de entrada nas portas efêmeras (1024-65535) e na porta do receptor.
  • A ACL de rede deve permitir tráfego de saída nas portas efêmeras e de verificação de integridade.
  • A ACL de rede associada às sub-redes de sua instância de contêiner ou interface de rede de tarefas para o awsvpc deve permitir tráfego de entrada na porta de verificação de integridade.
  • A ACL de rede deve permitir tráfego de saída nas portas efêmeras.

Para obter mais informações sobre ACLs de rede, consulte Controlar o tráfego de sub-rede com listas de controle de acesso à rede.

Verifique as configurações de verificação de integridade do seu grupo de destino

Para verificar se as configurações de verificação de integridade do seu grupo de destino estão definidas corretamente, conclua as seguintes etapas:

  1. Abra o console do Amazon EC2.
  2. No painel de navegação, em Balanceamento de carga, escolha Grupos de destino.
  3. Selecione o grupo de destino.
    Importante: use um novo grupo de destino. Como o Amazon ECS registra e cancela automaticamente o registro da tarefa do ECS com o grupo de destino, não adicione destinos manualmente ao grupo de destino.
  4. Na guia Verificações de integridade, realize as seguintes ações:
    Verifique se você configurou corretamente os campos Porta e Caminho.
    Observação: se você não configurar corretamente os campos, o Amazon ECS poderá solicitar que seu balanceador de carga cancele o registro da tarefa devido à falha nas verificações de integridade.
    Em Porta, escolha porta de tráfego.
    Observação: se você escolher Substituir, confirme se a porta corresponde à porta do host da tarefa.
    Para Tempo limite, certifique-se de que o valor do tempo limite de resposta esteja correto.
    Observação: caso o valor seja menor que o tempo necessário a uma resposta, a verificação de integridade falhará.

Verifique o status e a configuração da aplicação em seu contêiner do ECS

Confirme se a aplicação responde à verificação de integridade do balanceador de carga

Realize as seguintes ações:

  • Verifique se a porta de ping e o caminho de verificação de integridade do seu grupo de destino estão configurados corretamente.
  • Monitore as métricas de utilização da CPU e da memória do serviço Amazon ECS. Se sua aplicação estiver lenta ou atingir o tempo limite, aumente as cotas de recursos da tarefa, aumente a escala do serviço horizontalmente, otimize sua aplicação ou use um tipo de instância maior.
  • Defina um período mínimo de carência da verificação de integridade, de modo que o agendador de serviços ignore as verificações de integridade por um período predefinido após você iniciar uma tarefa.
    Observação: sua tarefa do Amazon ECS pode exigir um período de carência mais longo da verificação de integridade para registrar o Application Load Balancer.
  • Verifique os logs da aplicação em busca de erros. Para obter mais informações, consulte Envio de logs do Amazon ECS para o CloudWatch.

Confirme se a aplicação retorna o código de status correto

Quando o balanceador de carga envia uma solicitação HTTP GET ao caminho da verificação de integridade, a aplicação no seu contêiner do ECS retorna o código de status 200 OK padrão. Se você receber uma mensagem de erro que não seja HTTP, significa que sua aplicação não está recebendo o tráfego HTTP. Você pode receber um código de status HTTP diferente do especificado na configuração Matcher. Se você receber outro código de status, sua aplicação está recebendo o tráfego HTTP, mas não está retornando um código de status para um destino íntegro.

Observação: se você usar um Application Load Balancer, poderá atualizar a configuração Matcher para um código de status diferente de 200. Para obter mais informações, consulte Verificações de integridade para grupos de destino do Application Load Balancer.

Para confirmar que a aplicação em seu contêiner do ECS está retornando o código de status correto, conclua as seguintes etapas:

  1. Use SSH, Session Manager, um recurso do AWS Systems Manager ou EC2 Instance Connect para se conectar à sua instância de contêiner.

  2. (Opcional) Execute o seguinte comando para que seu sistema operacional (SO) instale o curl.
    Amazon Linux e outras distribuições baseadas em RPM:

    sudo yum -y install curl

    Sistemas baseados em Debian, como o Ubuntu:

    sudo apt-get install curl
  3. Execute o seguinte comando para obter a ID do contêiner:

    docker ps

    Observação: a porta do receptor local é exibida na saída do comando em PORTS no final da sequência.

  4. Se você usar o modo de rede BRIDGE, execute o comando docker inspect para obter o endereço IP do contêiner:

    IPADDR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' 112233445566)

    Observação: o endereço IP do contêiner é salvo no IPADDR. Substitua 112233445566 pelo número da ID do contêiner da saída do comando docker ps. Se você usa o awsvpc, use o endereço IP da tarefa atribuído à interface da rede de tarefas. Se você usar o modo de rede HOST, use o endereço IP da instância de contêiner do host pelo qual a tarefa está exposta.

  5. Para obter o código de status, execute um comando curl que inclua IPADDR e a porta do receptor local:

    curl -I http://${IPADDR}:8080/health

    Observação: no exemplo de comando anterior, substitua 8080 pela porta do seu receptor.

Verifique o status da sua instância de contêiner

Se você receber a seguinte mensagem de evento do seu evento de serviço do Amazon ECS, verifique o status da sua instância de contêiner:

“(service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)”

Verifique o status da sua instância de contêiner no console do Amazon EC2. Se sua instância falhar nas verificações de status do sistema, interrompa e inicie sua instância.

Ative temporariamente os logs de acesso do Application Load Balancer

Ative temporariamente os logs de acesso do Application Load Balancer para verificar os seguintes problemas:

  • Determine se o Application Load Balancer está enviando verificações de integridade para o caminho ou porta corretos e se os destinos estão respondendo corretamente.
  • Analise os códigos de status HTTP retornados pelos destinos para identificar problemas no nível da aplicação, como rotas mal configuradas ou erros do lado do servidor.
  • Verifique se as verificações de integridade atingiram a meta para determinar se há problemas relacionados à rede.
  • Determine se o tempo de resposta excede o tempo limite configurado para a verificação de integridade.

Solucionar outras causas

Se a resolução anterior não resolver seu problema, consulte Solução de problemas relacionados aos balanceadores de carga de serviço no Amazon ECS.

Informações relacionadas

Criar um grupo de destino para seu Application Load Balancer

Usar o balanceamento de carga para distribuir o tráfego de serviço do Amazon ECS

HTTP 504: Gateway timeout

Como soluciono erros 504 que são retornados quando uso um Application Load Balancer?

AWS OFICIAL
AWS OFICIALAtualizada há 4 meses