Solución de problemas de configuración de App Mesh - AWS App Mesh

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Solución de problemas de configuración de App Mesh

En este tema se explican los problemas comunes que pueden ocurrir con la configuración de App Mesh.

No se puede extraer la imagen del contenedor de Envoy

Síntomas

Recibe el siguiente mensaje de error en una tarea de Amazon ECS. El ID de cuenta y la región de Amazon ECR que aparecen en el siguiente mensaje pueden ser diferentes en función del repositorio de Amazon ECR del que haya extraído la imagen del contenedor.

CannotPullContainerError: Error response from daemon: pull access denied for 840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy, repository does not exist or may require 'docker login'

Resolución

Este error indica que la función de ejecución de tareas que se utiliza no tiene permiso para comunicar con Amazon ECR y no puede extraer la imagen del contenedor de Envoy del repositorio. El rol de ejecución de tareas asignado a su tarea de Amazon ECS necesita una política de IAM con las siguientes instrucciones:

{ "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:us-west-2:111122223333:repository/aws-appmesh-envoy", "Effect": "Allow" }, { "Action": "ecr:GetAuthorizationToken", "Resource": "*", "Effect": "Allow" }

Si el problema sigue sin resolverse, considera abrir un GitHub problema o ponte en contacto con AWSSupport.

No se puede conectar con el servicio de administración de Envoy de App Mesh

Síntomas

Su proxy de Envoy no puede conectar con el servicio de administración de Envoy de App Mesh. Está viendo:

  • Errores de conexión rechazada

  • Tiempos de espera de conexión

  • Errores al resolver el punto de conexión del servicio de administración de Envoy de App Mesh

  • Errores gRPC

Resolución

Asegúrese de que su proxy de Envoy tenga acceso a Internet o a un punto de conexión de VPC privado y de que sus grupos de seguridad permitan el tráfico saliente en el puerto 443. Los puntos de conexión del servicio de administración de Envoy público de App Mesh siguen el formato de nombre de dominio completo (FQDN).

# App Mesh Production Endpoint appmesh-envoy-management.Region-code.amazonaws.com # App Mesh Preview Endpoint appmesh-preview-envoy-management.Region-code.amazonaws.com

Puede depurar su conexión a EMS mediante el siguiente comando. Esto envía una solicitud de gRPC válida, pero vacía, al servicio de administración de Envoy.

curl -v -k -H 'Content-Type: application/grpc' -X POST https://appmesh-envoy-management.Region-code.amazonaws.com:443/envoy.service.discovery.v3.AggregatedDiscoveryService/StreamAggregatedResources

Si vuelve a recibir estos mensajes, su conexión con el servicio de administración de Envoy funciona. Para depurar errores relacionados con gRPC, consulte los errores en Envoy se desconectó del servicio de administración de Envoy de App Mesh mostrando un texto de error.

grpc-status: 16 grpc-message: Missing Authentication Token

Si el problema sigue sin resolverse, considera abrir un GitHub problema o ponte en contacto con AWSSupport.

Envoy se desconectó del servicio de administración de Envoy de App Mesh mostrando un texto de error

Síntomas

Su proxy de Envoy no puede conectarse al servicio de administración de Envoy de App Mesh ni recibir su configuración. Sus registros de proxy de Envoy contienen una entrada de registro como la siguiente.

gRPC config stream closed: gRPC status code, message

Resolución

En la mayoría de los casos, la parte del mensaje del registro debería indicar el problema. En la siguiente tabla se enumeran los códigos de estado de gRPC más comunes que se pueden ver, sus causas y sus resoluciones.

Código de estado de gRPC Causa Resolución
0 Desconexión sin problemas del servicio de administración de Envoy. No hay ningún problema. App Mesh ocasionalmente desconecta los proxies de Envoy con este código de estado. Envoy volverá a conectar y seguirá recibiendo actualizaciones.
3 No se pudo encontrar el punto de conexión de malla (nodo virtual o puerta de enlace virtual) o uno de sus recursos asociados. Compruebe la configuración de Envoy para asegurarse de que tiene el nombre adecuado del recurso App Mesh que representa. Si su recurso de App Mesh está integrado con otros recursos de AWS, por ejemplo, certificados ACM o espacios de nombres de AWS Cloud Map, asegúrese de que esos recursos existan.
7 El proxy de Envoy no está autorizado para realizar una acción, como conectarse al servicio de administración de Envoy o recuperar los recursos asociados. Asegúrese de crear una política de IAM que contenga las declaraciones de políticas adecuadas para App Mesh y otros servicios y asocie dicha política al rol o usuario de IAM que su proxy de Envoy utiliza para conectarse al servicio de administración de Envoy.
8 La cantidad de proxies de Envoy de un recurso de App Mesh determinado supera la cuota de servicio en el nivel de cuenta. Consulte Cuotas de servicio de App Mesh para obtener más información acerca de las cuotas de la cuenta predeterminado y cómo solicitar un aumento de cuotas.
16 El proxy de Envoy no tiene credenciales de autenticación válidas para AWS. Asegúrese de que el Envoy tenga las credenciales adecuadas para conectarse a los servicios de AWS a través de un rol o usuario de IAM. Existe un problema conocido, el #24136, en la versión v1.24 de Envoy y en las versiones anteriores, por el que no se obtienen las credenciales si el proceso de Envoy utiliza más de 1024 descriptores archivos. Esto sucede cuando Envoy atiende un volumen de tráfico elevado. Puede confirmar este problema buscando el texto "A libcurl function was given a bad argument" en los registros de Envoy en el nivel de depuración. Para mitigar este problema, actualice a la versión v1.25.1.0-prod o posterior de Envoy.

Puedes observar los códigos de estado y los mensajes de tu proxy de Envoy con Amazon CloudWatch Insights mediante la siguiente consulta:

filter @message like /gRPC config stream closed/ | parse @message "gRPC config stream closed: *, *" as StatusCode, Message

Si el mensaje de error proporcionado no fue útil o tu problema sigue sin resolverse, considera abrir un GitHub problema.

La comprobación de estado del contenedor de Envoy, la sonda de disponibilidad o la sonda de vivacidad producen errores

Síntomas

Su proxy de Envoy no pasa las comprobaciones de estado en una tarea de Amazon ECS, en una instancia de Amazon EC2 o en un pod de Kubernetes. Por ejemplo, consulta la interfaz de administración de Envoy con el siguiente comando y recibe un estado distinto de LIVE.

curl -s http://my-app.default.svc.cluster.local:9901/server_info | jq '.state'

Resolución

A continuación se muestra una lista de pasos de corrección en función del estado devuelto por el proxy de Envoy.

  • PRE_INITIALIZING o INITIALIZING: el proxy de Envoy aún no ha recibido la configuración o no puede conectarse y obtener la configuración del servicio de administración de Envoy de App Mesh. Es posible que el Envoy esté recibiendo un error del servicio de administración de Envoy al intentar conectarse. Para obtener más información, consulte los errores en Envoy se desconectó del servicio de administración de Envoy de App Mesh mostrando un texto de error.

  • DRAINING: el proxy de Envoy ha empezado a agotar las conexiones en respuesta a una solicitud /healthcheck/fail o /drain_listeners en la interfaz de administración de Envoy. No recomendamos invocar estas rutas en la interfaz de administración a menos que esté a punto de finalizar su tarea de Amazon ECS, instancia de Amazon EC2 o pod de Kubernetes.

Si el problema sigue sin resolverse, considera abrir un GitHub problema o ponte en contacto con AWSSupport.

La comprobación de estado desde el equilibrador de carga hasta el punto de conexión de malla está fallando

Síntomas

La comprobación de estado del contenedor o la sonda de disponibilidad consideran que el punto de conexión de malla está en buen estado, pero la comprobación de estado desde el equilibrador de carga hasta el punto de conexión de malla está fallando.

Resolución

Para resolver el problema, realice las siguientes tareas.

  • Asegúrese de que el grupo de seguridad asociado a su punto de conexión de malla acepte el tráfico entrante en el puerto que configuró para la comprobación de estado.

  • Asegúrese de que la comprobación de estado se realice correctamente cuando se solicite manualmente; por ejemplo, desde un host bastión de su VPC.

  • Si va a configurar una comprobación de estado para un nodo virtual, recomendamos que implemente un punto de conexión de comprobación de estado en su aplicación; por ejemplo, /ping para HTTP. Esto garantiza que tanto el proxy de Envoy como su aplicación se puedan enrutar desde el equilibrador de carga.

  • Puede usar cualquier tipo de equilibrador de carga elástico para el nodo virtual, según las características que necesite. Para obtener más información, consulte Características del equilibrador de carga elástico.

  • Si va a configurar una comprobación de estado para una puerta de enlace virtual, recomendamos que utilice un equilibrador de carga de red con una comprobación de estado de TCP o TLS en el puerto del oyente de la puerta de enlace virtual. De este modo, se asegura de que el oyente de la puerta de enlace virtual se haya iniciado y esté preparado para aceptar conexiones.

Si el problema sigue sin resolverse, considera abrir un GitHub problema o ponte en contacto con AWSSupport.

La puerta de enlace virtual no acepta tráfico en los puertos 1024 o inferiores

Síntomas

Su puerta de enlace virtual no acepta tráfico en el puerto 1024 o inferiores, pero sí acepta tráfico en un número de puerto superior a 1024. Por ejemplo, consulta las estadísticas de Envoy con el siguiente comando y obtiene un valor distinto de cero.

curl -s http://my-app.default.svc.cluster.local:9901/stats | grep "update_rejected"

Es posible que vea un texto similar al siguiente en sus registros que describe un error al conectarse a un puerto privilegiado:

gRPC config for type.googleapis.com/envoy.api.v2.Listener rejected: Error adding/updating listener(s) lds_ingress_0.0.0.0_port_<port num>: cannot bind '0.0.0.0:<port num>': Permission denied

Resolución

Para resolver el problema, el usuario especificado para la puerta de enlace debe tener la capacidad CAP_NET_BIND_SERVICE de Linux. Para obtener más información, consulte Capacidades en el Manual del programador de Linux, Parámetros de Linux en los parámetros de definición de tareas de ECS y Establecer capacidades para un contenedor en la documentación de Kubernetes.

importante

Fargate debe usar un valor de puerto superior a 1024.

Si el problema sigue sin resolverse, considera abrir un GitHub problema o ponte en contacto con AWSSupport.