Risolvi i problemi di Cloud Run

Questa pagina mostra come risolvere i problemi relativi ai messaggi di errore e agli errori che si verificano quando utilizzi Cloud Run.

Puoi anche controllare se esistono problemi esistenti o aprirne di nuovi negli issue tracker pubblici.

Per altri messaggi di errore non elencati in questa pagina, controlla problemi noti.

Errori di deployment

Questa sezione elenca i problemi che potresti riscontrare durante il deployment e fornisce suggerimenti su come risolverli.

Impossibile avviare il contenitore

Quando provi a eseguire il deployment, si verifica il seguente errore:

Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable.

Per risolvere il problema, elimina le seguenti potenziali cause:

  1. Verificare di poter esegui l'immagine container in locale. Se l'immagine del contenitore non può essere eseguita localmente, devi prima diagnosticare e risolvere il problema localmente.

  2. Controlla se il container è in ascolto per le richieste sulla porta prevista, come descritto nel contratto di runtime del container. Il container deve rimanere in ascolto delle richieste in entrata sulla porta definita da Cloud Run e fornito nella variabile di ambiente PORT. Consulta: Configurazione dei container per le istruzioni su come specificare la porta.

  3. Controllare se il container è in ascolto su tutti interfacce di rete, comunemente indicate come 0.0.0.0.

  4. Verificare che l'immagine container sia compilata per Linux a 64 bit, come richiesto contratto di runtime del container.

  5. Utilizza Cloud Logging per cercare gli errori dell'applicazione nei log stdout o stderr. Puoi anche cercare gli arresti anomali rilevati in Error Reporting.

    Potresti dover aggiornare il codice o le impostazioni di revisione per correggere gli errori o arresti anomali. Puoi anche risolvere i problemi del servizio localmente.

Errore interno: scadenza per la disponibilità delle risorse superata

Il seguente errore si verifica quando provi a eseguire il deployment o a chiamare un altro API Google Cloud:

The server has encountered an internal error. Please try again later. Resource readiness deadline exceeded.

Questo problema può verificarsi quando l'agente di servizio Cloud Run non esiste o non ha il ruolo Agente di servizio Cloud Run (roles/run.serviceAgent).

Per verificare che l'agente di servizio Cloud Run esista nel tuo un progetto Google Cloud e dispone del ruolo necessario, segui questi passaggi:

  1. Apri la console Google Cloud:

    Vai alla pagina Autorizzazioni

  2. Nell'angolo in alto a destra della pagina Autorizzazioni, seleziona la casella di controllo Includi concessioni di ruoli fornite da Google.

  3. Nell'elenco Entità, individua l'ID del servizio Cloud Run. che utilizza l'ID
    service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

  4. Verifica che l'agente di servizio disponga dell'agente di servizio Cloud Run. ruolo. Se l'agente di servizio non dispone del ruolo, concedilo.

Errore utente "root" non trovato in /etc/passwd

Quando provi a eseguire il deployment, si verifica il seguente errore:

ERROR: "User \"root\""not found in /etc/passwd

Il problema si verifica quando le chiavi di crittografia gestite dal cliente vengono specificate utilizzando un parametro --key

Per risolvere il problema, specifica USER 0 anziché USER root nel Dockerfile.

L'account di servizio Compute Engine predefinito viene eliminato

Quando provi a eseguire il deployment, si verifica il seguente errore:

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).

Questo problema si verifica in una delle seguenti situazioni:

Per risolvere il problema:

  1. Specifica un account di servizio utilizzando il flag --service-account gcloud.
  2. Verifica che l'account di servizio specificato abbia autorizzazioni richieste per il deployment.

Se vuoi verificare se l'agente di servizio Compute Engine predefinito esiste in del tuo progetto Google Cloud, segui questi passaggi:

  1. Apri la console Google Cloud:

    Vai alla pagina Autorizzazioni

  2. Nell'angolo in alto a destra della pagina Autorizzazioni, seleziona la casella di controllo Includi Casella di controllo Concessioni dei ruoli fornita da Google.

  3. Nell'elenco Entità, individua l'ID del servizio Compute Engine che utilizza l'ID
    PROJECT_NUMBER-compute@developer.gserviceaccount.com.

L'agente di servizio Cloud Run non dispone dell'autorizzazione per leggere l'immagine

Quando provi a eseguire il deployment da PROJECT-ID utilizzando un'immagine archiviata in Container Registry in PROJECT-ID-2, si verifica il seguente errore:

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.

Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:

  • Segui le istruzioni per il deployment di immagini container da altri progetti Google Cloud per assicurarti che le entità dispongano delle autorizzazioni necessarie.

  • Questo problema può verificarsi anche se il progetto si trova in un perimetro di Controlli di servizio VPC con una limitazione all'API Cloud Storage che vieta le richieste dall'agente di servizio Cloud Run. Per risolvere il problema:

    1. Apri Esplora log nella console Google Cloud. (non utilizzare la pagina Log all'interno della pagina Cloud Run):

      Vai a Esplora log

    2. Inserisci il seguente testo nel campo della query:

      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"
      
    3. Se dopo aver utilizzato questa query vedi voci di log, esamina il log per determinare se è necessario aggiornare i criteri dei Controlli di servizio VPC. Potrebbero indicare che devi aggiungere service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com in base a un criterio di accesso preesistente.

Errori di importazione dei container

Quando provi a eseguire il deployment, si verifica il seguente errore:

The service has encountered an error during container import. Please try again later. Resource readiness deadline exceeded.

Per risolvere il problema, elimina le seguenti potenziali cause:

  1. Assicurati che il file system del container non contenga caratteri non utf8.

  2. Alcune immagini Docker basate su Windows utilizzano strati stranieri. Anche se Container Registry non genera un errore quando gli strati estranei sono presenti, non sono supportati dal piano di controllo di Cloud Run. Per risolvere il problema, puoi provare a impostare il flag --allow-nondistributable-artifacts nel daemon Docker.

Errori di pubblicazione

Questa sezione elenca i problemi che potresti riscontrare con la pubblicazione e fornisce suggerimenti su come risolverli.

HTTP 401: il client non è autenticato correttamente

Durante la pubblicazione si verifica il seguente errore:

The request was not authorized to invoke this service

Per risolvere il problema:

  • Se richiamato da un account di servizio, la rivendicazione del segmento di pubblico (aud) del token ID firmato da Google deve essere impostata su quanto segue:

    • L'URL Cloud Run del servizio ricevente, utilizzando modulo https://service-xyz.run.app.
      • Il servizio Cloud Run deve richiedere l'autenticazione.
      • Il servizio Cloud Run può essere richiamato dall'istanza Cloud Run o tramite l'URL di un bilanciatore del carico.
    • L'ID client di un ID client OAuth 2.0 di tipo applicazione web, utilizzando la proprietà modulo nnn-xyz.apps.googleusercontent.com.
    • Un segmento di pubblico personalizzato configurato utilizzando gli esatti valori forniti. Ad esempio: Se il segmento di pubblico personalizzato è service.example.com, il valore della rivendicazione del pubblico (aud) deve anche essere service.example.com. Se il segmento di pubblico personalizzato è https://service.example.com, anche il valore della rivendicazione del segmento di pubblico deve essere https://service.example.com.
  • Lo strumento jwt.io è utile per verificare le rivendicazioni su un JWT.

  • Se il formato del token di autenticazione non è valido, si verifica un errore 401. Se il token è di un formato valido e manca il membro IAM utilizzato per generare il token l'autorizzazione run.routes.invoke, si verifica un errore 403.

  • Quando utilizzi il server di metadati per recuperare l'ID e i token di accesso per autenticare le richieste con il servizio o il job Cloud Run con un proxy HTTP per instradare il traffico in uscita e ottieni non validi, assicurati di aggiungere i seguenti host Eccezioni per il proxy HTTP:

    • 169.254.* o 169.254.0.0/16
    • *.google.internal

    Questo errore si verifica di solito quando le librerie client Cloud utilizzano il server di metadati per recuperare le credenziali predefinite dell'applicazione per autenticare le chiamate REST o gRPC. Se non definisci le eccezioni del proxy HTTP, si verifica il seguente comportamento:

    • Se il servizio o il job Cloud Run e il proxy HTTP sono ospitati in diversi carichi di lavoro Google Cloud, anche se le librerie client Google Cloud sono in grado di ottenere le credenziali, i token vengono generati per l'account di servizio assegnato al carico di lavoro del proxy HTTP, che potrebbe non avere le autorizzazioni richieste per eseguire le operazioni previste con l'API Google Cloud. In questo caso, i token vengono recuperati dalla vista del carico di lavoro del proxy HTTP, invece che in Cloud Run.

    • Se il proxy HTTP non è ospitato in Google Cloud e le richieste al server di metadati vengono inoltrate utilizzando il proxy, le richieste di token non andranno a buon fine e le operazioni delle API Google Cloud non saranno autenticate.

HTTP 403: il client non è autorizzato a richiamare o chiamare il servizio

Il seguente errore potrebbe o meno essere presente in Cloud Logging con resource.type = "cloud_run_revision":

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header

Nella risposta HTTP restituita al client è presente il seguente errore:

403 Forbidden
Your client does not have permission to get URL from this server.

Per risolvere il problema quando resource.type = "cloud_run_revision" L'errore di Cloud Logging è presente:

  • Se il servizio può essere chiamato da chiunque, aggiornare le proprie impostazioni IAM per rendere il servizio pubblico.
  • Se il servizio deve essere invocato solo da determinate identità, assicurati di invocarlo con il token di autorizzazione corretto.
    • Se invocata da un sviluppatore o da un utente finale: assicurati che lo sviluppatore o l'utente disponga dell'autorizzazione run.routes.invoke, che puoi fornire tramite i ruoli Amministratore Cloud Run (roles/run.admin) e Invoker Cloud Run (roles/run.invoker).
    • Se chiamato da un account di servizio: assicurati che l'account di servizio sia un membro del servizio Cloud Run e che disponga del ruolo Invoker (roles/run.invoker) di Cloud Run.
    • Le chiamate in cui manca un token di autenticazione o con un token di autenticazione di formato valido, ma al membro IAM utilizzato per generare il token manca l'autorizzazione run.routes.invoke, generano questo errore 403.

Per risolvere il problema quando resource.type = "cloud_run_revision" L'errore di Cloud Logging non è presente:

  • Un codice di stato 403 può essere restituito quando un servizio ha ingress configurato su All, ma è stato bloccato a causa dei Controlli di servizio VPC. Consulta le sezione successiva sugli errori 404 per ulteriori informazioni sulla risoluzione dei problemi. Rifiuti di Controlli di servizio VPC.

HTTP 403: errore durante l'accesso al servizio da un browser web

Il problema seguente si verifica quando accedi a un servizio Cloud Run da un Browser:

403 Forbidden
Your client does not have permission to get URL from this server.

Quando richiami un servizio Cloud Run da un browser web, il browser invia una richiesta GET al servizio. Tuttavia, la richiesta non contiene il token di autorizzazione dell'utente che chiama. Per risolvere questo problema, scegli uno dei seguenti rimedi:

  • Utilizza Identity-Aware Proxy (IAP) con Cloud Run. IAP consente di stabilire un livello di autorizzazione centrale per le applicazioni a cui si accede tramite HTTPS. Con IAP, puoi utilizzare un modello di controllo dell'accesso a livello di applicazione anziché i firewall a livello di rete. Per maggiori dettagli sulla configurazione Cloud Run con IAP, vedi Abilitazione di Identity-Aware Proxy per Cloud Run.

  • Come soluzione temporanea, puoi accedere al servizio tramite un browser web utilizzando il proxy Cloud Run in Google Cloud CLI. Puoi eseguire il proxy di un servizio localmente utilizzando quanto segue:

    gcloud run services proxy SERVICE --project PROJECT-ID
    

    Dopo aver eseguito questo comando, Cloud Run esegue il proxy del servizio privato su http://localhost:8080 (o sulla porta specificata con --port), fornendo il token dell'account attivo o un altro token specificato. Questo è il metodo consigliato per testare in privato un sito web o un'API nel tuo browser. Per ulteriori informazioni, consulta la sezione Test di servizi privati.

  • Consenti chiamate non autenticate al tuo completamente gestito di Google Cloud. Questa opzione è utile per i test o quando il servizio è un'API o un sito web pubblici.

HTTP 404: non trovata

Durante la pubblicazione si verifica il seguente problema:

Si verifica un errore HTTP 404.

Per risolvere il problema:

  1. Verifica che l'URL richiesto sia corretto controllando il servizio dei dettagli nella console Google Cloud o eseguendo questo comando:

    gcloud run services describe SERVICE_NAME | grep URL
    
  2. Controlla dove la logica dell'app potrebbe restituire codici di errore 404. Se le tue restituisce l'oggetto 404, questo sarà visibile in Cloud Logging.

  3. Assicurati che l'app non inizi a eseguire l'ascolto sulla porta configurata prima di essere pronta per ricevere richieste.

  4. Verifica che l'app non restituisca il codice di errore 404 quando eseguirlo localmente.

Un 404 viene restituito quando le impostazioni di ingresso di un servizio Cloud Run sono impostate su "Interna" o "Interna e bilanciamento del carico su cloud" e una richiesta non soddisfa la restrizione di rete specificata. Questo può accadere anche se l'URL run.app predefinito del servizio Cloud Run è disattivato e un client tenta di raggiungere il servizio all'URL run.app. In entrambi gli scenari, la richiesta non raggiunge il contenitore e 404 non è presente in Cloud Logging con il seguente filtro:

resource.type="cloud_run_revision"
log_name="projects/PROJECT_ID/logs/run.googleapis.com%2Frequests"
httpRequest.status=404

Con le stesse impostazioni di traffico in entrata, la richiesta potrebbe essere bloccata Controlli di servizio VPC basati sul contesto del chiamante, inclusi progetto e indirizzo IP. Per verificare la presenza di una violazione delle norme dei Controlli di servizio VPC:

  1. Apri Esplora log nella console Google Cloud (non la pagina Log per Cloud Run):

    Vai a Esplora log

  2. Inserisci il seguente testo nel campo della query:

    resource.type="audited_resource"
    log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy"
    resource.labels.method="run.googleapis.com/HttpIngress"
    
  3. Se dopo aver utilizzato questa query vedi voci di log, esamina il log per determinare se è necessario aggiornare i Controlli di servizio VPC criteri.

Potresti anche visualizzare un errore 404 quando accedi all'endpoint del servizio con un bilanciatore del carico che utilizza il runtime Python. Per risolvere questo problema, verifica la maschera URL per il bilanciatore del carico e assicurati che il percorso dell'URL specificato per il bilanciatore del carico corrisponda al percorso nel codice sorgente di Python.

HTTP 429: nessuna istanza di container disponibile

Durante la pubblicazione si verifica il seguente errore:

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.

Per risolvere il problema, controlla "Conteggio istanze container" metrica per e ti consigliamo di aumentare questo limite se il tuo utilizzo sta per raggiungere il limite massimo. Vedi "istanza massima" impostazioni e se Se hai bisogno di più istanze, richiedi un aumento della quota.

HTTP 500: Cloud Run non è riuscito a gestire la frequenza del traffico

Il seguente errore si verifica durante l'elaborazione e può anche verificarsi quando il servizio Non ha raggiunto il limite massimo di istanze di container:

HTTP 500
The request was aborted because there was no available instance

Questo errore può essere causato da una delle seguenti cause:

  • Un enorme aumento improvviso del traffico.
  • Un'ora di avvio a freddo lunga.
  • Tempo di elaborazione delle richieste lungo o un improvviso aumento del tempo di elaborazione delle richieste.
  • Il servizio sta raggiungendo il limite massimo di istanze di container (HTTP 429).
  • Fattori temporanei attribuiti al servizio Cloud Run.

Per risolvere il problema, risolvi i problemi elencati in precedenza.

Oltre a risolvere questi problemi, come soluzione alternativa puoi implementare il backoff esponenziale e i tentativi di nuovo per le richieste che il client non deve perdere.

Tieni presente che un aumento breve e improvviso del traffico o del tempo di elaborazione delle richieste potrebbe essere visibile in Cloud Monitoring solo se aumenti lo zoom fino a una risoluzione di 10 secondi.

Quando la causa principale del problema è un periodo di errori transitori elevati attribuiti esclusivamente a Cloud Run, puoi contattare l'assistenza.

HTTP 501: operazione non implementata

Durante la pubblicazione si verifica il seguente errore:

HTTP 501
Operation is not implemented, or supported, or enabled.

Questo problema si verifica quando specifichi un valore REGION errato durante la chiamata del tuo job Cloud Run. Ad esempio, questo errore può verificarsi quando esegui il deployment di un job nella regione asia-southeast1 e lo richiami utilizzando southeast1-asia o asia-southeast. Per l'elenco delle vedi Località di Cloud Run.

HTTP 503: impossibile trovare le credenziali predefinite

Durante la pubblicazione si verifica il seguente errore:

HTTP 503
System.InvalidOperationException System.InvalidOperationException your Default
credentials were not found.

Questo problema si verifica quando l'applicazione non viene autenticata correttamente a causa di file mancanti, percorsi delle credenziali non validi o variabili di ambiente errate i compiti assegnati.

Per risolvere il problema:

  1. Installa e inizializza l'interfaccia a riga di comando gcloud.

  2. Configura le credenziali predefinite dell'applicazione (ADC) con le credenziali associate al tuo Account Google. Configura l'ADC utilizzando:

      gcloud auth application-default login
    

    Viene visualizzata una schermata di accesso. Dopo aver eseguito l'accesso, le credenziali vengono memorizzate in il file delle credenziali locali utilizzata da ADC.

  3. Utilizza la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS per fornire posizione di un file JSON delle credenziali all'interno del tuo progetto Google Cloud.

Per ulteriori informazioni, vedi Configurare le credenziali predefinite dell'applicazione.

HTTP 500 / HTTP 503: le istanze di container stanno superando i limiti di memoria

Durante l'elaborazione si verifica il seguente errore:

In 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.

Per risolvere il problema:

  1. Determina se le istanze di container superano la memoria disponibile. Cerca gli errori correlati nei log varlog/system.
  2. Se le istanze superano la memoria disponibile, considera aumentando il limite di memoria.

Tieni presente che in Cloud Run i file scritti nel file system locale vengono conteggiati in relazione alla memoria disponibile. Sono inclusi anche i file di log scritti in posizioni diverse da /var/log/* e /dev/log.

HTTP 503: risposta non corretta o problema di connessione all'istanza del contenitore

Durante la pubblicazione si verifica uno dei seguenti errori:

HTTP 503
The request failed because either the HTTP response was malformed or connection to the instance had an error.

Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:

  • Controlla Cloud Logging Utilizza Cloud Logging per cercare errori di esaurimento della memoria nei log. Se ricevi messaggi di errore relativi al contenitore che superano i limiti di memoria, segui consigli per risolvere il problema.

  • Timeout a livello di app Se le richieste vengono terminate con il codice di errore 503 prima di raggiungere il timeout della richiesta impostato in Cloud Run, potresti dover aggiornare l'impostazione di timeout della richiesta per la tua lingua :

  • Bottleneck della rete a valle In alcuni casi, un codice di errore 503 può derivare indirettamente da un bottleneck della rete a valle, ad esempio durante i test di carico. Ad esempio, se il tuo servizio instrada il traffico tramite un connettore Serverless VPC Access, assicurati che il connettore non abbia superato la soglia di throughput seguendo questi passaggi:

    1. Apri l'accesso VPC serverless nella console Google Cloud:

      Vai ad Accesso VPC serverless

    2. Controlla la presenza di barre rosse nella velocità effettiva un istogramma di un grafico. Se è presente una barra rossa Valuta la possibilità di aumentare il numero massimo di istanze o il tipo di istanza del tuo connettore utilizzi. In alternativa, comprimere il traffico inviato tramite un connettore di accesso VPC serverless.

  • Limite di richieste in entrata verso un singolo contenitore. Esiste un problema noto in cui esistono percentuali di richieste elevate per container che comporterà questo errore di 503. Se un'istanza di container riceve più di 800 richieste al secondo, le socket TCP disponibili possono essere esaurite. A Risolvi il problema, prova una delle seguenti soluzioni:

    1. Attiva HTTP/2 per il tuo servizio e apporta le modifiche necessarie al servizio per supportare HTTP/2.

    2. Evita di inviare più di 800 richieste al secondo a una singola istanza container riducendo la contemporaneità configurata. Utilizza la seguente equazione per ottenere una stima della tasso di richieste per istanza di container: requests/sec/container_instance ~= concurrency * (1sec / median_request_latency)

HTTP 503: impossibile elaborare alcune richieste a causa dell'impostazione di un'elevata contemporaneità

Durante la pubblicazione si verificano i seguenti errori:

HTTP 503
The Cloud Run service probably has reached its maximum container instance limit. Consider increasing this limit.

Questo problema si verifica quando le istanze di container utilizzano molta CPU per elaborare le richieste e, di conseguenza, non possono elaborarle tutte, pertanto alcune richieste restituiscono un codice di errore 503.

Per risolvere il problema, prova una o più delle seguenti operazioni:

HTTP 504: errore di timeout del gateway

HTTP 504
The request has been terminated because it has reached the maximum request timeout.

Se il tuo servizio elabora richieste lunghe, puoi aumenta il timeout della richiesta. Se il servizio non restituisce una risposta entro il tempo specificato, la richiesta termina e il servizio restituisce un errore HTTP 504, come descritto nel contratto del runtime del contenitore.

Per risolvere questo problema, prova una o più delle seguenti operazioni:

  • Logging e tracciamento degli strumenti per capire dove si trovano prima di superare il timeout della richiesta configurato.

  • Le connessioni in uscita vengono reimpostate occasionalmente a causa di aggiornamenti dell'infrastruttura. Se la tua applicazione riutilizza connessioni, ti consigliamo di configurare l'applicazione Ristabilire le connessioni per evitare il riutilizzo di una connessione inattiva.

    • A seconda della logica o della gestione degli errori dell'app, un errore 504 potrebbe essere un indicatore che la tua applicazione sta tentando di riutilizzare una connessione inattiva blocchi di richieste fino al timeout della richiesta configurato.
    • Puoi usare un probe di attività per terminare un'istanza che restituisce errori permanenti.
  • Errori di memoria insufficiente che si verificano all'interno del codice dell'app. ad esempio java.lang.OutOfMemoryError, non terminano necessariamente in esecuzione in un'istanza Compute Engine. Se l'utilizzo della memoria non supera il limite di memoria del container, l'istanza non verrà interrotta. A seconda di come l'app gestisce gli errori di esaurimento della memoria a livello di app, le richieste potrebbero bloccarsi finché non superano il timeout della richiesta configurato.

    • Se vuoi che l'istanza del contenitore venga interrotta nello scenario precedente, configura il limite di memoria a livello di app in modo che sia superiore al limite di memoria del contenitore.
    • Puoi utilizzare un probe di attività per contribuire a terminare un'istanza che restituisce errori persistenti.

Connessione reimpostata dal peer

Durante la pubblicazione si verifica uno dei seguenti errori:

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

Questo errore si verifica quando un'applicazione ha una connessione TCP stabilita con un il peer nella rete e il peer chiude inaspettatamente la connessione.

Per risolvere il problema:

  • Se stai tentando di eseguire un'operazione in background con il throttling della CPU, prova a utilizzare l'impostazione di allocazione della CPU "La CPU è sempre allocata".

  • Assicurati di rispettare i tempi di attesa delle richieste in uscita. Se la tua applicazione mantiene una connessione in uno stato inattivo oltre queste soglie, il gateway deve recuperarla.

  • Per impostazione predefinita, l'opzione di socket TCP keepalive è disabilitata per Cloud Run. Non esiste un modo diretto per configurare keepalive in Cloud Run a livello di servizio, ma può attivare l'opzione keepalive per ogni connessione socket fornendo le opzioni socket corrette al momento dell'apertura di una nuova connessione socket TCP, a seconda della libreria client che utilizzi per questa connessione in la tua applicazione.

  • A volte le connessioni in uscita verranno reimpostate per via di aggiornamenti dell'infrastruttura. Se la tua applicazione riutilizza connessioni di lunga durata, ti consigliamo di configurarla in modo da ristabilire le connessioni per evitare il riutilizzo di una connessione non attiva.

  • Se utilizzi un proxy HTTP per instradare il traffico in uscita dei servizi o dei job Cloud Run e il proxy applica una durata massima della connessione, il proxy potrebbe eliminare silenziosamente le connessioni TCP di lunga durata, come quelle stabilite utilizzando il pool di connessioni. Questo causa un errore dei client HTTP quando a riutilizzare una connessione già chiusa. Se intendi instradare il traffico in uscita tramite un proxy HTTP, assicurati devi tenere conto di questo scenario implementando la convalida della connessione, e il backoff esponenziale. Per i pool di connessioni, configura i valori massimi per l'età delle connessioni, le connessioni inattive e il timeout di inattività delle connessioni.

Timeout connessione

Gli errori di latenza o uno dei seguenti errori si verificano quando si verificano timeout di connessione durante l'invio di una richiesta 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

Questo tipo di errori si verifica quando un'applicazione tenta di creare una nuova connessione TCP con un host remoto e la connessione richiede troppo tempo per essere stabilita.

  • Se indirizzi tutto il traffico in uscita tramite una rete VPC, utilizzando connettori VPC o uscita diretta VPC, assicurati che:

    • Hai definito tutte le regole firewall necessarie per consentire il traffico in entrata per i connettori VPC.

    • Le regole firewall VPC consentono il traffico in entrata proveniente dai connettori VPC o dal VPC diretto in uscita per raggiungere l'host o la subnet di destinazione.

    • Disponi di tutti i percorsi necessari per consentire il routing corretto del traffico agli host di destinazione e viceversa. Questo è importante quando si instrada il traffico in uscita attraverso il peering di rete VPC connettività cloud ibrida, mentre i pacchetti passano su più reti prima di raggiungere l'host remoto.

  • Se utilizzi un proxy HTTP per instradare tutto il traffico in uscita dalla tua Cloud Run o i job di Cloud Run, assicurati che gli host remoti siano raggiungibile tramite il proxy.

    Il traffico instradato tramite un proxy HTTP potrebbe subire ritardi a seconda dell'utilizzo delle risorse del proxy. Se si instrada il traffico HTTP in uscita utilizzando un proxy assicurati di tenere conto di questo scenario implementando nuovi tentativi, il backoff esponenziale o gli interruttori di sicurezza.

Configura eccezioni proxy HTTP

Quando utilizzi un proxy HTTP per instradare il traffico in uscita dei servizi o dei job Cloud Run, assicurati di aggiungere eccezioni per le API Cloud e per altri host e sottoreti non proxy per evitare latenza, timeout delle connessioni, reimpostazione delle connessioni ed errori di autenticazione.

Gli host e le subnet senza proxy devono includere almeno quanto segue:

  • 127.0.0.1
  • 169.254.* o 169.254.0.0/16
  • localhost
  • *.google.internal
  • *.googleapis.com

Facoltativamente, gli host senza proxy possono includere:

  • *.appspot.com
  • *.run.app
  • *.cloudfunctions.net
  • *.gateway.dev
  • *.googleusercontent.com
  • *.pkg.dev
  • *.gcr.io

Metodi comuni per configurare le eccezioni del proxy HTTP per il networking in uscita include:

  • Variabili di ambiente: NO_PROXY o no_proxy.
  • Indicatore della macchina virtuale Java http.nonProxyHosts.

    • La proprietà di sistema https.nonProxyHosts non è definita, quindi http.nonProxyHosts si applica sia a HTTP che a HTTPS.
    • La proprietà di sistema http.nonProxyHosts non supporta la notazione CIDR, pertanto devi utilizzare espressioni con corrispondenza del pattern.

Firma del token di identità oscurata da Google

Durante la pubblicazione si verificano i seguenti errori:

SIGNATURE_REMOVED_BY_GOOGLE

Questo può verificarsi durante lo sviluppo e i test nei seguenti casi:

  1. Un utente accede utilizzando Google Cloud CLI o Cloud Shell.
  2. L'utente genera un token ID utilizzando i comandi gcloud.
  3. L'utente tenta di utilizzare il token ID per richiamare un servizio Cloud Run non pubblico.

Si tratta del comportamento previsto. Google rimuove la firma del token per problemi di sicurezza per impedire a qualsiasi servizio Cloud Run non pubblico di ripetere i token ID. generati in questo modo.

Per risolvere il problema, richiama il tuo servizio privato con un nuovo token ID. Consulta testare l'autenticazione nel servizio per ulteriori informazioni.

Avviso OpenBLAS nei log

Se utilizzi librerie basate su OpenBLAS come NumPy con l'ambiente di esecuzione di prima generazione, potresti visualizzare il seguente avviso nei log:

OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k

Si tratta solo di un avviso e non ha alcun effetto sul tuo servizio. Questo avviso si verifica perché la sandbox del contenitore utilizzata dall'ambiente di esecuzione di prima generazione non espone funzionalità hardware di basso livello. In via facoltativa, passare all'ambiente di esecuzione di seconda generazione se non vuoi che questi avvisi siano inclusi nei log.

Spark non riesce a ottenere l'indirizzo IP della macchina a cui eseguire il binding

Durante la pubblicazione si verifica uno dei seguenti errori:

assertion failed: Expected hostname (not IP) but got <IPv6 ADDRESS>
assertion failed: Expected hostname or IPv6 IP enclosed in [] but got <IPv6 ADDRESS>

Per risolvere il problema:

Per modificare il valore della variabile di ambiente e risolvere il problema, imposta ENV SPARK_LOCAL_IP="127.0.0.1" nel Dockerfile. In Cloud Run, se variabile SPARK_LOCAL_IP se non è configurato, utilizzerà per impostazione predefinita la rispettiva controparte IPv6 anziché localhost. Nota l'impostazione RUN export SPARK_LOCAL_IP="127.0.0.1" non sarà disponibile e Spark si comporta come se non fosse stato impostato.

Mapping di domini personalizzati

Lo stato del provisioning del certificato del dominio personalizzato è bloccato

Quando provi a mappare un dominio personalizzato, si verifica uno dei seguenti errori:

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.

Per risolvere il problema:

  • Attendi almeno 24 ore. Il provisioning del certificato SSL richiede in genere circa 15 minuti, ma possono essere necessarie fino a 24 ore.
  • Verifica di aver aggiornato correttamente i record DNS del tuo dominio utilizzando lo Strumento di scavo degli Strumenti amministrativi Google

    I record DNS nel tuo registrar di domini devono corrispondere a quelli che la console Google Cloud ti chiede di aggiungere.

  • Verifica che la radice del dominio sia verificata nel tuo account utilizzando uno dei seguenti metodi:

  • Verifica che il certificato per il dominio non sia scaduto. Per trovare il limiti di scadenza, utilizza il seguente comando:

    echo | openssl s_client -servername 'ROOT_DOMAIN' -connect 'ROOT_DOMAIN:443' 2>/dev/null | openssl x509 -startdate -enddate -noout
    

API Admin

La funzionalità non è supportata nella fase di lancio dichiarata

Quando chiami l'API Cloud Run Admin, si verifica il seguente errore:

The feature is not supported in the declared launch stage

Questo errore si verifica quando chiami direttamente l'API Cloud Run Admin e utilizzi una versione beta senza specificare un'annotazione o un campo nella fase di avvio.

Per risolvere il problema, aggiungi il campo della fase di lancio alle richieste. Di seguito sono riportati esempi per l'API REST v1 e l'API REST v2:

Nell'esempio seguente viene aggiunta un'annotazione della fase di avvio a una richiesta del client utilizzando JSON e l'API REST v1:

    "annotations": {
      "run.googleapis.com/launch-stage": "BETA"
    }

Nell'esempio seguente viene aggiunto un riferimento LaunchStage a una richiesta del client utilizzando JSON e l'API REST v2:

  "launchStage": "BETA"

Nell'esempio seguente viene aggiunta un'annotazione della fase di avvio a una richiesta di servizio utilizzando YAML e l'API REST v1:

kind: Service
metadata:
  annotations:
    run.googleapis.com/launch-stage: BETA

La disconnessione del client non si propaga a Cloud Run

Quando utilizzi HTTP/1.1 su Cloud Run, gli eventi di disconnessione del client non vengono propagati al contenitore Cloud Run.

La soluzione è utilizzare WebSocket o HTTP/2.0, che propagano le disconnessioni del client.

Risolvere i problemi relativi al file system di rete

Scopri di più su Utilizzo di file system di rete.

Impossibile accedere ai file utilizzando NFS

Errore Rimedio suggerito
mount.nfs: Protocol not supported Per alcune immagini di base, ad esempio debian e adoptopenjdk/openjdk11, manca la dipendenza nfs-kernel-server.
mount.nfs: Connection timed out Se la connessione scade, assicurati di fornire l'indirizzo IP corretto dell'istanza Filestore.
mount.nfs: access denied by server while mounting IP_ADDRESS:/FILESHARE Se l'accesso è stato negato dal server, verifica che il nome della condivisione file sia corretto.

Impossibile accedere ai file utilizzando Cloud Storage FUSE

Consulta la guida alla risoluzione dei problemi di Cloud Storage FUSE.