En esta página, se muestra cómo solucionar problemas de mensajes de error y resolver problemas cuando usas Cloud Run.
También puedes verificar los problemas existentes o abrir problemas nuevos desde la herramienta pública de seguimiento de errores.
Para otros mensajes de error que no aparecen en esta página, consulta la página de problemas conocidos.
Errores en la implementación
En esta sección, se enumeran los errores que puedes encontrar con la implementación y se proporcionan sugerencias para solucionarlos.
No se pudo iniciar el contenedor
El siguiente error ocurre cuando intentas realizar una implementación:
Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable.
Para resolver este problema, descarta las siguientes causas posibles:
Verifica que puedas ejecutar la imagen de contenedor de forma local. Si la imagen de tu contenedor no se puede ejecutar de forma local, primero debes diagnosticar y solucionar el problema de forma local.
Verifica si el contenedor está escuchando solicitudes en el puerto esperado, como se documenta en el contrato de entorno de ejecución de contenedores. Tu contenedor debe detectar las solicitudes entrantes en el puerto que define Cloud Run y que se proporciona en la variable de entorno
PORT
. Consulta Configura contenedores a fin de obtener instrucciones para especificar el puerto.Verifica si el contenedor escucha en todas las interfaces de red, que suelen denominarse
0.0.0.0
.Verifica que la imagen de contenedor se compile para Linux de 64 bits según lo requiere el contrato de entorno de ejecución de contenedores.
Usa Cloud Logging para buscar errores de aplicación en los registros
stdout
ostderr
. También puedes buscar fallas capturadas en Error Reporting.Es posible que debas actualizar el código o la configuración de revisión para corregir errores o fallas. También puedes solucionar problemas de tu servicio de forma local.
Se produjo un error interno, ya que se superó el plazo de preparación de los recursos
El siguiente error ocurre cuando intentas implementar o intentar llamar a otra API de Google Cloud:
The server has encountered an internal error. Please try again later. Resource readiness deadline exceeded.
Este problema puede ocurrir cuando el agente de servicio de Cloud Run no existe o cuando no tiene la función de agente de servicio de Cloud Run (roles/run.serviceAgent
).
Para verificar que el agente de servicio de Cloud Run exista en tu proyecto de Google Cloud y tenga la función necesaria, sigue estos pasos:
Abre la consola de Google Cloud:
En la esquina superior derecha de la página Permisos, selecciona la casilla de verificación Incluir asignaciones de roles proporcionadas por Google.
En la lista Principales, busca el ID del agente de servicio de Cloud Run, que usa el ID
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
.Verifica que el agente de servicio tenga el rol de Agente de servicio de Cloud Run. Si el agente de servicio no tiene el rol, asignalo.
No se encontró el usuario “root” en /etc/passwd
El siguiente error ocurre cuando intentas realizar una implementación:
ERROR: "User \"root\""not found in /etc/passwd
El problema se produce cuando las claves de encriptación administradas por el cliente se especifican con un parámetro --key
Para resolver este problema, especifica USER 0
en lugar de USER root
en el Dockerfile.
Se borra la cuenta de servicio predeterminada de Compute Engine
El siguiente error ocurre cuando intentas realizar una implementación:
ERROR: (gcloud.run.deploy) User EMAIL_ADDRESS does not have permission to access namespace NAMESPACE_NAME (or it may not exist): Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).
Este problema ocurre en una de las siguientes situaciones:
- La cuenta de servicio predeterminada de Compute Engine no existe en el proyecto y no se especifica ninguna cuenta de servicio con la marca
--service-account
gcloud
al momento de la implementación. - El desarrollador o principal que implementa el servicio no tiene los permisos para la cuenta de servicio predeterminada de Compute Engine que se requieren para implementar.
Para solucionar este problema, sigue estos pasos:
- Especifica una cuenta de servicio con la marca
--service-account
gcloud
. - Verifica que la cuenta de servicio que especifiques tenga los permisos necesarios para implementar.
Si deseas verificar si el agente de servicio predeterminado de Compute Engine existe en tu proyecto de Google Cloud, realiza los siguientes pasos:
Abre la consola de Google Cloud:
En la esquina superior derecha de la página Permisos, selecciona la casilla de verificación Incluir asignaciones de roles proporcionadas por Google.
En la lista Principales, busca el ID del agente de servicio de Compute Engine, que usa el ID
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
El agente de servicio de Cloud Run no tiene permiso para leer la imagen
El siguiente error ocurre cuando intentas implementar desde PROJECT-ID mediante una imagen que se almacena en Container Registry en PROJECT-ID-2:
Google Cloud Run Service Agent must have permission to read the image, gcr.io/PROJECT-ID/IMAGE-NAME. Ensure that the provided container image URL is correct and that above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that PROJECT-ID/IMAGE-NAME is not in project PROJECT-ID-2. Permission must be granted to the Google Cloud Run Service Agent from this project.
Para resolver este problema, sigue estas recomendaciones:
Sigue las instrucciones para implementar imágenes de contenedores de otros proyectos de Google Cloud a fin de asegurarte de que las principales tengan los permisos necesarios.
Este problema también puede ocurrir si el proyecto está en un perímetro de Controles del servicio de VPC con una restricción en la API de Cloud Storage que prohíbe las solicitudes del agente de servicio de Cloud Run. Para solucionar este problema, haz lo siguiente:
Abre el Explorador de registros en la consola de Google Cloud. (No uses la página Registros dentro de la página de Cloud Run):
Ingresa el siguiente texto en el campo de consulta:
protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" severity=ERROR protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS" protoPayload.authenticationInfo.principalEmail="service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com"
Si ves entradas de registro después de usar esta consulta, examina las entradas de registro para determinar si necesitas actualizar tus políticas de Controles de servicio de VPC. Pueden indicar que necesitas agregar
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
a una política de acceso preexistente.
Errores en la importación de contenedores
El siguiente error ocurre cuando intentas realizar una implementación:
The service has encountered an error during container import. Please try again later. Resource readiness deadline exceeded.
Para resolver este problema, descarta las siguientes causas posibles:
Asegúrate de que el sistema de archivos del contenedor no contenga caracteres que no sean utf8.
Algunas imágenes de Docker basadas en Windows usan capas externas. Aunque Container Registry no muestra un error cuando hay capas externas presentes, el plano de control de Cloud Run no las admite. Para solucionar este problema, puedes intentar configurar la marca
--allow-nondistributable-artifacts
en el daemon de Docker.
Entrega errores
En esta sección, se enumeran los errores que puedes encontrar al entregar y se proporcionan sugerencias para solucionarlos.
HTTP 401: El cliente no se autenticó correctamente
El siguiente error ocurre durante la entrega:
The request was not authorized to invoke this service
Para solucionar este problema, sigue estos pasos:
Si la invoca una cuenta de servicio, la reclamación del público (
aud
) del token de ID firmado por Google se debe establecer en lo siguiente:- La URL de Cloud Run del servicio receptor, con el formato
https://service-xyz.run.app
.- El servicio de Cloud Run debe requerir autenticación.
- El servicio de Cloud Run se puede invocar a través de la URL de Cloud Run o de una URL del balanceador de cargas.
- El ID de cliente de OAuth 2.0 con el tipo de aplicación web, con el formato
nnn-xyz.apps.googleusercontent.com
.- El servicio de Cloud Run se puede invocar a través de un balanceador de cargas HTTPS protegido con IAP.
- Esto es ideal para un GCLB respaldado por varios servicios de Cloud Run en diferentes regiones.
- Un público personalizado configurado con los valores exactos proporcionados. Por ejemplo, si el público personalizado es
service.example.com
, el valor de la reclamación del público (aud
) también debe serservice.example.com
. Si el público personalizado eshttps://service.example.com
, el valor de la reclamación del público también debe serhttps://service.example.com
.
- La URL de Cloud Run del servicio receptor, con el formato
La herramienta jwt.io sirve para verificar las reclamaciones en un JWT.
Si el token de autenticación tiene un formato no válido, se produce un error
401
. Si el token tiene un formato válido y al miembro de IAM que se usó para generarlo le falta el permisorun.routes.invoke
, se produce un error403
.Cuando usas el servidor de metadatos para recuperar tokens de ID y de acceso a fin de autenticar solicitudes con el servicio de Cloud Run o la identidad de trabajo con un proxy HTTP para enrutar el tráfico de salida, y obtienes tokens no válidos, asegúrate de agregar los siguientes hosts a las excepciones de proxy HTTP:
169.254.*
o169.254.0.0/16
*.google.internal
Este error suele ocurrir cuando las bibliotecas cliente de Cloud usan el servidor de metadatos para recuperar las credenciales predeterminadas de la aplicación para autenticar invocaciones de REST o gRPC. Si no defines las excepciones de proxy HTTP, los siguientes resultados del comportamiento se mostrarán:
Si el servicio o trabajo de Cloud Run y el proxy HTTP se alojan en diferentes cargas de trabajo de Google Cloud, incluso si las bibliotecas cliente de Google Cloud pueden obtener credenciales, los tokens se generan para la cuenta de servicio asignada a la carga de trabajo del proxy HTTP, que podría no tener los permisos necesarios para realizar las operaciones previstas de la API de Google Cloud. En este caso, los tokens se recuperan desde la vista del servidor de metadatos de la carga de trabajo del proxy HTTP, en lugar de la de Cloud Run.
Si el proxy HTTP no se aloja en Google Cloud y las solicitudes del servidor de metadatos se enrutan mediante el proxy, las solicitudes de tokens fallarán y las operaciones de las APIs de Google Cloud se anularán.
HTTP 403: El cliente no está autorizado a invocar o llamar al servicio
El siguiente error puede o no estar en Cloud Logging con resource.type = “cloud_run_revision”:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header
El siguiente error está presente en la respuesta HTTP que se mostró al cliente:
403 Forbidden Your client does not have permission to get URL from this server.
Para resolver este problema cuando el error resource.type = "cloud_run_revision" está presente:
- Si se pretende que cualquiera pueda invocar el servicio, actualiza su configuración de IAM para que el servicio sea público.
- Si se pretende que solo determinadas identidades puedan invocar el servicio, asegúrate de invocarlo con el token de autorización adecuado.
- Si es invocado por un desarrollador o es invocado por un usuario final: Asegúrate de que el desarrollador o el usuario tengan el permiso
run.routes.invoke
, que puedes proporcionar a través de los roles Administrador de Cloud Run (roles/run.admin
) e Invocador de Cloud Run (roles/run.invoker
). - Si la invoca una cuenta de servicio: Asegúrate de que la cuenta de servicio sea miembro del servicio de Cloud Run y que tenga el rol Invocador de Cloud Run (
roles/run.invoker
). - Las llamadas a las que les falta un token de autenticación o con un token de autenticación que tiene un formato válido, pero en las que el miembro de IAM que se usó para generar el token no tiene el permiso
run.routes.invoke
, genera este error403
.
- Si es invocado por un desarrollador o es invocado por un usuario final: Asegúrate de que el desarrollador o el usuario tengan el permiso
Para resolver este problema cuando el error resource.type = "cloud_run_revision" no está presente:
- Se puede mostrar un código de estado 403 cuando un servicio tiene la entrada configurada en
All
, pero se bloqueó debido a los Controles del servicio de VPC. Consulta la siguiente sección sobre errores 404 para obtener más información sobre la solución de problemas de denegación de los Controles del servicio de VPC.
HTTP 404: No encontrado
El siguiente problema ocurre durante la entrega:
Se produce un error HTTP 404
.
Para solucionar este problema, sigue estos pasos:
Verifica que la URL que solicitas sea correcta. Para ello, verifica la página de detalles del servicio en la consola de Cloud o ejecuta el siguiente comando:
gcloud run services describe SERVICE_NAME | grep URL
Inspecciona dónde es posible que la lógica de tu aplicación muestre códigos de error
404
. Si la app muestra el404
, será visible en Cloud Logging.Asegúrate de que la app no comience a escuchar en el puerto configurado antes de poder recibir solicitudes.
Verifica que la app no muestre un código de error
404
cuando la ejecutes de forma local.
Se muestra una 404
cuando la configuración de entrada del servicio de Cloud Run está configurada como “Interno” o “Interno y Cloud Load Balancing”, y una solicitud no cumple con los requisitos la restricción de red especificada. En este caso, la solicitud no llega al contenedor y 404
no está presente en Cloud Logging con el siguiente filtro:
resource.type="cloud_run_revision"
log_name="projects/PROJECT_ID/logs/run.googleapis.com%2Frequests"
httpRequest.status=404
Con la misma configuración de entrada, es posible que los Controles del servicio de VPC bloqueen la solicitud según el contexto del emisor, incluidos el proyecto y la dirección IP. Para verificar si hay un incumplimiento de la política de los Controles del servicio de VPC, haz lo siguiente:
Abre el explorador de registros en la consola de Google Cloud (no la página Registros en Cloud Run):
Ingresa el siguiente texto en el campo de consulta:
resource.type="audited_resource" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy" resource.labels.method="run.googleapis.com/HttpIngress"
Si ves entradas de registro después de usar esta consulta, examina las entradas de registro para determinar si necesitas actualizar las políticas de los Controles del servicio de VPC.
HTTP 429: No hay instancias de contenedor disponibles
El siguiente error ocurre durante la entrega:
HTTP 429 The request was aborted because there was no available instance. The Cloud Run service might have reached its maximum container instance limit or the service was otherwise not able to scale to incoming requests. This might be caused by a sudden increase in traffic, a long container startup time or a long request processing time.
Para resolver este problema, verifica la métrica “Recuento de instancias de contenedor” en tu servicio y considera aumentar este límite si tu uso se acerca al máximo. Consulta Configuración de “instancias máximas” y, si necesitas más instancias, solicita un aumento de la cuota.
HTTP 500: Cloud Run no pudo administrar la tasa de tráfico
El siguiente error ocurre durante la entrega y también puede ocurrir cuando el servicio no alcanzó su límite máximo de instancias de contenedor:
HTTP 500 The request was aborted because there was no available instance
Este error puede deberse a uno de los siguientes problemas:
- Un gran incremento repentino del tráfico.
- Un tiempo de inicio en frío largo.
- Un tiempo largo de procesamiento de la solicitud o un aumento repentino en el tiempo de procesamiento de la solicitud.
- El servicio alcanza su límite máximo de instancias de contenedor (
HTTP 429
). - Factores transitorios atribuidos al servicio de Cloud Run.
Para solucionar este problema, resuelve los problemas mencionados anteriormente.
Además de solucionar estos problemas, como solución alternativa, puedes implementar una retirada exponencial y reintentos para las solicitudes que el cliente no debe descartar.
Ten en cuenta que un aumento corto y repentino en el tráfico o el tiempo de procesamiento de las solicitudes solo puede ser visible en Cloud Monitoring si te acercas a una resolución de 10 segundos.
Cuando la causa raíz del problema es un período de errores transitorios elevados que solo se pueden atribuir a Cloud Run, puedes comunicarte con el equipo de asistencia.
HTTP 500 / HTTP 503: Las instancias de contenedor exceden los límites de memoria
El siguiente error ocurre durante la entrega:
En Cloud Logging:
While handling this request, the container instance was found to be using too much memory and was terminated. This is likely to cause a new container instance to be used for the next request to this revision. If you see this message frequently, you may have a memory leak in your code or may need more memory. Consider creating a new revision with more memory.
Para solucionar este problema, sigue estos pasos:
- Determina si las instancias de contenedor exceden la memoria disponible.
Busca errores relacionados en los registros
varlog/system
. - Si las instancias exceden la memoria disponible, considera aumentar el límite de memoria.
Ten en cuenta que en Cloud Run, los archivos escritos en el sistema de archivos local se consideran en la memoria disponible. Esto también incluye cualquier archivo de registro que se escriba en ubicaciones distintas de /var/log/*
y /dev/log
.
HTTP 503: Respuesta con formato incorrecto o problema de conexión de la instancia de contenedor
Uno de los siguientes errores ocurre durante la entrega:
HTTP 503 The request failed because either the HTTP response was malformed or connection to the instance had an error.
Para resolver este problema, sigue estas recomendaciones:
Verifica Cloud Logging Usa Cloud Logging para buscar errores de memoria insuficiente en los registros. Si ves mensajes de error relacionados con las instancias de contenedores que superan los límites de memoria, sigue las recomendaciones para resolver este problema.
Tiempos de espera a nivel de app Si las solicitudes terminan con el código de error
503
antes de que se alcance el tiempo de espera de la solicitud establecido en Cloud Run, es posible que debas actualizar la configuración del tiempo de espera de la solicitud para tu framework de lenguaje:- Es posible que los desarrolladores de Node.js necesiten actualizar la propiedad
server.timeout
a través deserver.setTimeout
(usaserver.setTimeout(0)
para lograr un tiempo de espera ilimitado), según la versión que usas. [CRITICAL] WORKER TIMEOUT
Los desarrolladores de Python deben actualizar el tiempo de espera predeterminado de Gunicorn.
- Es posible que los desarrolladores de Node.js necesiten actualizar la propiedad
Cuello de botella de la red descendente: En algunas instancias, un código de error
503
puede dar como resultado un cuello de botella en la red descendente, por ejemplo, durante las pruebas de carga. Por ejemplo, si tu servicio enruta el tráfico a través de un conector de Acceso a VPC sin servidores, asegúrate de que el conector no haya superado su límite de capacidad de procesamiento mediante estos pasos:Abre el Acceso a VPC sin servidores en la consola de Google Cloud:
Verifica si hay barras red en el histograma del gráfico de capacidad de procesamiento. Si hay una barra roja, considera aumentar el número máximo de instancias o el tipo de instancia que usa tu conector. De forma alternativa, comprime el tráfico enviado a través de un conector de Acceso a VPC sin servidores.
Límite de solicitudes entrantes a un solo contenedor Hay un problema conocido en el que hay porcentajes de solicitudes altos por contenedor que generan este error
503
. Si una instancia de contenedor recibe más de 800 solicitudes por segundo, los sockets TCP disponibles se pueden agotar. Para solucionar este problema, prueba alguna de las siguientes opciones:Activa HTTP/2 para el servicio y realiza los cambios necesarios en el servicio para que sea compatible con HTTP/2.
Evita enviar más de 800 solicitudes por segundo a una sola instancia de contenedor mediante la disminución de la simultaneidad configurada. Usa la siguiente ecuación para obtener una estimación del porcentaje de solicitudes por instancia de contenedor:
requests/sec/container_instance ~= concurrency * (1sec / median_request_latency)
HTTP 503: No se pueden procesar algunas solicitudes debido a la alta configuración de simultaneidad
Los siguientes errores ocurren durante la entrega:
HTTP 503 The Cloud Run service probably has reached its maximum container instance limit. Consider increasing this limit.
Este problema se produce cuando las instancias de contenedor usan mucha CPU para procesar las solicitudes y, como resultado, las instancias de contenedor no pueden procesar todas las solicitudes, por lo que algunas muestran un código de error 503
.
Para resolver este problema, prueba una o más de las siguientes opciones:
Aumenta la cantidad máxima de instancias de contenedor para tu servicio.
Disminuir la simultaneidad del servicio Consulta cómo configurar la simultaneidad para obtener instrucciones más detalladas.
HTTP 504: Error de tiempo de espera de la puerta de enlace
HTTP 504 The request has been terminated because it has reached the maximum request timeout.
Si tu servicio procesa solicitudes largas, puedes aumentar el tiempo de espera de la solicitud. Si tu servicio no muestra una respuesta dentro del tiempo especificado, la solicitud finaliza y el servicio muestra un error HTTP 504
, como se documenta en el contrato del entorno de ejecución de contenedores.
Para resolver este problema, prueba una o más de las siguientes opciones:
Instrumenta el registro y el seguimiento para comprender dónde la app pasa tiempo antes de exceder el tiempo de espera configurado de la solicitud.
Las conexiones salientes se restablecen de vez en cuando, debido a actualizaciones de infraestructura. Si tu aplicación vuelve a usar conexiones de larga duración, te recomendamos entonces que configures tu aplicación para restablecer las conexiones a fin de evitar la reutilización de una conexión inactiva.
- Según la lógica de la app o el manejo de errores, un error
504
puede ser un indicador de que la aplicación intenta reutilizar una conexión inactiva y la solicitud se bloquea hasta que se agote el tiempo de espera de la solicitud configurada. - Puedes usar un sondeo de capacidad de respuesta para ayudar a finalizar una instancia que muestra errores persistentes.
- Según la lógica de la app o el manejo de errores, un error
Los errores de memoria insuficiente que ocurren dentro del código de la app, por ejemplo,
java.lang.OutOfMemoryError
, no necesariamente finalizan una instancia de contenedor. Si el uso de memoria no excede el límite de memoria del contenedor, no se finalizará la instancia. Según cómo la app maneje los errores de memoria insuficiente de la app, las solicitudes pueden quedar en espera hasta que excedan el tiempo de espera de la solicitud configurada.- Si quieres que la instancia de contenedor se cierre en la situación anterior, configura el límite de memoria a nivel de la app para que sea mayor que el límite de memoria del contenedor.
- Puedes usar un sondeo de capacidad de respuesta para finalizar una instancia que muestra errores persistentes.
Un par restableció la conexión
Uno de los siguientes errores ocurre durante la entrega:
Connection reset by peer
asyncpg.exceptions.ConnectionDoesNotExistError: connection was closed in the middle of operation
grpc.StatusRuntimeException: UNAVAILABLE: io exception
psycopg.OperationalError: the connection is closed
ECONNRESET
Este error ocurre cuando una aplicación tiene una conexión TCP establecida con un par de red, y ese par cierra la conexión de forma inesperada.
Para solucionar este problema, sigue estos pasos:
Si intentas realizar un trabajo en segundo plano con limitación de CPU, intenta usar la configuración de asignación de CPU “La CPU siempre está asignada”.
Asegúrate de estar dentro de los tiempos de espera de las solicitudes salientes. Si tu aplicación mantiene cualquier conexión en un estado inactivo más allá de estos límites, la puerta de enlace debe obtener la conexión.
De forma predeterminada, la opción de socket TCP
keepalive
está inhabilitada para Cloud Run. No hay una forma directa de configurar la opciónkeepalive
en Cloud Run a nivel de servicio, pero puedes habilitar la opciónkeepalive
para cada conexión de socket si proporcionas las opciones de socket correctas cuando abres una conexión de socket TCP nueva, según la biblioteca cliente que uses para esta conexión en tu aplicación.En ocasiones, las conexiones salientes se restablecen debido a actualizaciones de infraestructura. Si tu aplicación vuelve a usar conexiones de larga duración, te recomendamos entonces que configures tu aplicación para restablecer las conexiones a fin de evitar la reutilización de una conexión inactiva.
Si usas un proxy HTTP para enrutar el tráfico de salida de tus servicios o trabajos de Cloud Run y el proxy aplica la duración máxima de la conexión, el proxy puede descartar de forma silenciosa las conexiones TCP de larga duración, como las establecidas. mediante la agrupación de conexiones. Esto hace que los clientes HTTP fallen cuando se reutiliza una conexión ya cerrada. Si pretendes enrutar el tráfico de salida a través de un proxy HTTP, asegúrate de considerar esta situación implementando la validación de conexiones, los reintentos y la retirada exponencial. Para los grupos de conexiones, configura los valores máximos de antigüedad de la conexión, las conexiones inactivas y el tiempo de espera de inactividad de la conexión.
Tiempos de espera de conexión
Los errores de latencia o uno de los siguientes errores se producen cuando hay tiempos de espera de conexión cuando se realiza una solicitud a un host remoto:
java.io.IOException: Connection timed out
ConnectionError: HTTPSConnectionPool
dial tcp REMOTE_HOST:REMOTE_PORT: i/o timeout / context error
Error: 4 DEADLINE_EXCEEDED: Deadline exceeded
Este tipo de errores se producen cuando una aplicación intenta crear un TCP con un host remoto y la conexión tarda demasiado.
Si enrutas todo el tráfico de salida a través de una red de VPC, ya sea mediante conectores de VPC o la salida directa de VPC, asegúrate que:
Definiste todas las reglas de firewall necesarias para permitir la entrada para los conectores de VPC.
Las reglas de firewall de VPC permiten que el tráfico de entrada de los conectores de VPC o la subred de salida de VPC directa llegue al host o la subred de destino.
Tienes todas las rutas necesarias para permitir el enrutamiento correcto de tráfico a los hosts de destino y de regreso. Esto es importante cuando se enruta el tráfico de salida a través del intercambio de tráfico entre redes de VPC o la conectividad de nube híbrida, ya que los paquetes atraviesan varias redes antes de llegar al host remoto.
Si usas un proxy HTTP para enrutar todo el tráfico de salida de tus servicios o trabajos de Cloud Run, asegúrate de que se pueda acceder a los hosts remotos mediante el proxy.
El tráfico enrutado a través de un proxy HTTP puede retrasarse según el uso de recursos del proxy. Si se pretende enrutar el tráfico de salida HTTP con un proxy, asegúrate de tener en cuenta esta situación mediante la implementación de los reintentos, la retirada exponencial o los disyuntores.
Configura excepciones de proxy HTTP
Cuando uses un proxy HTTP para enrutar el tráfico de salida de tus trabajos o servicios de Cloud Run, asegúrate de agregar excepciones para las APIs de Cloud y otros hosts y subredes sin proxy para evitar que latencia, tiempos de espera de conexión, restablecimientos de conexiones y errores de autenticación.
Los hosts y las subredes sin proxy deben incluir, como mínimo, lo siguiente:
127.0.0.1
169.254.*
o169.254.0.0/16
localhost
*.google.internal
*.googleapis.com
De forma opcional, los hosts sin proxy pueden incluir lo siguiente:
*.appspot.com
*.run.app
*.cloudfunctions.net
*.gateway.dev
*.googleusercontent.com
*.pkg.dev
*.gcr.io
Formas comunes de configurar las excepciones del Proxy HTTP para las redes de salida incluyen lo siguiente:
- Variables de entorno:
NO_PROXY
ono_proxy
. Marca
http.nonProxyHosts
de la máquina virtual Java.- La propiedad del sistema
https.nonProxyHosts
no está definida, por lo quehttp.nonProxyHosts
se aplica a HTTP y HTTPS. - La propiedad del sistema
http.nonProxyHosts
no admite la notación CIDR, por lo que debes usar expresiones de coincidencia de patrones.
- La propiedad del sistema
Firma de token de identidad oculta por Google
Los siguientes errores ocurren durante la entrega:
SIGNATURE_REMOVED_BY_GOOGLE
Esto puede ocurrir durante el desarrollo y las pruebas en las siguientes circunstancias:
- El usuario accede con Google Cloud CLI o Cloud Shell.
- El usuario genera un token de ID mediante los comandos
gcloud
. - El usuario intenta usar el token de ID para invocar un servicio no público de Cloud Run.
Se diseñó de este modo. Google quita la firma del token debido a problemas de seguridad para evitar que cualquier servicio no público de Cloud Run repita los tokens de ID que se generan de esta manera.
Para resolver este problema, invoca tu servicio privado con un token de ID nuevo. Para obtener más información, consulta Prueba la autenticación en el servicio.
Advertencia de OpenBLAS en los registros
Si usas bibliotecas basadas en OpenBLAS, como NumPy con el entorno de ejecución de primera generación, es posible que veas la siguiente advertencia en tus registros:
OpenBLAS WARNING - could not determine the L2 cache size on this system,
assuming 256k
Esto es solo una advertencia y no afecta tu servicio. Esta advertencia se produce porque la zona de pruebas del contenedor que usa el entorno de ejecución de primera generación no expone funciones de hardware de bajo nivel. De manera opcional, puedes cambiar al entorno de ejecución de segunda generación si no deseas tener estas advertencias en tus registros.
Spark falla cuando se obtiene una dirección IP de máquina a la que se debe vincular
Uno de los siguientes errores ocurre durante la entrega:
assertion failed: Expected hostname (not IP) but got <IPv6 ADDRESS>
assertion failed: Expected hostname or IPv6 IP enclosed in [] but got <IPv6 ADDRESS>
Para solucionar este problema, sigue estos pasos:
Para cambiar el valor de la variable de entorno y resolver el problema, establece ENV
SPARK_LOCAL_IP="127.0.0.1"
en tu Dockerfile. En Cloud Run, si la variable SPARK_LOCAL_IP
no está configurada, se usará de forma predeterminada su contraparte IPv6 en lugar de localhost. Ten en cuenta que la configuración de RUN export SPARK_LOCAL_IP="127.0.0.1"
no estará disponible en el entorno de ejecución y Spark funcionará como si no se hubiese establecido.
Asigna dominios personalizados
El dominio personalizado está atascado en el estado de aprovisionamiento de certificados
Uno de los siguientes errores ocurre cuando intentas asignar un dominio personalizado:
The domain is available over HTTP. Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin and to accept HTTP traffic.
Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin.
Para solucionar este problema, sigue estos pasos:
- Espera al menos 24 horas. El aprovisionamiento del certificado SSL suele demorar unos 15 minutos, pero puede tardar hasta 24 horas.
Verifica que hayas actualizado de forma correcta los registros DNS en el registrador de dominios mediante la herramienta de resumen de la Consola del administrador de Google.
Los registros DNS de tu registrador de dominios deben coincidir con lo que te solicita agregar la consola de Google Cloud.
Confirma que la raíz del dominio se verifique en tu cuenta mediante uno de los siguientes métodos:
- Sigue las instrucciones para agregar propietarios de dominio verificados y comprueba que tu cuenta aparezca como Propietario verificado.
- Usa Search Console.
Verifica que el certificado del dominio no haya vencido. Para encontrar los límites de vencimiento, usa el siguiente comando:
echo | openssl s_client -servername 'ROOT_DOMAIN' -connect 'ROOT_DOMAIN:443' 2>/dev/null | openssl x509 -startdate -enddate -noout
Tu app no puede tener más de 1,000 servicios (módulos)
El siguiente error se produce durante la ejecución del trabajo:
Your app may not have more than 1000 services (modules). Please delete one of the existing services (modules) before trying to create a new service (module).
Cada implementación del servicio de Cloud Run cuenta como un servicio o módulo en la cuota disponible, sin importar cuántas solicitudes reciba. Sin embargo, en el caso de los trabajos de Cloud Run, cada ejecución de forma activa del trabajo se cuenta como un servicio en la cuota. Por lo tanto, si tienes muchas ejecuciones de trabajos simultáneas, puedes exceder la cuota y recibir este error. Con tareas paralelas en la ejecución de un solo trabajo en lugar de ejecutar muchas ejecuciones de trabajos puede resolver esto.
API de Admin
La función no es compatible con la etapa de lanzamiento declarada
El siguiente error ocurre cuando llamas a la API de Cloud Run Admin:
The feature is not supported in the declared launch stage
Este error se produce cuando llamas directamente a la API de Cloud Run Admin y usas una función beta sin especificar una anotación o un campo de etapa de lanzamiento.
Para resolver este problema, agrega el campo de etapa de lanzamiento a las solicitudes. A continuación, se muestran ejemplos de la API de REST v1 y la API de REST v2:
En el siguiente ejemplo, se agrega una anotación de etapa de lanzamiento a una solicitud del cliente con JSON y la API de REST v1:
"annotations": { "run.googleapis.com/launch-stage": "BETA" }
En el siguiente ejemplo, se agrega una referencia de LaunchStage a una solicitud del cliente con JSON y la API de REST v2:
"launchStage": "BETA"
En el siguiente ejemplo, se agrega una anotación de etapa de lanzamiento a una solicitud de servicio con YAML y la API de REST v1:
kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA
La desconexión del cliente no se propaga a Cloud Run
Cuando usas HTTP/1.1 en Cloud Run, los eventos de desconexión del cliente no se propagan al contenedor de Cloud Run.
La solución es usar WebSockets o HTTP/2.0, que propagan las desconexiones del cliente.
Solución de problemas del sistema de archivos de red
Obtén más información para usar sistemas de archivos de red.
No se puede acceder a los archivos con NFS
Error | Solución sugerida |
---|---|
mount.nfs: Protocol not supported |
A algunas imágenes base, como debian y adoptopenjdk/openjdk11 , les falta la dependencia nfs-kernel-server. |
mount.nfs: Connection timed out |
Si se agota el tiempo de espera de la conexión, asegúrate de proporcionar la dirección IP correcta de la instancia de Filestore. |
mount.nfs: access denied by server while mounting IP_ADDRESS:/FILESHARE |
Si el servidor rechazó el acceso, verifica que el nombre del archivo compartido sea correcto. |
No se puede acceder a los archivos con Cloud Storage FUSE
Consulta la guía de solución de problemas de Cloud Storage FUSE.