Salta al contenuto

Come posso risolvere gli errori di controllo dell’integrità di Network Load Balancer per le attività Amazon ECS su Fargate?

7 minuti di lettura
0

Quando eseguo attività Amazon Elastic Container Service (Amazon ECS) su AWS Fargate, ricevo errori di controllo dell’integrità di Network Load Balancer.

Breve descrizione

Per i controlli dell’integrità HTTP e HTTPS, consulta Come faccio a risolvere gli errori di controllo dell'integrità di Application Load Balancer per le attività di Amazon ECS su Fargate?

Quando le attività Amazon ECS non superano il controllo dell'integrità di Network Load Balancer, nei messaggi relativi agli eventi del servizio ricevi errori simili ai seguenti esempi:

  • "Health checks failed error - (service AWS-service) (port 80) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)"
  • "Target is in an Availability Zone that is not turned on for the load balancer error - (service AWS-service) (port 80) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Target is in an Availability Zone that is not enabled for the load balancer)"
  • "Health checks requests getting timed out - (service AWS-service) (port 8443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Request timed out)."

Se ricevi errori nei controlli dell’integrità del container, consulta Come posso risolvere i problemi relativi al controllo dell'integrità del container per le attività di Amazon ECS?

Se le attività Amazon ECS vengono interrotte, consulta Visualizzazione degli errori delle attività interrotte da Amazon ECS.

Risoluzione

Nota: se ricevi errori quando esegui i 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.

Controlli dell’integrità non superati

Per risolvere i problemi di controllo dell’integrità del bilanciatore del carico nelle attività Fargate, intraprendi le seguenti azioni.

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

Per consentire al bilanciatore del carico di eseguire controlli dell’integrità delle attività Amazon ECS, verifica le seguenti configurazioni:

  • Se il container è mappato sulla porta 80, il gruppo di sicurezza delle attività consente il traffico in entrata sulla porta 80.
  • L'applicazione può essere eseguita sulla porta mappata sull'istanza di container nella definizione dell'attività.
  • Il gruppo di sicurezza dell'interfaccia di rete elastica consente il traffico sull'intervallo CIDR di Amazon Virtual Private Cloud (Amazon VPC). Per ulteriori informazioni, consulta Gruppi di sicurezza target.
  • Le regole del gruppo di sicurezza di Network Load Balancer consentono il traffico in uscita verso il gruppo di sicurezza del servizio Amazon ECS sulla porta del container richiesta.
  • Le liste di controllo degli accessi alla rete (ACL di rete) delle sottoreti dell'interfaccia di rete per l'attività consentono il traffico in entrata sulla porta del controllo dell'integrità.
  • L'ACL di rete consente il traffico in uscita sulle porte effimere.

Verifica che le attività rispondano correttamente ai controlli manuali all'interno della connessione Amazon VPC

Verifica che le attività dell'istanza Amazon Elastic Compute Cloud (Amazon EC2) all'interno del VPC rispondano correttamente ai controlli manuali.

Nota: puoi creare un cluster per il tipo di avvio Amazon EC2 o avviare una nuova istanza Amazon EC2. Se non desideri avviare un'istanza Amazon EC2, puoi utilizzare ECS Exec.

Per verificare la risposta all'attività, utilizza SSH per connetterti a un'istanza EC2 all'interno della connessione Amazon VPC. Quindi esegui uno dei seguenti comandi per testare la configurazione del gruppo di destinazione.

Controlli dell'integrità HTTP:

curl -Iv http://example-task-private-ip:example-port/healthcheck_path

Nota: sostituisci example-task-private-ip con l'indirizzo IP della tua attività e example-port con la tua porta. L'output del comando mostra i codici di stato corretti nell'intervallo 200-399 per le configurazioni di controllo dell'integrità HTTP nel gruppo di destinazione.

Esempio di output:

HTTP/1.1 200 OK

Controlli dell’integrità TCP che non utilizzano SSL con le destinazioni:

nc -z -v -w10 example-task-private-ip example-port

Nota: sostituisci example-task-private-ip con l'indirizzo IP della tua attività e example-port con la tua porta.

Esempio di output:

nc -z -v -w10 10.x.x.x 80Connection to 10.x.x.x port 80 [tcp/http] succeeded!

Controlli dell’integrità TCP che richiedono SSL per i controlli dell’integrità del backend:

nc -z -v -w10 --ssl example-task-private-ip example-port

Nota: sostituisci example-task-private-ip con l'indirizzo IP della tua attività e example-port con la tua porta.

Esempio di output:

nc -z -v -w10 10.x.x.x 443Connection to 10.x.x.x port 443 [tcp/https] succeeded!

Verifica lo stato e la configurazione dell'applicazione nell'istanza di container Amazon ECS

Esegui le seguenti azioni:

Se l'attività richiede un periodo di tolleranza più lungo per il controllo dell’integrità, esegui questo comando AWS CLI update-service per aumentare il valore healthCheckGracePeriodSeconds:

aws ecs update-service --cluster example-cluster --service example-service --region example-region --health-check-grace-period-seconds example-value --force-new-deployment

Nota: sostituisci example-cluster con il nome del tuo cluster, example-service con il nome del tuo servizio, example-region con la tua regione AWS e example-value con il tuo periodo di tolleranza per il controllo dell’integrità espresso in secondi.

Verifica se i destinatari del gruppo di destinazione non superano i controlli dell'integrità perché impiegano più tempo a rispondere rispetto al timeout predefinito. Per risolvere il problema, esegui questo comando modify-target-groupper aumentare i secondi di timeout del gruppo target:

aws elbv2 modify-target-group --target-group-arn Target-Group-ARN --health-check-timeout-seconds Timeout-Value

Nota: sostituisci Target-group-ARN con l'ARN del tuo gruppo di destinazione e Timeout-Value con il valore di timeout del tuo gruppo espresso in secondi.

Controlla i log delle applicazioni per verificare la presenza di errori.

Assicurati che il codice di risposta inviato dall'applicazione su HealthCheckPath corrisponda al codice di risposta contenuto nei parametri del controllo dell'integrità del gruppo di destinazione. Se per l'applicazione hai configurato la registrazione degli accessi, utilizza la parola chiave ELB-HealthChecker/2.0 per controllare la risposta registrata. Se disponi di Amazon CloudWatch Logs, utilizza CloudWatch Logs Insights per eseguire la seguente query:

fields @timestamp, @message| sort @timestamp desc
| filter @message like /ELB-HealthChecker/

L'output della query mostra le richieste di controllo dell'integrità inviate da Network Load Balancer, il codice di risposta e gli errori.

La destinazione si trova in una zona di disponibilità non attivata per il bilanciatore del carico

Se registri destinazioni in una zona di disponibilità, devi attivare la zona di disponibilità affinché le destinazioni registrate ricevano traffico.

Importante: non puoi disattivare le zone di disponibilità per un Network Load Balancer dopo averlo creato. Puoi invece attivare zone di disponibilità aggiuntive.

Per identificare le zone di disponibilità per le quali è configurato il bilanciatore del carico, esegui questo comando describe-load-balancers:

aws elbv2 describe-load-balancers --load-balancer-arn example-arn-load-balancer --region example-region --query "LoadBalancers[].AvailabilityZones[].ZoneName"

Nota: sostituisci example-arn-load-balancer con l'ARN del tuo bilanciatore del carico e example-region con la tua regione.

Per identificare le zone di disponibilità per le quali è configurata l'attività Fargate, esegui questo comando describe-services:

aws ecs describe-services --cluster example-cluster-name --services example-service-name --region example-region --query "services[].networkConfiguration.awsvpcConfiguration.subnets"

Nota: sostituisci example-cluster-name con il nome del tuo cluster, example-service-name con il nome del tuo servizio e example-region con la tua regione. L'output del comando mostra gli ID delle sottoreti del servizio.

Per identificare le zone di disponibilità delle sottoreti dell'attività, esegui questo comando describe-subnets:

aws ec2 describe-subnets --subnet-ids example-subnet-ids --region example-region --query "Subnets[].AvailabilityZone"

Nota: sostituisci example-subnet-id con l'ID della tua sottorete e example-region con la tua regione. L'output del comando mostra le zone di disponibilità per cui è configurato il servizio.

Per modificare la configurazione della sottorete di un servizio Amazon ECS, esegui questo comando update-service:

aws ecs update-service --cluster cluster-name --service service-name --network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxx,subnet-yyyyy]}"

Nota: sostituisci cluster-name con il nome del tuo cluster e service-name con il nome del tuo servizio.

Dipendenza dal backend

Se il percorso di controllo dell'integrità dell'applicazione comunica con un servizio a monte o a valle, come ad esempio un database, assicurati che i servizi siano disponibili. Errori dei servizi possono comportare impedire il superamento del controllo dell'integrità.

Le attività Amazon ECS potrebbero essere nello stato Non integro per diversi motivi. Se la risoluzione precedente non risolve il problema, consulta Risoluzione dei problemi relativi ai bilanciatori del carico in Amazon ECS.

Informazioni correlate

Controlli dell'integrità per i gruppi target di Network Load Balancer

Configurazione della rete