Come faccio a eseguire le mie attività Amazon ECS utilizzando il tipo di avvio di Amazon EC2 per superare il controllo dell'integrità di Application Load Balancer in Amazon ECS?

11 minuti di lettura
0

Un controllo dell'integrità di Application Load Balancer per un'istanza Amazon Elastic Compute Cloud (Amazon EC2) in Amazon Elastic Container Service (Amazon ECS) restituisce uno stato non integro. Desidero che la mia istanza EC2 superi il controllo dell'integrità.

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

È possibile ricevere anche 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)"

Se ricevi l'errore “(service AWS-Service) (task c13b4cb40f1f4fe4a2971f76ae5a47ad) failed container health checks”, consulta la sezione Come posso risolvere gli errori di controllo dell'integrità dei container per le attività Amazon ECS?

Nota: un'attività Amazon ECS può restituire lo stato non integro per molti motivi. Se con i passaggi seguenti non viene risolto il problema, consulta la sezione Troubleshooting service load balancers. Per determinare perché l'attività ECS è stata interrotta, consulta la sezione Checking stopped tasks for errors.

Soluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente dell’Interfaccia della linea di comando AWS.

Per risolvere i problemi relativi al controllo dell'integrità del bilanciatore del carico sulla tua attività Amazon ECS e superare il controllo dell'integrità di Application Load Balancer, verifica quanto segue:

  • Connettività tra il tuo bilanciatore del carico e l'attività Amazon ECS
  • Impostazioni di controllo dell'integrità del gruppo di destinazione
  • Stato e configurazione dell'applicazione nel container ECS
  • Stato dell'istanza di container

Verifica la connettività tra il bilanciatore del carico e l'attività Amazon ECS

Per assicurarti che il bilanciatore del carico sia autorizzato a eseguire il controllo dell'integrità delle attività Amazon ECS, assicurati di verificare quanto segue.

I gruppi di sicurezza collegati al bilanciatore del carico e all'istanza di container o all'interfaccia di rete elastica delle attività ECS per la modalità di rete awsvpc sono configurati correttamente

È consigliabile configurare diversi gruppi di sicurezza per il bilanciatore del carico e l'istanza di container o l'interfaccia di rete elastica delle attività. Con questo approccio, consentirai tutto il traffico tra i bilanciatori del carico e le istanze di container o l'interfaccia di rete elastica delle attività. È possibile anche abilitare le istanze di container ad accettare il traffico sulla porta specificata per l'attività.

  • Verifica che il gruppo di sicurezza associato al bilanciatore del carico consenta il traffico in uscita verso le istanze di container o l'interfaccia di rete elastica delle attività sulla porta registrata. Verifica che lo stesso valga anche per la porta di controllo dell'integrità associata all'istanza di container, se applicabile.
  • Verifica che il gruppo di sicurezza associato all'istanza di container o all'interfaccia di rete elastica delle attività consenta tutto il traffico in ingresso sull'intervallo di porte host dell’attività dal gruppo di sicurezza associato al bilanciatore del carico. Per verificare il gruppo di sicurezza associato al bilanciatore del carico, consulta la sezione Security groups for your Application Load Balancer.

Importante: quando si utilizza la mappatura dinamica delle porte, il servizio è esposto sulla porta dinamica (in genere le porte 32768 - 65535) anziché sulla porta host. In questo caso, verifica che il gruppo di sicurezza dell'istanza di container rifletta l'intervallo di porte effimero nelle regole di ingresso del bilanciatore del carico come origine.

Il bilanciatore del carico è configurato nella stessa zona di disponibilità dell'istanza di container o nell'interfaccia di rete elastica dell’attività ECS per la modalità di rete awsvpc

Quando viene attivata 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 le destinazioni in una zona di disponibilità e non attivi la zona di disponibilità, le destinazioni registrate non ricevono traffico. Per ulteriori informazioni, consulta la sezione Availability Zones and load balancer nodes.

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 riquadro 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à nel campo Zone di disponibilità.

Nota: con Application Load Balancer puoi abilitare o disabilitare le zone di disponibilità in qualsiasi momento. Con Network Load Balancer non puoi disabilitare le zone di disponibilità dopo averlo abilitate, ma puoi abilitare zone di disponibilità aggiuntive.

Se utilizzi Application Load Balancer, il bilanciamento del carico tra zone è sempre attivo. Se utilizzi Network Load Balancer, il bilanciamento del carico tra zone è disattivato per impostazione predefinita. Dopo avere creato il Network Load Balancer, puoi attivare o disattivare il bilanciamento del carico tra zone in qualsiasi momento. Per ulteriori informazioni, consulta la sezione How Elastic Load Balancing works.

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

  1. Apri la console Amazon EC2.
  2. Nel riquadro di navigazione, in Dimensionamento automatico, scegli Gruppi con dimensionamento automatico.
  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à elencate corrispondano alle zone di disponibilità elencate per il bilanciatore del carico.

Per modificare le zone di disponibilità del cluster, apri la Console AWS CloudFormation, scegli lo stack CloudFormation per il cluster e aggiorna la configurazione delle sottoreti. Per determinare le zone di disponibilità per le quali è configurata l'interfaccia di rete elastica delle attività per awsvpc, procedi come segue:

  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 Dettagli, quindi scegli Sottoreti consentite per visualizzare le sottoreti abilitate per il servizio.
  5. È possibile visualizzare le sottoreti nella console Amazon VPC.
  6. Verifica che le zone di disponibilità delle sottoreti corrispondano alle zone di disponibilità elencate per il bilanciatore del carico.

Nota: non è possibiel modificare la configurazione della sottorete di un servizio Amazon ECS dalla console Amazon ECS. Puoi utilizzare il comando update-service dell’Interfaccia della linea di comando AWS per modificare la configurazione della sottorete.

La lista di controllo degli accessi (ACL) alla rete associata alle sottoreti delle istanze del bilanciatore del carico e del container ECS o l'interfaccia di rete elastica delle attività ECS per la modalità di rete awsvpc devono essere configurate correttamente

Le sottoreti del bilanciatore del carico e dell'istanza di container o l'interfaccia di rete elastica delle attività potrebbero essere diverse. Per assicurarti che il traffico sia consentito tra queste sottoreti, controlla quanto segue:

  • Assicurati che l'ACL di rete associata alle sottoreti del bilanciatore del carico consenta il traffico in ingresso sulle porte effimere (1024 - 65535) e sulla porta dell’ascoltatore. Verifica che l'ACL di rete consenta anche il traffico in uscita sul controllo dell'integrità e sulle porte effimere.
  • Assicurati che l'ACL di rete associata alle sottoreti dell'istanza di container o l'interfaccia di rete elastica delle attività per la modalità awsvpc consentano il traffico in ingresso sulla porta di controllo dell'integrità. Verifica che l'ACL di rete consenta il traffico in uscita sulle porte effimere.

Per ulteriori informazioni sugli ACL di rete, consulta la sezione Work with network ACLs.

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

Per verificare che le impostazioni di controllo dell'integrità del gruppo di destinazione siano configurate correttamente, procedi come segue:

  1. Apri la console Amazon EC2.
  2. Nel riquadro di navigazione, in Bilanciamento del carico, scegli Gruppi di destinazione.
  3. Seleziona il tuo gruppo di destinazione.
    Importante: usa un nuovo gruppo di destinazione. Evita di aggiungere oggetti al gruppo di destinazione manualmente, perché Amazon ECS registra e annulla automaticamente i container con il gruppo di destinazione.
  4. Nella scheda Controlli dell’integrità, inserisci le seguenti informazioni:
    Verifica che i campi Porta e Percorso siano configurati correttamente. Se il campo Porta non è configurato correttamente, il bilanciatore del carico potrebbe annullare la registrazione del container.
    Per Porta, scegli la porta del traffico.
    Nota: se scegli Sostituisci, verifica che la porta specificata corrisponda alla porta host dell'attività.
    Per il campo Timeout, assicurati che il valore di timeout della risposta sia impostato correttamente.
    Nota: Il timeout di risposta corrisponde alla quantità di tempo a disposizione del container per restituire una risposta al ping del controllo dell'integrità. Se questo 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 nel container ECS risponda al controllo dell'integrità del bilanciatore del carico

Per assicurarti che l'applicazione nel container ECS risponda correttamente al controllo dell'integrità del bilanciatore del carico, procedi come segue:

  • Verifica che la porta ping e il percorso di controllo dell’integrità del gruppo di destinazione siano configurati correttamente.
  • Monitora le metriche di utilizzo della CPU e della memoria per il servizio ECS. Ad esempio, un carico elevato della CPU può impedire all'applicazione di rispondere e causare un errore 502 o un timeout.
  • Definisci un periodo di tolleranza del controllo di integrità minimo. Questa impostazione indica al pianificatore di servizi di ignorare i controlli dell'integrità di Elastic Load Balancing per un periodo di tempo predefinito dopo l'inizio di un'attività. Per la registrazione di Network Load Balancer, l’attività Amazon ECS potrebbe richiedere un periodo di tolleranza più lungo per il controllo dell'integrità.
  • Controlla i log delle applicazioni per verificare la presenza di errori. Per ulteriori informazioni, consulta la sezione Viewing awslogs container logs in CloudWatch Logs.

Verifica che l'applicazione nel container ECS restituisca il codice di risposta corretto

Quando il bilanciatore del carico invia una richiesta HTTP GET al percorso di controllo dell'integrità, si suppone che l'applicazione nel container ECS restituisca il codice di risposta predefinito 200 OK.

Nota: se utilizzi un Application Load Balancer, puoi aggiornare l'impostazione Matcher con un codice di risposta diverso da 200. Per ulteriori informazioni, consulta la sezione Health checks for your target groups.

  1. Usa SSH per connetterti alla tua istanza di container.

  2. (Facoltativo) Installa curl con il comando adatto al tuo sistema.
    Per Amazon Linux e altre distribuzioni basate su RPM, esegui comando riportato di seguito:

    sudo yum -y install curl

    Per i sistemi basati su Debian (come Ubuntu), esegui il comando riportato di seguito:

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

    docker ps

    Nota: la porta dell’ascoltatore locale viene visualizzata nell'output del comando sotto PORTS alla fine della sequenza.

  4. Per ottenere l'indirizzo IP del container, esegui il comando docker inspect:

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

    Nota: l'indirizzo IP del container è salvato in IPADDR. Utilizza questo comando solo se utilizzi la modalità di rete BRIDGE. Assicurati di sostituire 112233445566 con il numero ID del container.
    Se stai utilizzando la modalità di rete awsvpc, utilizza l'indirizzo IP dell'attività assegnato all'interfaccia di rete elastica dell’attività. Se utilizzi la modalità di rete HOST, utilizza l'indirizzo IP dell'host attraverso il quale l'attività è esposta.

  5. Per ottenere il codice di stato, esegui un comando curl che includa IPADDR e la porta dell’ascoltatore locale. Ad esempio, se esegui il comando curl su un container in ascolto sulla porta 8080 con il percorso di controllo dell'integrità /health, il comando deve restituire il codice di risposta 200 OK:

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

    Se ricevi un messaggio di errore non HTTP, significa che l'applicazione non è in modalità di ascolto del traffico HTTP. Se ricevi un codice di stato HTTP diverso da quello specificato nell'impostazione Matcher, significa che l'applicazione è in modalità di ascolto del traffico HTTP, ma non restituisce un codice di stato per una destinazione integra.

Controlla lo stato dell'istanza di container

Supponiamo di ricevere il seguente messaggio dall'evento del servizio AWS ECS:

"(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 visualizzando il controllo dello stato sulla console Amazon EC2. Se l’istanza non supera il controllo dell'integrità del sistema, prova ad arrestarla e a riavviarla.

Informazioni correlate

Configure a target group for routing

Service load balancing

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa