Saltar al contenido

¿Cómo soluciono los errores de comprobación del estado del equilibrador de carga de red para las tareas de Amazon ECS en Fargate?

8 minutos de lectura
0

Recibo errores en las comprobaciones de estado del equilibrador de carga de red cuando ejecuto tareas de Amazon Elastic Container Service (Amazon ECS) en AWS Fargate.

Descripción corta

Para comprobar el estado de HTTP y HTTPS, consulta ¿Cómo soluciono los errores de comprobación de estado del equilibrador de carga de aplicación para las tareas de Amazon ECS en Fargate?

Cuando tus tareas de Amazon ECS no pasan una comprobación de estado del equilibrador de carga de red, recibes errores en los mensajes de eventos de servicio similares a los de los siguientes ejemplos:

  • «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)».

Si recibes errores en la comprobación de estado del contenedor, consulta ¿Cómo puedo solucionar los errores de comprobación de estado del contenedor para las tareas de Amazon ECS?

Si tus tareas de Amazon ECS están detenidas, consulta Visualización de los errores de las tareas detenidas de Amazon ECS.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Error en las comprobaciones de estado

Para solucionar los errores de comprobación de estado del equilibrador de carga en las tareas de Fargate, haz lo siguiente.

Comprobar la conectividad entre el equilibrador de carga y la tarea de Amazon ECS

Para permitir que el equilibrador de carga realice comprobaciones de estado en las tareas de Amazon ECS, confirma las siguientes configuraciones:

  • Si el contenedor está asignado al puerto 80, el grupo de seguridad de tareas permite el tráfico entrante en dicho puerto.
  • La aplicación se puede ejecutar en el puerto que está asignado a la instancia de contenedor en la definición de la tarea.
  • El grupo de seguridad de la interfaz de red elástica permite el tráfico en el intervalo CIDR de Amazon Virtual Private Cloud (Amazon VPC). Para obtener más información, consulta Grupos de seguridad de destino.
  • Las reglas del grupo de seguridad del equilibrador de carga de red permiten el tráfico saliente al grupo de seguridad del servicio Amazon ECS en el puerto de contenedor requerido.
  • Las listas de control de acceso de la red (ACL de la red) de las subredes de la interfaz de red para tu tarea permiten el tráfico entrante en el puerto de comprobación de estado.
  • La ACL de la red permite el tráfico saliente en los puertos efímeros.

Confirmar que tus tareas responden correctamente a las comprobaciones manuales dentro de tu conexión de Amazon VPC

Confirma que las tareas de la instancia de Amazon Elastic Compute Cloud (Amazon EC2) dentro de tu VPC respondan correctamente a las comprobaciones manuales.

Nota: Puedes crear un clúster para el tipo de inicio de Amazon EC2 o iniciar una nueva instancia de Amazon EC2. Si no deseas iniciar una instancia de Amazon EC2, puedes utilizar ECS Exec.

Para comprobar la respuesta de la tarea, utiliza SSH para conectarte a una instancia de EC2 dentro de tu conexión de Amazon VPC. A continuación, ejecuta uno de los siguientes comandos para probar la configuración del grupo de destino.

Comprobaciones de estado de HTTP:

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

Nota: Sustituye example-task-private-ip por la dirección IP de tu tarea y example-port por tu puerto. El resultado del comando muestra los códigos de estado correctos en el intervalo de 200 a 399 para las configuraciones de comprobación de estado HTTP en el grupo de destino.

Resultado de ejemplo:

HTTP/1.1 200 OK

Comprobaciones de estado de TCP que no utilizan SSL con los destinos:

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

Nota: Sustituye example-task-private-ip por la dirección IP de tu tarea y example-port por tu puerto.

Resultado de ejemplo:

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

Comprobaciones de estado de TCP que requieren SSL para las comprobaciones de estado del backend:

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

Nota: Sustituye example-task-private-ip por la dirección IP de tu tarea y example-port por tu puerto.

Resultado de ejemplo:

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

Comprobar el estado y la configuración de la aplicación en tu instancia de contenedor de Amazon ECS

Haz lo siguiente:

  • Comprueba que el puerto de ping y la ruta de la comprobación de estado de tu grupo de destino se hayan configurado correctamente.
  • Supervisa las métricas de uso de CPU y memoria del servicio para detectar el alto consumo de recursos que hace que la aplicación no responda a las solicitudes de comprobación de estado.

Si tu tarea necesita un periodo de gracia de comprobación de estado más largo, ejecuta el siguiente comando update-service de la AWS CLI para aumentar 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: Sustituye example-cluster por el nombre de tu clúster, example-service por el nombre de tu servicio, example-region por tu región de AWS y example-value por el periodo de gracia de tu comprobación de estado en segundos.

Comprueba si los destinos de tu grupo de destino no pasan las comprobaciones de estado porque tardan más en responder que el periodo de tiempo de espera predeterminado. Para resolver este problema, ejecuta el siguiente comando modify-target-group para aumentar los segundos de tiempo de espera del grupo de destino:

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

Nota: Sustituye Target-Group-ARN por el ARN de tu grupo de destino y Timeout-Value por el valor de tiempo de espera de tu grupo en segundos.

Comprueba los registros de la aplicación para ver si hay errores.

Asegúrate de que el código de respuesta que envía tu aplicación en HealthCheckPath coincida con el código de respuesta de los parámetros de comprobación de estado de tu grupo de destino. Si has configurado el registro de acceso en tu aplicación, utiliza la palabra clave ELB-HealthChecker/2.0 para comprobar la respuesta registrada. Si utilizas los registros de AWS CloudWatch, utiliza la Información de registros de CloudWatch y ejecuta el siguiente comando:

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

El resultado de la consulta muestra las solicitudes de comprobación de estado que envía el equilibrador de carga de red, el código de respuesta y los errores.

El destino se encuentra en una zona de disponibilidad que no está activada para el equilibrador de carga

Si registras destinos en una zona de disponibilidad, debes activar esa zona de disponibilidad para que los destinos registrados reciban tráfico.

Importante: No puedes desactivar las zonas de disponibilidad de un equilibrador de carga de red después de crear el equilibrador de carga. Sin embargo, puedes activar zonas de disponibilidad adicionales.

Para identificar las zonas de disponibilidad para las que está configurado el equilibrador de carga, ejecuta el siguiente comando describe-load-balancers:

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

Nota: Sustituye example-arn-load-balancer por el ARN de tu equilibrador de carga y example-region por tu región.

Para identificar las zonas de disponibilidad para las que está configurada la tarea de Fargate, ejecuta el siguiente comando describe-services:

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

Nota: Sustituye example-cluster-name por el nombre de tu clúster, example-service-name por el nombre de tu servicio y example-region por tu región. El resultado del comando muestra los ID de las subredes de tu servicio.

Para identificar las zonas de disponibilidad de las subredes de la tarea, ejecuta el siguiente comando describe-subnets:

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

Nota: Sustituye example-subnet-ids por tu ID de subred y example-region por tu región. El resultado del comando muestra las zonas de disponibilidad para las que está configurado el servicio.

Para cambiar la configuración de subred de un servicio de Amazon ECS, ejecuta el siguiente comando update-service:

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

Nota: Sustituye cluster-name por el nombre de tu clúster y service-name por el nombre de tu servicio.

Dependencia del backend

Si la ruta de comprobación de estado de la aplicación se comunica con un servicio ascendente o descendente, como una base de datos, asegúrate de que los servicios estén disponibles. Los problemas con los servicios pueden provocar un error en la comprobación de estado.

Las tareas de Amazon ECS pueden estar en mal estado por varios motivos. Si la resolución anterior no resuelve el problema, consulta Solución de problemas con los equilibradores de carga de servicio en Amazon ECS.

Información relacionada

Comprobaciones de estado de los grupos de destino del equilibrador de carga de red

Configuración de la red

OFICIAL DE AWSActualizada hace 5 meses