Come posso fare in modo che le mie attività Amazon ECS che utilizzano il tipo di avvio Amazon EC2 superino il controllo dell'integrità di Application Load Balancer?

10 minuti di lettura
0

Desidero risolvere i problemi relativi ai controlli dell'integrità di Application Load Balancer per le attività Amazon Elastic Container Service (Amazon ECS) eseguite sulle mie istanze Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrizione

Se l’attività Amazon ECS non supera il controllo dell'integrità del bilanciatore del carico, riceverai uno dei seguenti errori dal messaggio dell’evento di servizio di 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)"

Potresti anche ricevere il seguente errore dalla console attività Amazon ECS:

"Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)"

Per i controlli dell’integrità dei container non riusciti, consulta Come posso risolvere i problemi relativi al controllo dell'integrità del container per le attività di Amazon ECS?

Per determinare il motivo per cui l'attività Amazon ECS è stata interrotta, consulta Visualizzazione degli errori delle attività interrotte da Amazon ECS e Perché la mia attività Amazon ECS viene interrotta?

Risoluzione

Nota: se ricevi errori durante l’esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Configurare diversi gruppi di sicurezza

È consigliabile configurare diversi gruppi di sicurezza per consentire tutto il traffico tra i bilanciatori del carico e le istanze di container o l'interfaccia di rete elastica delle attività. Puoi anche configurare le istanze di container in modo che accettino il traffico sulla porta specificata per l'attività.

Nella tua configurazione, controlla le seguenti impostazioni:

  • Il gruppo di sicurezza associato al bilanciatore del carico consente il traffico in uscita verso le istanze di container o l'interfaccia di rete delle attività sulla porta registrata. Inoltre, consenti il traffico in uscita verso le tue istanze di container sulla porta del controllo dell'integrità.
  • Consenti il traffico in entrata sull'intervallo di porte dell'host dell'attività dal gruppo di sicurezza associato al tuo bilanciatore del carico.

Attiva la zona di disponibilità per il tuo bilanciatore del carico

Quando configuri una zona di disponibilità per il bilanciatore del carico, Elastic Load Balancing crea un nodo del bilanciatore del carico nella zona di disponibilità. Se registri destinazioni nella zona di disponibilità e non attivi la zona di disponibilità, le destinazioni registrate non ricevono traffico. Per ulteriori informazioni, consulta Zone di disponibilità e nodi del sistema di bilanciamento del carico.

Per determinare le zone di disponibilità per le quali è configurato il bilanciatore del carico, procedi come segue:

  1. Apri la console Amazon EC2.
  2. Nel pannello di navigazione, in Bilanciamento del carico, scegli Sistemi di bilanciamento del carico.
  3. Seleziona il bilanciatore del carico che stai utilizzando per il servizio Amazon ECS.
  4. Nella scheda Descrizione, puoi visualizzare le zone di disponibilità.

Oppure esegui il comando AWS CLI describe-load-balancers:

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

Nota: sostituisci EXAMPLE-ALB-ARN con l'ARN del tuo Application Load Balancer.

Per determinare le zone di disponibilità per le quali sono configurate le istanze di container, procedi come segue:

  1. Apri la console Amazon EC2.
  2. Nel pannello di navigazione, in Auto Scaling, scegli Gruppi Auto Scaling.
  3. Seleziona il gruppo Auto Scaling dell'istanza di container associata al cluster.
  4. Nella scheda Dettagli in Rete, verifica che le zone di disponibilità corrispondano a quelle per il bilanciatore del carico.

Oppure esegui il comando AWS CLI describe-auto-scaling-groups:

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

Nota: sostituisci EXAMPLE-ASG-NAME con il nome del tuo gruppo Auto Scaling.

Per modificare le zone di disponibilità del cluster, completa i seguenti passaggi:

  1. Apri la console AWS CloudFormation.
  2. Seleziona lo stack CloudFormation del cluster.
  3. Aggiorna lo stack.
  4. Nella pagina Specifica i dettagli dello stack, aggiorna la configurazione ID sottorete.

Per determinare le zone di disponibilità per le quali è configurata l'attività, completa i seguenti passaggi:

  1. Apri la console Amazon ECS.

  2. Nel riquadro di navigazione, scegli Cluster, quindi seleziona il cluster che contiene il tuo servizio.

  3. Nella scheda Servizi della pagina del cluster, nella colonna Nome servizio, seleziona il servizio che desideri controllare.

  4. Scegli la scheda Configurazione e rete.

  5. In Configurazione di rete, visualizza le sottoreti configurate.

  6. Apri la console Amazon Virtual Private Cloud (Amazon VPC) per visualizzare informazioni aggiuntive che non sono disponibili nella console ECS.

  7. Esegui il comando describe-services per verificare che le zone di disponibilità delle sottoreti corrispondano alle zone di disponibilità del bilanciatore del carico:

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

    Nota: sostituisci EXAMPLE-CLUSTER-NAME con il nome del tuo cluster e EXAMPLE-SERVICE-NAME con il nome del tuo servizio.

Non puoi utilizzare la console Amazon ECS per modificare la configurazione della sottorete di un servizio Amazon ECS. Esegui invece il comando AWS CLI update-service.

Configura la lista di controllo degli accessi alla rete (ACL) per consentire il traffico tra sottoreti

Le sottoreti del bilanciatore del carico e dell'istanza di container o l'interfaccia di rete elastica dell'attività potrebbero essere diverse.

Per consentire il traffico tra sottoreti, utilizza le seguenti configurazioni della lista di controllo degli accessi alla rete (ACL):

  • L'ACL associata alle sottoreti del bilanciatore del carico deve consentire il traffico in entrata sulle porte effimere (1024-65535) e sulla porta listener.
  • L'ACL deve inoltre consentire il traffico in uscita sulle porte del controllo dell’integrità e sulle porte effimere.
  • L'ACL associata alle sottoreti per l'istanza di container o l'interfaccia di rete dell'attività per awsvpc deve consentire il traffico in entrata sulla porta del controllo dell’integrità.
  • L'ACL deve inoltre consentire il traffico in uscita sulle porte effimere (1024-65535).

Per ulteriori informazioni sulle ACL, consulta Controllo del traffico della sottorete con le liste di controllo degli accessi alla rete.

Verifica le impostazioni del controllo dell'integrità del gruppo di destinazione

Per verificare di aver configurato correttamente le impostazioni del controllo dell'integrità del gruppo di destinazione, completa i seguenti passaggi:

  1. Apri la console Amazon EC2.
  2. Nel pannello di navigazione, in Bilanciamento del carico, scegli Gruppi di destinazione.
  3. Seleziona il tuo gruppo di destinazione.
    Importante: usa un nuovo gruppo di destinazione. Poiché Amazon ECS registra e annulla la registrazione automatica dell'attività ECS con il gruppo di destinazione, non aggiungere manualmente le destinazioni al gruppo di destinazione.
  4. Nella scheda Controlli dello stato, esegui le seguenti azioni:
    Verifica di aver configurato correttamente i campi Porta e Percorso.
    Nota: se non configuri correttamente i campi, Amazon ECS potrebbe chiedere al bilanciatore del carico di annullare la registrazione dell'attività per il mancato superamento dei controlli dell'integrità.
    Per Porta, scegli la porta del traffico.
    Nota: se scegli Override (Sostituisci), verifica che la porta specificata corrisponda alla porta host dell'attività.
    Per Timeout, assicurati che il valore di timeout della risposta sia impostato correttamente.
    Nota: se il valore è inferiore al tempo richiesto per una risposta, il controllo dell'integrità ha esito negativo.

Controlla lo stato e la configurazione dell'applicazione nel container ECS

Verifica che l'applicazione risponda al controllo dell'integrità del bilanciatore del carico

Esegui le seguenti azioni:

  • Verifica di aver configurato correttamente la porta ping e il percorso di controllo dell'integrità per il gruppo di destinazione.
  • Monitora le metriche di utilizzo della CPU e della memoria per il servizio Amazon ECS. Se l'applicazione è lenta o scade, aumenta le quote di risorse delle attività, espandi il servizio, ottimizza l'applicazione o utilizza un tipo di istanza più grande.
  • Imposta un periodo minimo di tolleranza per il controllo dell'integrità in modo che il pianificatore del servizio ignori i controlli dell'integrità per un periodo di tempo predefinito dopo l'avvio di un'attività.
    Nota: il periodo di tolleranza richiesto dalla tua attività Amazon ECS per il controllo dell'integrità prima di registrare Application Load Balancer potrebbe essere più lungo.
  • Controlla i log dell'applicazione per verificare la presenza di errori. Per ulteriori informazioni, consulta Invia i log di Amazon ECS a CloudWatch.

Verifica che l'applicazione restituisca il codice di stato corretto

Quando il bilanciatore del carico invia una richiesta HTTP GET al percorso di controllo dell'integrità, l'applicazione nel container ECS restituisce il codice di risposta predefinito 200 OK. Se ricevi un messaggio di errore non HTTP, significa che l'applicazione non è in modalità di ascolto del traffico HTTP. Potresti ricevere un codice di stato HTTP diverso da quello specificato nell'impostazione Matcher (Corrispondenza di risposta). Se ricevi un altro codice di stato, l'applicazione è in ascolto del traffico HTTP ma non restituisce un codice di stato per una destinazione integra.

Nota: se utilizzi un Application Load Balancer, puoi aggiornare l'impostazione Matcher (Corrispondenza di risposta) con un codice di stato diverso da 200. Per ulteriori informazioni, consulta Controlli dell'integrità per i gruppi di destinazione di Application Load Balancer.

Per verificare se l'applicazione nel container ECS restituisce il codice di stato corretto, completa i seguenti passaggi:

  1. Utilizza SSH, Session Manager, una funzionalità di AWS Systems Manager o EC2 Instance Connect per connetterti all'istanza di container.

  2. (Facoltativo) Esegui il seguente comando in base al sistema operativo (OS) in uso per installare curl.
    Amazon Linux e altre distribuzioni basate su RPM:

    sudo yum -y install curl

    Sistemi basati su Debian, come Ubuntu:

    sudo apt-get install curl
  3. Per ottenere l'ID del container, esegui il seguente comando:

    docker ps

    Nota: la porta per il listener locale viene visualizzata nell'output del comando in PORTS alla fine della sequenza.

  4. Se utilizzi la modalità di rete BRIDGE, esegui il comando docker inspect per ottenere l'indirizzo IP del container:

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

    Nota: l'indirizzo IP del container viene salvato in IPADDR. Sostituisci 112233445566 con l'ID del container che figura nell'output del comando docker ps. Se utilizzi awsvpc, utilizza l'indirizzo IP dell'attività assegnato alla sua interfaccia di rete. Se utilizzi la modalità di rete HOST, utilizza l'indirizzo IP dell'istanza di container host attraverso cui è esposta l'attività.

  5. Per ottenere il codice di stato, esegui un comando curl che include IPADDR e la porta del listener locale:

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

    Nota: nell'esempio di comando precedente, sostituisci 8080 con la porta del tuo listener.

Controlla lo stato dell'istanza di container

Se ricevi il seguente messaggio di errore dall'evento del servizio Amazon ECS, controlla lo stato dell'istanza di container:

"(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)"

Controlla lo stato dell'istanza di container sulla console Amazon EC2. Se l'istanza non supera i controlli dell'integrità del sistema, interrompi e avvia l'istanza.

Attiva temporaneamente i log di accesso di Application Load Balancer

Attiva temporaneamente i log di accesso di Application Load Balancer per verificare l'eventuale presenza dei seguenti problemi:

  • Determina se Application Load Balancer sta inviando i controlli dell'integrità alla porta o al percorso corretto e se le destinazioni rispondono correttamente.
  • Analizza i codici di stato HTTP restituiti dalle destinazioni per identificare problemi a livello di applicazione, come route non configurate correttamente o errori lato server.
  • Verifica che i controlli dell'integrità abbiano raggiunto la destinazione per determinare se sono presenti problemi relativi alla rete.
  • Determina se il tempo di risposta supera il timeout configurato per il controllo dell'integrità.

Risolvi altre cause

Se la risoluzione precedente non elimina il problema, consulta Risoluzione dei problemi relativi ai servizi di bilanciamento del carico in Amazon ECS.

Informazioni correlate

Crea un gruppo di destinazione per il tuo Application Load Balancer

Usa il bilanciamento del carico per distribuire il traffico del servizio Amazon ECS

HTTP 504: timeout del gateway

Come posso risolvere gli errori 504 che vengono restituiti quando utilizzo un Application Load Balancer?

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa