¿Cómo puedo ejecutar mis tareas de Amazon ECS con el tipo de lanzamiento de Amazon EC2 para superar la comprobación de estado del equilibrador de carga de aplicación en Amazon ECS?

12 minutos de lectura
0

La comprobación de estado del equilibrador de carga de aplicación devuelve un estado desfavorable en el caso de una instancia de Amazon Elastic Compute Cloud (Amazon EC2) en Amazon Elastic Container Service (Amazon ECS). Quiero que mi instancia de EC2 supere la comprobación de estado.

Breve descripción

Si su tarea de Amazon ECS no supera la comprobación de estado del equilibrador de carga, se mostrará uno de los siguientes errores en el mensaje de evento de servicio de 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)»

Puede que también se muestre el siguiente error en la consola de tareas de Amazon ECS:

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

Si se muestra el error «(service AWS-Service) (task c13b4cb40f1f4fe4a2971f76ae5a47ad) failed container health checks», consulte ¿Cómo soluciono los errores de comprobación de estado del contenedor de tareas de Amazon ECS?

Nota: Una tarea de Amazon ECS puede devolver un estado desfavorable por diversos motivos. Si el problema no se soluciona con los siguientes pasos, consulte Troubleshooting service load balancers. Para averiguar por qué se ha detenido su tarea de ECS, consulte Checking stopped tasks for errors.

Solución

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

Para solucionar los problemas de comprobación de estado del equilibrador de carga en su tarea de Amazon ECS y superar la comprobación de estado del equilibrador de carga de la aplicación, compruebe lo siguiente:

  • Conectividad entre el equilibrador de carga y la tarea de Amazon ECS
  • Configuración de la comprobación de estado de su grupo de destino
  • Estado y configuración de la aplicación en su contenedor de ECS
  • Estado de la instancia del contenedor

Comprobación de la conectividad entre el equilibrador de carga y la tarea de Amazon ECS

Para asegurarse de que su equilibrador de carga pueda realizar comprobaciones de estado en sus tareas de Amazon ECS, compruebe lo siguiente.

Los grupos de seguridad asociados a su instancia de equilibrador de carga y contenedor o a la interfaz de red elástica de la tarea de ECS para el modo de red awsvpc están configurados correctamente

Se recomienda configurar diferentes grupos de seguridad para el equilibrador de carga y la instancia de contenedor o la interfaz de red elástica de la tarea. Con este enfoque, se permite todo el tráfico entre los equilibradores de carga y las instancias de contenedores o la interfaz de red elástica para tareas. También puede habilitar las instancias de contenedor para que acepten tráfico en el puerto especificado para la tarea.

  • Confirme si el grupo de seguridad asociado a su equilibrador de carga permite el tráfico de salida a las instancias del contenedor o a la interfaz de red elástica de la tarea en el puerto registrado. Confirme si ocurre lo mismo con el puerto de comprobación de estado asociado a su instancia de contenedor, si procede.
  • Confirme si el grupo de seguridad asociado a la instancia de contenedor o a la interfaz de red elástica de la tarea permite todo el tráfico de entrada en el rango de puertos del host de la tarea procedente del grupo de seguridad asociado a su equilibrador de carga. Para comprobar el grupo de seguridad asociado a su equilibrador de carga, consulte Security groups for your Application Load Balancer.

Importante: Cuando utiliza la asignación dinámica de puerto, el servicio se expone en el puerto dinámico (normalmente, los puertos 32768 a 65535) en lugar de en el puerto host. En este caso, confirme que el grupo de seguridad de instancias de su contenedor refleje el rango de puertos efímeros en las reglas de entrada del equilibrador de carga como fuente.

El equilibrador de carga está configurado en la misma zona de disponibilidad que la instancia de contenedor o la interfaz de red elástica de la tarea de ECS para el modo de red awsvpc

Cuando habilita una zona de disponibilidad para su equilibrador de carga, Elastic Load Balancing crea un nodo de equilibrador de carga en esa zona de disponibilidad. Si registra destinos en una zona de disponibilidad, pero no activa esa zona, los destinos registrados no recibirán tráfico. Para obtener más información, consulte Availability Zones and load balancer nodes.

Para averiguar las zonas de disponibilidad para las que se ha configurado el equilibrador de carga, siga estos pasos:

  1. Abra la consola de Amazon EC2.
  2. En el panel de navegación, en Equilibrio de carga, seleccione Equilibradores de carga.
  3. Seleccione el equilibrador de carga que utilice para su servicio de Amazon ECS.
  4. En la pestaña Descripción, podrá ver las zonas de disponibilidad en el campo Zonas de disponibilidad.

Nota: En el caso de un equilibrador de carga de aplicación, puede habilitar o deshabilitar las zonas de disponibilidad en cualquier momento. En el caso de un equilibrador de carga de red, no puede deshabilitar las zonas de disponibilidad después de habilitarlas, pero sí puede habilitar zonas de disponibilidad adicionales.

Si utiliza equilibradores de carga de aplicación, el equilibrio de las cargas entre zonas siempre estará activado. Si utiliza equilibradores de carga de red, el equilibrio de cargas entre zonas estará desactivado de forma predeterminada. Tras crear el equilibrador de carga de red, puede activar o desactivar el equilibrio de cargas entre zonas en cualquier momento. Para obtener más información, consulte How Elastic Load Balancing works.

Para averiguar las zonas de disponibilidad para las que se han configurado las instancias de contenedor, siga estos pasos:

  1. Abra la consola de Amazon EC2.
  2. En el panel de navegación, en Auto Scaling, seleccione Grupos de Auto Scaling.
  3. Seleccione el grupo de escalamiento automático de la instancia de contenedor que se ha asociado a su clúster.
  4. En la pestaña Detalles, en Red, compruebe que las zonas de disponibilidad de la lista coincidan con las de su equilibrador de carga.

Para modificar las zonas de disponibilidad de su clúster, abra la consola de AWS CloudFormation, elija la pila de CloudFormation para su clúster y actualice la configuración de las subredes. Para averiguar para qué zonas de disponibilidad se ha configurado la interfaz de red elástica de la tarea para awsvpc, siga estos pasos:

  1. Abra la consola de Amazon ECS.
  2. En el panel de navegación, elija Clústeres y, a continuación, seleccione el clúster que contenga su servicio.
  3. En la pestaña Servicios de la página del clúster, en la columna Nombre del servicio, seleccione el servicio que desee comprobar.
  4. Elija Detalles y, a continuación, Subredes permitidas para ver las subredes habilitadas para el servicio.
  5. Puede ver las subredes en la consola de Amazon VPC.
  6. Compruebe que las zonas de disponibilidad de las subredes coincidan con las zonas de disponibilidad detalladas para su equilibrador de carga.

Nota: No puede cambiar la configuración de la subred de un servicio de Amazon ECS desde la consola de Amazon ECS. Puede usar el comando update-service de la AWS CLI para cambiar la configuración de la subred.

La lista de control de acceso (ACL) de la red asociada con las subredes del equilibrador de carga y las instancias de contenedor de ECS o la interfaz de red elástica de la tarea de ECS para el modo de red awsvpc se ha configurado correctamente

Las subredes del equilibrador de carga y de la instancia de contenedor o la interfaz de red elástica de la tarea pueden ser diferentes. Para asegurarse de que se permite el tráfico entre estas subredes, compruebe lo siguiente:

  • Asegúrese de que la ACL de red asociada a las subredes de su equilibrador de carga permita el tráfico de entrada en los puertos efímeros (1024 a 65535) y el puerto de escucha. Verifique que la ACL de la red también permita el tráfico de salida en los puertos efímeros y de comprobación de estado.
  • Asegúrese de que la ACL de red asociada a las subredes de su instancia de contenedor o interfaz de red elástica para la tarea para el modo awsvpc permita la entrada de tráfico en el puerto de comprobación de estado. Verifique que la ACL de red permita el tráfico de salida en los puertos efímeros.

Para obtener más información sobre las ACL de red, consulte Work with network ACLs.

Comprobación de la configuración de la comprobación de estado de su grupo de destino

Para asegurarse de que la configuración del control de estado de su grupo de destino sea correcta, siga estos pasos:

  1. Abra la consola de Amazon EC2.
  2. En el panel de navegación, en Equilibrio de carga, seleccione Grupos de destino.
  3. Seleccione su grupo de destino.
    Importante: Utilice un nuevo grupo de destino. Evite añadir destinos al grupo de destino manualmente, ya que Amazon ECS registra y anula automáticamente los contenedores en el grupo de destino.
  4. En la pestaña Comprobaciones de estado, introduzca la siguiente información:
    Compruebe que los campos Puerto y Ruta estén configurados correctamente. Si el campo Puerto no se ha configurado correctamente, es posible que el equilibrador de carga cancele el registro del contenedor.
    En Puerto, elija Puerto de tráfico.
    Nota: Si elige Sustituir, confirme que el puerto especificado coincida con el puerto del host de la tarea.
    En Tiempo de espera, asegúrese de que el valor del tiempo de espera de respuesta se haya configurado correctamente.
    Nota: El tiempo de espera de respuesta es la cantidad de tiempo que tiene el contenedor para devolver una respuesta al ping de comprobación de estado. Si este valor es inferior al tiempo necesario para responder, se produce un error en la comprobación de estado.

Comprobación del estado y la configuración de la aplicación en su contenedor de ECS

Confirmación de si la aplicación de su contenedor de ECS responde a la comprobación de estado de su equilibrador de carga

Para asegurarse de que la aplicación de su contenedor de ECS responda correctamente a la comprobación de estado del equilibrador de carga, realice las siguientes tareas:

  • Compruebe que el puerto de ping y la ruta de la comprobación de estado de su grupo de destino se hayan configurado correctamente.
  • Monitorice las métricas de consumo de memoria y CPU del servicio de ECS. Por ejemplo, un consumo elevado de CPU puede hacer que la aplicación deje de responder y provocar un error 502 o de tiempo de espera.
  • Defina un periodo de gracia mínimo para la comprobación de estado. Esta configuración indica al programador de servicios que debe ignorar las comprobaciones de estado de Elastic Load Balancing durante un periodo de tiempo predefinido después de crear una instancia de una tarea. Es posible que su tarea de Amazon ECS requiera un periodo de gracia más largo de comprobación de estado para registrar el equilibrador de carga de red.
  • Compruebe los registros de la aplicación para ver si hay errores. Para obtener más información, consulte Viewing awslogs container logs in CloudWatch Logs.

Confirmación de si la aplicación de su contenedor ECS devuelve el código de respuesta correcto

Cuando el equilibrador de carga envía una solicitud HTTP GET a la ruta de comprobación de estado, se espera que la aplicación del contenedor de ECS devuelva el código de respuesta predeterminado 200 OK.

Nota: Si usa un equilibrador de carga de aplicación, puede actualizar la configuración de Coincidencia a un código de respuesta distinto del 200. Para obtener más información, consulte Health checks for your target groups.

  1. Use SSH para conectarse a su instancia de contenedor.

  2. (Opcional) Instale curl con el comando adecuado para su sistema.
    En Amazon Linux y otras distribuciones basadas en RPM, ejecute el siguiente comando:

    sudo yum -y install curl

    En sistemas basados en Debian (como Ubuntu), ejecute el siguiente comando:

    sudo apt-get install curl
  3. Para obtener el ID del contenedor, ejecute el siguiente comando:

    docker ps

    Nota: El puerto de escucha local se muestra en la resultado del comando, en PORTS, al final de la secuencia.

  4. Para obtener la dirección IP del contenedor, ejecute el comando docker inspect:

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

    **Nota:**La dirección IP del contenedor se guarda en IPADDR. Utilice este comando solo si utiliza el modo de red BRIDGE. Asegúrese de reemplazar 112233445566 por el número de identificación del contenedor.
    Si utiliza el modo de red awsvpc, use la dirección IP de la tarea asignada a la interfaz de red elástica de la tarea. Si utiliza el modo de red HOST, use la dirección IP del host a través del cual se expone la tarea.

  5. Para obtener el código de estado, ejecute un comando curl que incluya IPADDR y el puerto de escucha local. Por ejemplo, si ejecuta el comando curl en un contenedor que escucha en el puerto 8080 con la ruta de comprobación de estado /health, el comando debe devolver el código de respuesta 200 OK:

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

    Si se muestra un mensaje de error por no tratarse de HTTP, significa que la aplicación no escucha el tráfico HTTP. Si recibe un código de estado de HTTP diferente al que especificó en la configuración de Coincidencia, la aplicación escucha el tráfico HTTP, pero no devuelve un código de estado de un destino en buen estado.

Comprobación de estado de su instancia de contenedor

Supongamos que se muestra el siguiente mensaje desde su evento de servicio de 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)»

Compruebe el estado de la instancia de contenedor; para ello, visualice la comprobación de estado en la consola de Amazon EC2. Si la instancia no supera las comprobaciones de estado del sistema, pruebe a detenerla e iniciarla.

Información relacionada

Configure a target group for routing

Service load balancing

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años