Auf dieser Seite wird beschrieben, wie Sie Fehler beheben können, die bei der Verwendung von Cloud Run auftreten können. Personalized Service Health veröffentlicht alle Cloud Run-Vorfälle, die auf der zugrunde liegenden Google Cloud Infrastruktur beruhen, um Google Cloud Dienstunterbrechungen zu erkennen, die sich auf Ihre Projekte auswirken. Sie sollten auch Benachrichtigungen für Personalized Service Health-Ereignisse einrichten. Informationen zu Vorfällen, die alle Google Cloud Dienste betreffen, finden Sie im Google Cloud Service Health-Dashboard.
Prüfen Sie, ob Probleme vorhanden sind, oder eröffnen Sie neue Probleme in der öffentlichen Problemverfolgung.
Informationen zu anderen Fehlermeldungen, die auf dieser Seite nicht aufgeführt sind, finden Sie unter Bekannte Probleme in Cloud Run. Wenn Sie auch nach dem Befolgen der Schritte in diesem Leitfaden weiterhin Fehler erhalten, wenden Sie sich an den Support.
In den folgenden Abschnitten finden Sie Informationen zur Behebung von Problemen in Cloud Run:
Bereitstellungsfehler
In diesem Abschnitt werden die häufigsten Bereitstellungsfehler in Cloud Run und Methoden zur Fehlerbehebung beschrieben.
Container konnte nicht gestartet werden
Der folgende Fehler tritt auf, wenn Sie versuchen, die Bereitstellung durchzuführen:
Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable.
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Prüfen Sie, ob Sie Ihr Container-Image lokal ausführen können. Wenn Ihr Container-Image nicht lokal ausgeführt werden kann, müssen Sie das Problem zuerst lokal diagnostizieren und beheben.
Prüfen Sie, ob Ihr Container Anfragen auf dem richtigen Port überwacht. Ihr Container muss eingehende Anfragen auf dem Port überwachen, der von Cloud Run definiert und in der Umgebungsvariable
PORT
angegeben ist. Eine Anleitung zum Angeben des Ports finden Sie unter Container für Dienste konfigurieren.Prüfen Sie, ob Ihr Container alle Netzwerkschnittstellen überwacht, die in der Regel als
0.0.0.0
angezeigt werden. Ihr Container sollte nicht127.0.0.1
überwachen.Prüfen Sie, ob Ihr Container-Image für den 64-Bit-Linux kompiliert wird, wie gemäß dem Containerlaufzeitvertrag erforderlich.
Verwenden Sie Cloud Logging, um in
stdout
- oderstderr
-Logs nach Anwendungsfehlern zu suchen. Sie können auch nach Abstürzen suchen, die in Stackdriver Error Reporting erfasst wurden.Möglicherweise müssen Sie den Code oder die Überarbeitungseinstellungen aktualisieren, um Fehler oder Abstürze zu beheben. Sie können auch Probleme mit Ihrem Dienst lokal beheben.
Fehler beim Containerimport
Der folgende Fehler tritt auf, wenn Sie versuchen, die Bereitstellung durchzuführen:
The service has encountered an error during container import. Please try again later. Resource readiness deadline exceeded.
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Das Dateisystem des Containers darf keine Nicht-UTF8-Zeichen enthalten.
Einige Windows-basierte Docker-Images verwenden Fremdebenen. Die Steuerungsebene von Cloud Run unterstützt keine fremden Ebenen. Zur Behebung des Fehlers können Sie versuchen, das Flag
--allow-nondistributable-artifacts
im Docker-Daemon festzulegen.
Die Funktion wird nicht unterstützt
Der folgende Fehler tritt auf, wenn Sie die Cloud Run Admin API aufrufen:
The feature is not supported in the declared launch stage
Dieser Fehler tritt auf, wenn Sie die Cloud Run Admin API direkt aufrufen und ein Betafeature ohne Angabe einer Startphasenannotation oder -feld verwenden.
Fügen Sie das Feld „launch_stage“ in die Anfragen ein, um dieses Problem zu beheben.
In den folgenden Beispielen wird gezeigt, wie Sie beim Verwenden der REST API v1 oder v2 Referenzen für die Einführungsphase hinzufügen:
So fügen Sie einer Clientanfrage mit JSON und der REST API v1 eine Anmerkung zur Einführungsphase hinzu:
"annotations": { "run.googleapis.com/launch-stage": "BETA" }
LaunchStage-Referenz für eine Clientanfrage mit JSON und der REST API Version 2:
"launchStage": "BETA"
Anmerkung zur Einführungsphase für eine Dienstanfrage mit YAML und der REST API v1:
kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA
Nutzer root
nicht gefunden
Der folgende Fehler tritt auf, wenn die vom Kunden verwalteten Verschlüsselungsschlüssel mit einem --key
-Parameter angegeben werden:
ERROR: "User \"root\""not found in /etc/passwd
Geben Sie im Dockerfile USER 0
anstelle von USER root
an, um dieses Problem zu beheben.
Compute Engine-Standarddienstkonto wurde gelöscht
Der folgende Fehler tritt während der Bereitstellung auf:
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).
Dieses Problem tritt in einem der folgenden Szenarien auf:
Das Standard-Compute Engine-Dienstkonto ist im Projekt nicht vorhanden und mit dem Flag
--service-account
wurde kein Dienstkonto angegeben.Der Entwickler oder das Hauptkonto, der den Dienst bereitstellt, hat nicht die erforderlichen Berechtigungen für das Standarddienstkonto von Compute Engine für die Bereitstellung.
So lösen Sie dieses Problem:
Geben Sie mit dem Flag
--service-account
ein Dienstkonto an:gcloud run services update SERVICE_NAME --service-account SERVICE_ACCOUNT
Prüfen Sie, ob das von Ihnen angegebene Dienstkonto die Berechtigungen nötig für die Bereitstellung hat.
So prüfen Sie, ob der Compute Engine-Standarddienstagent in Ihrem Google Cloud -Projekt vorhanden ist:
Rufen Sie in der Google Cloud Console die Seite Berechtigungen für die Identitäts- und Zugriffsverwaltung auf:
Klicken Sie auf das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen.
Suchen Sie in der Liste Hauptkonten die ID des Compute Engine-Dienst-Agents, der das Format
PROJECT_NUMBER-compute@developer.gserviceaccount.com
verwendet.
Probleme mit dem Cloud Build-Dienstkonto
Der folgende Fehler tritt bei Quellbereitstellungen auf, wenn das Cloud Build-Dienstkonto nicht die erforderlichen Berechtigungen hat oder deaktiviert ist:
ERROR: (gcloud.run.deploy) NOT_FOUND: Build failed. The service has encountered an internal error. Please try again later. This command is authenticated as EMAIL_ADDRESS which is the active account specified by the [core/account] property.
Cloud Build hat das Standardverhalten für die Verwendung von Dienstkonten durch Cloud Build in neuen Projekten geändert. Weitere Informationen finden Sie unter Änderung des Cloud Build-Standarddienstkontos. Aufgrund dieser Änderung verwenden neue Projekte, die zum ersten Mal aus Quellcode in Cloud Run bereitgestellt werden, möglicherweise ein Cloud Build-Standarddienstkonto mit unzureichenden Berechtigungen für die Bereitstellung aus Quellcode.
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Lesen Sie die Cloud Build-Anleitung zu Änderungen am Standarddienstkonto und deaktivieren Sie diese Änderungen.
Weisen Sie dem Build-Dienstkonto die Rolle Cloud Run Builder (
roles/run.builder
) zu.
Cloud Run-Dienst-Agent fehlt die Berechtigung zum Lesen des Images
Der folgende Fehler tritt auf, wenn Sie versuchen, aus einem Projekt mit einem in der Artifact Registry gespeicherten Image bereitzustellen und dabei die gcr.io
-Domain in einem anderen Projekt verwenden:
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.
Möglicherweise wird auch der folgende Fehler angezeigt, wenn Sie versuchen, aus einem Projekt mit einem Image bereitzustellen, das in der Artifact Registry in einem anderen Projekt gespeichert ist:
ERROR: (gcloud.run.deploy) PERMISSION_DENIED: User must have permission to read the image, REGION.pkg.dev/PROJECT_ID/ARTIFACT_REGISTRY_REPO/IMAGE:latest. Ensure that the provided container image URL is correct and that the 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 the image is from project PROJECT_ID, which is not the same as this project PROJECT_ID.
Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:
Folgen Sie der Anleitung zum Bereitstellen von Container-Images aus anderen Google Cloud -Projekten, damit Ihre Hauptkonten die erforderlichen Berechtigungen haben.
Dieses Problem kann auch auftreten, wenn sich das Projekt in einem VPC Service Controls-Perimeter mit einer Einschränkung für die Cloud Storage API befindet, die Anfragen vom Cloud Run-Dienst-Agent verbietet. So lösen Sie das Problem:
Öffnen Sie den Log-Explorer in der Google Cloud -Console. (Verwenden Sie nicht die Seite Logs auf der Cloud Run-Seite):
Geben Sie in das Abfragefeld den folgenden Text ein:
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"
Wenn Sie nach der Verwendung dieser Abfrage Logeinträge sehen, prüfen Sie die Logeinträge, um festzustellen, ob Sie Ihre VPC Service Controls-Richtlinien aktualisieren müssen. Dies kann darauf hinweisen, dass Sie
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
einer vorhandenen Zugriffsrichtlinie hinzufügen müssen.
Fehlende Berechtigungen für Quelldeployments
Bei der Bereitstellung aus der Quelle können die folgenden Fehler auftreten:
ERROR: (gcloud.run.deploy) EMAIL_ADDRESS does not have permission to access namespaces instance PROJECT_ID (or it may not exist): Google Cloud Run Service Agent does not have permission to get access tokens for the service account SERVICE_ACCOUNT. Please give SERVICE_ACCOUNT permissioniam.serviceAccounts.getAccessToken
on the service account. Alternatively, if the service account is unspecified or in the same project you are deploying in, ensure that the Service Agent is assigned the Google Cloud Run Service Agent roleroles/run.serviceAgent
. This command is authenticated as EMAIL_ADDRESS, which is the active account specified by the [core/account] property.
Jeder Cloud Run-Dienst ist mit einem Dienstkonto verknüpft, das als Identität dient, wenn der Dienst auf andere Ressourcen zugreift. Dieses Dienstkonto kann das Standarddienstkonto (PROJECT_NUMBER-compute@developer.gserviceaccount.com
) oder ein vom Nutzer verwaltetes Dienstkonto sein.
In Umgebungen, in denen mehrere Dienste auf verschiedene Ressourcen zugreifen, können Sie anstelle des Standarddienstkontos dienstspezifische Identitäten mit verschiedenen nutzerverwalteten Dienstkonten verwenden.
Um dieses Problem zu beheben, weisen Sie dem Bereitstellerkonto die Rolle Dienstkontonutzer (roles/iam.serviceAccountUser
) für das Dienstkonto zu, das als Dienstidentität verwendet wird.
Diese vordefinierte Rolle enthält die Berechtigung iam.serviceAccounts.actAs
, die zum Anhängen eines Dienstkontos an den Dienst oder die Überarbeitung erforderlich ist. Ein Nutzer, der ein vom Nutzer verwaltetes Dienstkonto erstellt, erhält automatisch die Berechtigung iam.serviceAccounts.actAs
. Anderen Bereitstellern muss diese Berechtigung jedoch von dem Nutzer gewährt werden, der das vom Nutzer verwaltete Dienstkonto erstellt.
Weitere Informationen zu den Zugriffsanforderungen für neu erstellte Dienstkonten finden Sie unter Empfehlungen zum Erstellen dedizierter Dienstkonten erhalten.
Der Nutzer hat nicht die erforderlichen Berechtigungen, um Quellbereitstellungen abzuschließen.
Der folgende Fehler tritt auf, wenn dem Konto des Bereitstellers die erforderlichen Berechtigungen für Ihr Projekt fehlen:
ERROR: (gcloud.run.deploy) 403 Could not upload file EMAIL_ADDRESS does not havestorage.objects.create
access to the Google Cloud Storage object. Permissionstorage.objects.create
denied on resource (or it may not exist). This command is authenticated as EMAIL_ADDRESS which is the active account.
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen (Identity and Access Management) zuzuweisen, um diesen Fehler zu beheben:
- Cloud Run Source Developer (
roles/run.sourceDeveloper
) für Ihr Projekt. - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) für Ihr Projekt. - Rolle Dienstkontonutzer (
roles/iam.serviceAccountUser
) für die Cloud Run-Dienstidentität. Weitere Informationen finden Sie unter Bereitstellungsberechtigungen.
Fehler beim Bereitstellen eines Cloud Run-Dienstes aus anderen Google Cloud Projekten
Der folgende Fehler tritt auf, wenn Sie einen Cloud Run-Dienst aus einem Quellprojekt in einem Zielprojekt bereitstellen:
Failed to create service. Operation failed due to missing permissions. Google Cloud Run Service Agent does not have permission to get access tokens for the service account SERVICE_ACCOUNT. Please give SERVICE_ACCOUNT permissioniam.serviceAccounts.getAccessToken
on the service account. Alternatively, if the service account is unspecified or in the same project you are deploying in, ensure that the Service Agent is assigned the Google Cloud Run Service Agent roleroles/run.serviceAgent
.
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Weisen Sie die Rolle Dienstkontonutzer (
roles/iam.serviceAccountUser
) für das Dienstkonto zu, das Sie als Dienstidentität in Ihrem Zielprojekt verwenden.Weisen Sie dem Cloud Run-Dienstkonto im Zielprojekt die Rolle Ersteller von Dienstkonto-Tokens (
roles/iam.serviceAccountTokenCreator
) zu. Fügen Sie die E-Mail-Adresse des Cloud Run-Dienst-Agents (service-PROJECT_NUMBER@SERVICE_DOMAIN.iam.gserviceaccount.com
) als Hauptkonto aus dem Quellprojekt hinzu.Deaktivieren Sie die Organisationsrichtlinie
iam.disableCrossProjectServiceAccountUsage
.
Eine ausführliche Anleitung finden Sie unter Dienstidentität für Dienste konfigurieren.
Fehler beim Bereitstellen von Python-Quellcode in Cloud Run
Wenn Sie einen Cloud Run-Dienst aus dem Quellcode mit der Python-Laufzeit bereitstellen, tritt einer der folgenden Fehler auf:
Revision REVISION_NAME is not ready and cannot serve traffic. The user provided container failed to start and listen on port defined by PORT=8080 environment variable within the allocated timeout. This can happen if the port is misconfigured or if the timeout is too short. The healthcheck timeout can be extended.
- Die Bereitstellung wird mit HTTP 500-Fehlercodes in den Logs abgeschlossen.
Das Python-Buildpack legt den Standard-Einstiegspunkt für Cloud Run-Quellbereitstellungen fest. Für Python-Version 3.13 und höher legt das Python-Buildpack den Einstiegspunkt basierend auf der Webdienstkonfiguration in Ihrer requirements.txt
-Datei fest. Wenn Sie in der Datei requirements.txt
keinen Webserver oder kein Framework angeben oder Python-Version 3.12 oder früher verwenden, legt das Python-Buildpack den Standard-Einstiegspunkt auf gunicorn -b :8080 main:app
fest. Weitere Informationen finden Sie unter Python-Anwendung erstellen.
Sie haben mehrere Möglichkeiten, dieses Problem zu beheben. Sie können beispielsweise einen der folgenden Webserver in Ihrer requirements.txt
-Datei angeben:
gunicorn
:# https://pypi.org/project/gunicorn/ gunicorn==21.2.0
fastapi
unduvicorn
:# https://pypi.org/project/fastapi fastapi[standard]==0.116.1 # https://pypi.org/project/uvicorn uvicorn==0.35.0
Alternativ können Sie einen der folgenden Schritte ausführen, um Bereitstellungsfehler zu beheben:
Geben Sie den Einstiegspunkt mit dem folgenden Befehl zum Bereitstellen der Quelle an:
gcloud run deploy SERVICE --source . --set-build-env-vars GOOGLE_ENTRYPOINT="ENTRYPOINT"
Ersetzen Sie Folgendes:
- SERVICE: Der Name des Dienstes, für den Sie die Bereitstellung ausführen möchten.
- ENTRYPOINT: Der Standardeinstiegspunkt, den Sie für Ihren Quellcode verwenden möchten.
Verwenden Sie eine Procfile, um einen Einstiegspunkt festzulegen.
Schaltungsfehler
In diesem Abschnitt sind mögliche Probleme mit Schaltung sowie Vorschläge zu deren Behebung aufgeführt.
HTTP 404: Nicht gefunden
Das folgende Problem tritt während der Schaltung auf:
`HTTP 404`:Not found
HTTP 404
-Fehler können in den folgenden Szenarien auftreten:
Bei einer falschen Anfrage-URL oder einem falschen Anwendungscode werden
404
-Fehler zurückgegeben. So beheben Sie das Problem:Prüfen Sie, ob die angeforderte URL korrekt ist. Sie können die URL entweder auf der Dienstdetailseite in der Google Cloud -Konsole oder durch Ausführen des folgenden Befehls überprüfen:
gcloud run services describe SERVICE_NAME | grep URL
Prüfen Sie, wo Ihre App
404
-Fehlercodes zurückgibt. Wenn Ihre Anwendung404
zurückgibt, finden Sie das in Cloud Logging. Achten Sie außerdem darauf, dass die App bei lokaler Ausführung keinen404
-Fehlercode zurückgibt.Achten Sie darauf, dass Ihre App den konfigurierten Port nicht überwacht, bevor sie Anfragen empfangen kann.
Die Anfrage erreicht den Container nicht, was in den folgenden Szenarien zu einem
404
-Fehler führt:Eine Anfrage erfüllt die angegebene Netzwerkeinschränkung nicht, insbesondere wenn die Einstellungen für eingehenden Traffic des Cloud Run-Dienstes auf Intern oder Intern und Cloud Load Balancing festgelegt sind.
Die Standard-URL
run.app
des Cloud Run-Dienstes ist deaktiviert und ein Client versucht, den Dienst unter dieserrun.app
-URL zu erreichen.
In beiden Szenarien finden Sie den Fehler
404
nicht in Cloud Logging, auch wenn Sie den folgenden Filter anwenden:resource.type="cloud_run_revision" log_name="projects/PROJECT_ID/logs/run.googleapis.com%2Frequests" httpRequest.status=404
Bei den gleichen Einstellungen für eingehenden Traffic kann die Anfrage von VPC Service Controls basierend auf dem Kontext des Aufrufers einschließlich Projekt und IP-Adresse blockiert werden. So prüfen Sie einen VPC Service Controls-Richtlinienverstoß:
Öffnen Sie den Log-Explorer in der Google Cloud Console:
Geben Sie in das Abfragefeld den folgenden Text ein:
resource.type="audited_resource" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy" resource.labels.method="run.googleapis.com/HttpIngress"
Wenn Sie nach der Verwendung dieser Abfrage Logeinträge sehen, prüfen Sie die Logeinträge, um festzustellen, ob Sie Ihre VPC Service Controls-Richtlinien aktualisieren müssen.
Mit einem Load Balancer über die Python-Laufzeit auf Ihren Dienstendpunkt zugreifen. Um dieses Problem zu beheben, prüfen Sie die URL-Maske für Ihren Load Balancer und achten Sie darauf, dass der URL-Pfad, den Sie für den Load Balancer angeben, mit dem Pfad in Ihrem Python-Quellcode übereinstimmt.
Keine verfügbaren Containerinstanzen
Der folgende Fehler tritt während der Schaltung auf:
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.
Um dieses Problem zu beheben, überprüfen Sie den Messwert Anzahl der Container-Instanzen für Ihren Dienst und ziehen Sie eine Erhöhung dieses Limits in Betracht, wenn sich Ihre Nutzung dem Maximum nähert. Weitere Informationen finden Sie unter Maximale Anzahl von Instanzen für Dienste festlegen. Wenn Sie weitere Instanzen benötigen, fordern Sie eine Kontingenterhöhung an.
Cloud Run konnte die Trafficrate nicht verwalten
Der folgende Fehler tritt entweder während der Bereitstellung oder auf, wenn der Dienst das maximale Limit für Containerinstanzen noch nicht erreicht hat:
HTTP 500 The request was aborted because there was no available instance
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Gehen Sie die folgenden möglichen Ursachen durch:
- Ein starker Anstieg des Traffics.
- Eine lange Kaltstartzeit.
- Eine lange Verarbeitungszeit für Anfragen oder eine plötzliche Erhöhung der Verarbeitungszeit für Anfragen.
- Der Dienst erreicht das maximale Limit für Containerinstanzen (
HTTP 429
). - Temporäre Faktoren, die dem Cloud Run-Dienst zugeordnet sind.
Implementieren Sie exponentiellen Backoff und Wiederholungsversuche für Anfragen, die der Client nicht verwerfen darf. Eine kurze und plötzliche Erhöhung des Traffics oder der Verarbeitungszeit für Anfragen ist möglicherweise nur in Cloud Monitoring sichtbar, wenn Sie die Auflösung auf 10 Sekunden heranzoomen.
Wenn die Ursache des Problems ein Zeitraum erhöhter vorübergehender Fehler ist, der ausschließlich Cloud Run zugeordnet ist, wenden Sie sich an den Support.
Cloud Run-Instanz kann nicht gestartet werden
Der folgende Fehler tritt während der Schaltung auf:
HTTP 500 The request failed because the instance could not start successfully.
Dieser Fehler tritt auf, wenn der Container nicht innerhalb des konfigurierten Zeitraums gestartet werden kann und den Status „Healthy“ erreicht. Dafür kann es mehrere Ursachen geben. Ein häufiger Grund ist, dass der Container nicht auf ein erforderliches Secret aus Secret Manager zugreifen kann.
Beachten Sie bei der Fehlerbehebung Folgendes:
IAM-Berechtigungen prüfen: Prüfen Sie, ob Ihr Cloud Run-Dienstkonto die Rolle Zugriffsperson für Secret Manager-Secret (
roles/secretmanager.secretAccessor
) für das Secret hat, auf das Sie zugreifen möchten.Prüfen Sie den Secret-Pfad: Achten Sie darauf, dass Sie in der Konfiguration Ihrer Anwendung den richtigen Secret-Namen und die richtige Version angeben.
Netzwerkkonfiguration prüfen: Wenn Sie einen VPC Service Controls-Perimeter oder Firewallregeln verwenden, achten Sie darauf, dass Sie ausgehenden Traffic zu
secretmanager.googleapis.com
zulassen.Effektive Logs ausgeben: Fügen Sie dem Startprozess Ihrer Anwendung Logging hinzu, insbesondere beim Abrufen von Secrets, um bestimmte Fehler zu diagnostizieren.
Vorgang nicht implementiert
Der folgende Fehler tritt auf, wenn Sie beim Aufrufen Ihres Cloud Run-Jobs eine falsche REGION angeben, z. B. wenn Sie einen Job in der Region asia-southeast1
bereitstellen und ihn mit southeast1-asia
oder asia-southeast
aufrufen:
HTTP 501 Operation is not implemented, or supported, or enabled.
Eine Liste der unterstützten Regionen finden Sie unter Cloud Run-Standorte.
Standardanmeldedaten nicht gefunden
Der folgende Fehler tritt auf, wenn Ihre Anwendung aufgrund fehlender Dateien, ungültiger Anmeldedatenpfade oder falscher Zuweisungen von Umgebungsvariablen nicht richtig authentifiziert wird:
HTTP 503: System.InvalidOperationException System.InvalidOperationException your Default credentials were not found.
So lösen Sie dieses Problem:
Richten Sie Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) mit den Anmeldedaten ein, die mit Ihrem Google-Konto verknüpft sind. ADC konfigurieren mit:
gcloud auth application-default login
Ein Anmeldebildschirm wird angezeigt. Nach der Anmeldung werden Ihre Anmeldedaten in der lokalen Anmeldedatendatei für ADC gespeichert.
Verwenden Sie die Umgebungsvariable
GOOGLE_APPLICATION_CREDENTIALS
, um den Speicherort einer JSON-Datei mit Anmeldedaten in Ihrem Google Cloud -Projekt anzugeben.Weitere Informationen finden Sie unter Standardanmeldedaten für Anwendungen einrichten.
Containerinstanzen überschreiten die Speicherlimits
Der folgende HTTP 500
- oder HTTP 503
-Fehler tritt während der Schaltung in Cloud Logging auf:
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.
So lösen Sie dieses Problem:
- Ermitteln Sie, ob Ihre Containerinstanzen den verfügbaren Arbeitsspeicher überschreiten.
Suchen Sie in den
varlog/system
-Logs nach ähnlichen Fehlern. - Wenn die Instanzen zu groß für den verfügbaren Speicher sind, sollten Sie vielleicht das Speicherlimit erhöhen.
In Cloud Run werden auf das lokale Dateisystem geschriebene Dateien auf den verfügbaren Speicher angerechnet. Dies gilt auch für alle Logdateien, die in andere Speicherorte als /var/log/*
und /dev/log
geschrieben werden.
Einige Anfragen können aufgrund der hohen Gleichzeitigkeitseinstellung nicht verarbeitet werden
Der folgende Fehler tritt auf, wenn Ihre Containerinstanzen eine hohe CPU-Auslastung zum Verarbeiten von Anfragen verwenden und daher nicht alle Anfragen verarbeiten können:
HTTP 503 The Cloud Run service probably has reached its maximum container instance limit. Consider increasing this limit.
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Erhöhen Sie die maximale Anzahl von Containerinstanzen für Ihren Dienst.
Verringern Sie die Gleichzeitigkeit des Dienstes. Weitere Informationen finden Sie unter Maximale Anzahl gleichzeitiger Anfragen pro Instanz festlegen.
Cloud Logging-Fehler im Zusammenhang mit abgebrochenen ausstehenden Warteschlangenanfragen
Einer der folgenden Fehler tritt auf, wenn Cloud Run nicht schnell genug skaliert wird, um den Traffic zu verwalten:
-
The request was aborted because there was no available instance:
severity=WARNING
( Response code: 429 ) Cloud Run cannot scale due to themax-instances
limit you set during configuration. -
severity=ERROR
( Response code: 500 ) Cloud Run intrinsically cannot manage the rate of traffic.
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Beheben Sie die Ursachen, die zu Skalierungsfehlern führen können, z. B.:
- Ein starker Anstieg des Traffics.
- Lange Kaltstartzeit.
- Lange Verarbeitungszeit für Anfragen.
- Hohe Fehlerrate im Quellcode.
- Das maximale Instanzlimit wird erreicht. Das System kann daher nicht weiter skaliert werden.
- Temporäre Faktoren, die dem Cloud Run-Dienst zugeordnet sind.
Weitere Informationen zum Beheben von Skalierungsproblemen und zur Leistungsoptimierung finden Sie unter Allgemeine Entwicklungstipps.
Lassen Sie bei HTTP-Trigger-basierten Diensten oder Funktionen den Client exponentiellen Backoff und Wiederholungen für Anfragen implementieren, die nicht verworfen werden dürfen. Wenn Sie Dienste über Workflows auslösen, können Sie dafür die
try/retry
-Syntax verwenden.Für Hintergrund- oder ereignisgesteuerte Dienste oder Funktionen unterstützt Cloud Run mindestens einmalige Übermittlung. Auch wenn die Wiederholung nicht explizit aktiviert wird, wird das Ereignis von Cloud Run automatisch noch einmal gesendet und die Ausführung wird wiederholt. Weitere Informationen finden Sie unter Ereignisgesteuerte Funktionen wiederholen.
Bei Problemen mit Kaltstarts können Sie Mindestinstanzen konfigurieren, um die Anzahl der Kaltstarts zu reduzieren. Dies hat jedoch höhere Abrechnungskosten zur Folge.
Wenden Sie sich an den Support, wenn die Ursache des Problems eine Periode erhöhter transienter Fehler ist, die ausschließlich Cloud Run zugeschrieben werden, oder wenn Sie Unterstützung bei Ihrem Problem benötigen.
Von Google entfernte Identitätstokensignatur
Der folgende Fehler tritt während der Entwicklungs- und Testphasen auf:
SIGNATURE_REMOVED_BY_GOOGLE
Dieser Fehler kann in den folgenden Szenarien auftreten:
Der Nutzer meldet sich über die Google Cloud CLI oder Cloud Shell an.
Der Nutzer generiert ein ID-Token mit
gcloud
-Befehlen.Der Nutzer versucht, das ID-Token zu verwenden, um einen nicht öffentlichen Cloud Run-Dienst aufzurufen.
Das ist das erwartete Standardverhalten. Google entfernt die Tokensignatur aus Sicherheitsgründen, um zu verhindern, dass ein nicht öffentlicher Cloud Run-Dienst ID-Tokens wiedergibt, die auf diese Weise generiert wurden.
Rufen Sie zur Behebung dieses Problems Ihren privaten Dienst mit einem neuen ID-Token auf. Weitere Informationen finden Sie unter Privaten Dienst testen.
OpenBLAS-Warnung in Logs
Wenn Sie OpenBLAS-basierte Bibliotheken wie NumPy mit der Ausführungsumgebung der ersten Generation verwenden, wird in Ihren Logs möglicherweise die folgende Warnung angezeigt:
OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k`
Die OpenBLAS-Warnung wird angezeigt, weil die von der Ausführungsumgebung der ersten Generation verwendete Container-Sandbox keine Hardwarefunktionen auf niedriger Ebene zur Verfügung stellt. Diese Warnung hat keine Auswirkungen auf Ihren Dienst. Wenn Sie OpenBLAS-Warnungen in Logeinträgen vermeiden möchten, wechseln Sie zur Ausführungsumgebung der zweiten Generation.
Spark scheitert beim Abrufen der IP-Adresse des Rechners, an den gebunden werden soll
Wenn Spark beim Abrufen der IP-Adresse des Bindungscomputers fehlschlägt, tritt einer der folgenden Fehler auf:
assertion failed: Expected hostname (not IP) but got <IPv6 ADDRESS>
assertion failed: Expected hostname or IPv6 IP enclosed in [] but got <IPv6 ADDRESS>
Um dieses Problem zu beheben, legen Sie die Umgebungsvariable SPARK_LOCAL_IP
in Ihrem Dockerfile auf 127.0.0.1
fest, z. B. ENV SPARK_LOCAL_IP="127.0.0.1"
. Wenn Sie die Umgebungsvariable SPARK_LOCAL_IP
nicht festlegen, wird standardmäßig ihr IPv6-Pendant anstelle von localhost verwendet. Außerdem wird die Umgebungsvariable, die als RUN export SPARK_LOCAL_IP="127.0.0.1"
festgelegt ist, von Spark nicht erkannt.
Zugriff auf Dateien über NFS nicht möglich
Fehler | Empfohlene Lösung |
---|---|
mount.nfs: Protocol not supported |
In einigen Basis-Images wie debian und adoptopenjdk/openjdk11 fehlt die Abhängigkeit nfs-kernel-server. |
mount.nfs: Connection timed out |
Wenn die Verbindung überschreitet, müssen Sie die richtige IP-Adresse der Filestore-Instanz angeben. |
mount.nfs: access denied by server while mounting IP_ADDRESS:/FILESHARE |
Wenn der Zugriff vom Server verweigert wurde, prüfen Sie, ob der Name der Dateifreigabe korrekt ist. |
Zugriff auf Dateien über Cloud Storage FUSE nicht möglich
Weitere Informationen finden Sie in der Anleitung zur Fehlerbehebung für Cloud Storage FUSE.
Hohe Latenz bei niedriger CPU-Auslastung
Bei Ihrem Dienst kann es zu hohen Anfragelatenzen kommen oder er kann unter Last nicht skaliert werden, obwohl die durchschnittliche CPU-Auslastung in Cloud Monitoring deutlich unter dem typischen Skalierungsziel von 60% liegt.
Mögliche Ursache:
Das kann passieren, wenn Ihre Anwendung für CPU-intensive Aufgaben Single-Threaded ist, aber auf einer Instanz mit mehreren vCPUs bereitgestellt wird. Ihre Anwendung kann einen vCPU-Kern maximal auslasten, während andere Kerne größtenteils im Leerlauf bleiben. Der Cloud Run-Autoscaler verwendet die durchschnittliche CPU-Auslastung aller vCPUs. Dieser Durchschnitt kann in diesen Fällen niedrig sein, was ein CPU-basiertes Skalieren verhindert.
Lösungen:
- Bei Single-Threaded-Anwendungen:
- Konfigurieren Sie Ihren Dienst mit 1 vCPU, wenn seine Speicheranforderungen erfüllt werden können (siehe Speicherlimits und CPU-Mindestwerte). So spiegeln die Messwerte zur CPU-Auslastung die Last genau wider.
- Wenn aufgrund eines hohen Arbeitsspeicherbedarfs, der die 1-vCPU-Grenzwerte überschreitet, mehrere vCPUs erforderlich sind, ist das CPU-basierte Autoscaling wahrscheinlich weniger effektiv. In diesem Szenario sollten Sie die Einstellung für die maximale Nebenläufigkeit senken, damit die Skalierung basierend auf dem Anfragendurchsatz früher erfolgt. Siehe Konfiguration der Parallelität.
- Konfigurationen mit mehreren vCPUs: Achten Sie darauf, dass Ihre Anwendung so konzipiert ist, dass alle zugewiesenen vCPUs effektiv genutzt werden (z. B. durch die Verwendung mehrerer Worker-Prozesse oder Threads).
Verbindungs- und Sicherheitsfehler
In diesem Abschnitt werden die häufigsten Verbindungs- und Sicherheitsfehler in Cloud Run sowie Methoden zur Fehlerbehebung beschrieben.
Client ist nicht ordnungsgemäß authentifiziert
Der folgende Fehler tritt während der Schaltung auf:
HTTP 401: The request was not authorized to invoke this service
So lösen Sie dieses Problem:
Wenn ein Dienstkonto Ihren Cloud Run-Dienst aufruft, legen Sie die Zielgruppenanforderung (
aud
) des von Google signierten ID-Tokens auf Folgendes fest:Wenn Sie
aud
auf die URL des empfangenden Dienstes im Formathttps://SERVICE.run.app
oderhttps://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION
festlegen, muss für Ihren Dienst eine Authentifizierung erforderlich sein. Rufen Sie Ihren Cloud Run-Dienst über die Cloud Run-URL oder über eine Load-Balancer-URL auf. Beispiele zum Senden authentifizierter Anfragen finden Sie unter Mit einer HTTPS-Anfrage aufrufen.Wenn Sie
aud
auf die Client-ID einer OAuth 2.0-Client-ID mit dem Typ Webanwendung im Formatnnn-xyz.apps.googleusercontent.com
festlegen, können Sie Ihren Cloud Run-Dienst über einen HTTPS-Load-Balancer, der durch IAP geschützt ist, aufrufen. Wir empfehlen diesen Ansatz für einen Application Load Balancer, der von mehreren Cloud Run-Diensten in verschiedenen Regionen unterstützt wird.Wenn Sie
aud
auf eine konfigurierte benutzerdefinierte Zielgruppe festlegen, verwenden Sie die genauen Werte. Wenn die benutzerdefinierte Zielgruppe beispielsweisehttps://service.example.com
ist, muss der Wert des Zielgruppenanspruchs ebenfallshttps://service.example.com
sein.
Achten Sie darauf, dass Ihre Anfragen einen
Authorization: Bearer ID_TOKEN
-Header oder einenX-Serverless-Authorization: Bearer ID_TOKEN
-Header für die benutzerdefinierte Autorisierung enthalten und dass das Token ein ID-Token und kein Zugriffs- oder Aktualisierungstoken ist. Ein401
-Fehler kann in den folgenden Szenarien aufgrund eines falschen Autorisierungsformats auftreten:Das Autorisierungstoken hat ein ungültiges Format.
Der Autorisierungsheader ist kein JSON Web Token (JWT) mit einer gültigen Signatur.
Der Autorisierungsheader enthält mehrere JWTs.
Die Anfrage enthält mehrere Autorisierungsheader.
Verwenden Sie das Tool jwt.io, um Anforderungen in einem JWT zu prüfen.
Wenn Sie ungültige Tokens erhalten, wenn Sie den Metadatenserver zum Abrufen von ID- und Zugriffstokens verwenden, um Anfragen beim Cloud Run-Dienst oder der Jobidentität mit einem HTTP-Proxy zu authentifizieren, um ausgehenden Traffic weiterzuleiten, fügen Sie die folgenden Hosts zu den HTTP-Proxy-Ausnahmen hinzu:
169.254.*
oder169.254.0.0/16
*.google.internal
Ein
401
-Fehler tritt häufig auf, wenn Cloud-Clientbibliotheken den Metadatenserver verwenden, um Standardanmeldedaten für Anwendungen abzurufen und REST- oder gRPC-Aufrufe zu authentifizieren. Wenn Sie die HTTP-Proxy-Ausnahmen nicht definieren, führt dies zu folgendem Verhalten:Wenn verschiedene Google Cloud Arbeitslasten einen Cloud Run-Dienst oder -Job und den HTTP-Proxy hosten, werden die Tokens vom Dienstkonto generiert, das der HTTP-Proxy-Arbeitslast zugewiesen ist, auch wenn die Cloud-Clientbibliotheken die Anmeldedaten abrufen. Die Tokens haben möglicherweise nicht die erforderlichen Berechtigungen, um die beabsichtigten Google Cloud API-Vorgänge auszuführen. Das liegt daran, dass das Dienstkonto die Tokens vom Metadatenserver der HTTP-Proxy-Arbeitslast abruft und nicht vom Cloud Run-Dienst oder -Job.
Wenn der HTTP-Proxy nicht in Google Cloudgehostet wird und Sie Metadatenserveranfragen über den Proxy weiterleiten, schlagen die Tokenanfragen fehl und die Vorgänge der Google Cloud APIs werden nicht authentifiziert.
Stellen Sie den Dienst noch einmal bereit, um öffentlichen Zugriff zuzulassen, wenn dies von Ihrer Organisation unterstützt wird. Dies ist zum Testen nützlich.
Der Client ist nicht berechtigt, den Dienst aufzurufen
Beim Aufrufen Ihres Dienstes tritt einer der folgenden Fehler auf:
HTTP 403: The request was not authenticated. Either allow public access or set the proper Authorization header
HTTP 403: Forbidden: Your client does not have permission to get URL from this server.
Ein 403
-Fehler kann auftreten, wenn dem IAM-Mitglied, das zum Generieren des Autorisierungstokens verwendet wurde, die Berechtigung run.routes.invoke
fehlt. Erteilen Sie dem Nutzer, der das Token generiert, diese Berechtigung.
Wenn in Cloud Logging ein Eintrag für den Fehler im Format resource.type = "cloud_run_revision"
vorhanden ist, führen Sie die folgenden Schritte aus, um den Fehler zu beheben:
Wenn Ihr Dienst für jeden Nutzer abrufbar sein soll, aktualisieren Sie die IAM-Einstellungen und machen Sie den Dienst öffentlich.
Wenn Ihr Dienst nur für bestimmte Identitäten aufrufbar sein soll, rufen Sie ihn mit dem richtigen Autorisierungstoken auf:
Wenn ein Entwickler oder ein Endnutzer Ihren Dienst aufruft, gewähren Sie die Berechtigung
run.routes.invoke
. Sie können diese Berechtigung über die Rollen „Cloud Run-Administrator“ (roles/run.admin
) und „Cloud Run-Aufrufer“ (roles/run.invoker
) bereitstellen.Wenn ein Dienstkonto Ihren Dienst aufruft, prüfen Sie, ob das Dienstkonto Mitglied des Cloud Run-Dienstes ist, und weisen Sie die Rolle „Cloud Run Invoker“ (
roles/run.invoker
) zu.Bei Aufrufen, bei denen ein Authentifizierungstoken fehlt, kann der Fehler
403
auftreten. Wenn Aufrufe mit einem gültigen Authentifizierungstoken weiterhin zum Fehler403
führen, erteilen Sie dem IAM-Mitglied, das das Token generiert, die Berechtigungrun.routes.invoke
.
Wenn Sie auf einen 403
-Fehler stoßen und den Logeintrag resource.type = "cloud_run_revision"
nicht finden, liegt das möglicherweise daran, dass VPC Service Controls einen Cloud Run-Dienst blockiert, der für eingehenden Traffic auf All
konfiguriert ist. Weitere Informationen zur Fehlerbehebung bei VPC Service Controls-Ablehnungen finden Sie unter 404-Fehler.
Fehler beim Zugriff auf den Dienst über einen Webbrowser
Das folgende Problem tritt auf, wenn Sie über einen Webbrowser auf einen Cloud Run-Dienst zugreifen:
403 Forbidden
Your client does not have permission to get URL from this server.
Wenn Sie einen Cloud Run-Dienst über einen Webbrowser aufrufen, sendet der Browser eine GET
-Anfrage an den Dienst. Die Anfrage enthält jedoch nicht das Autorisierungstoken des aufrufenden Nutzers. So beheben Sie das Problem:
Identity-Aware Proxy (IAP) mit Cloud Run verwenden Mit IAP können Sie eine zentrale Autorisierungsebene für Anwendungen einrichten, auf die über HTTPS zugegriffen wird. Mit IAP können Sie ein Zugriffssteuerungsmodell auf Anwendungsebene anstelle von Firewalls auf Netzwerkebene verwenden. Weitere Informationen zum Konfigurieren von Cloud Run mit IAP finden Sie unter Identity-Aware Proxy für Cloud Run aktivieren.
Als vorübergehende Problemumgehung können Sie über einen Webbrowser mit dem Cloud Run-Proxy in der Google Cloud CLI auf Ihren Dienst zugreifen. Führen Sie den folgenden Befehl aus, um einen Dienst lokal zu proxen:
gcloud run services proxy SERVICE --project PROJECT-ID
Cloud Run leitet den privaten Dienst per Proxy an
http://localhost:8080
weiter (oder an den mit--port
angegebenen Port), sodass eine Bereitstellung des Tokens des aktiven Kontos oder eines anderen von Ihnen angegebenen Tokens stattfindet. Dies ist die empfohlene Methode zum privaten Testen einer Website oder API in Ihrem Browser. Weitere Informationen finden Sie unter Private Dienste testen.Öffentlichen Zugriff auf Ihren Dienst zulassen Dies ist hilfreich für Tests oder wenn es sich bei Ihrem Dienst um eine öffentliche API oder Website handelt.
Verbindung wurde von einem anderen Computer zurückgesetzt
Einer der folgenden Fehler tritt auf, wenn ein Peer im Netzwerk die von der Anwendung hergestellte TCP-Verbindung unerwartet schließt:
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
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Wenn Sie versuchen, Hintergrundarbeit mit CPU-Drosselung durchzuführen, verwenden Sie die Einstellung instanzbasierte Abrechnung.
Achten Sie darauf, dass das Zeitlimits für ausgehende Anfragen eingehalten wird. Wenn Ihre Anwendung eine Verbindung im inaktiven Zustand hält, der über diesen Schwellenwert hinausgeht, muss das Gateway die Verbindung nutzen.
Standardmäßig ist die TCP-Socket-Option
keepalive
für Cloud Run deaktiviert. Es gibt keine direkte Möglichkeit, die Optionkeepalive
auf Dienstebene zu konfigurieren. Wenn Sie die Optionkeepalive
für jede Socketverbindung aktivieren möchten, geben Sie die erforderlichen Socketoptionen an, wenn Sie eine neue TCP-Socketverbindung öffnen. Das hängt von der Clientbibliothek ab, die Sie für diese Verbindung in Ihrer Anwendung verwenden.Gelegentlich werden ausgehende Verbindungen aufgrund von Aktualisierungen der Infrastruktur zurückgesetzt. Wenn Ihre Anwendung langlebige Verbindungen wiederverwendet, sollten Sie Ihre Anwendung so konfigurieren, dass Verbindungen wiederhergestellt werden, um eine Wiederverwendung einer inaktiven Verbindung zu vermeiden.
Wenn Sie einen HTTP-Proxy zum Weiterleiten Ihres Cloud Run-Dienstes oder des ausgehenden Traffics von Cloud Run-Jobs verwenden und der Proxy die maximale Verbindungsdauer erzwingt, kann der Proxy lang andauernde TCP-Verbindungen wie z. B. solche, die mithilfe von Verbindungs-Pooling aufgebaut wurden, stillschweigend abbrechen. Dies führt dazu, dass HTTP-Clients fehlschlagen, wenn sie eine bereits geschlossene Verbindung wiederverwenden. Wenn Sie ausgehenden Traffic über einen HTTP-Proxy weiterleiten möchten, müssen Sie die Verbindungsvalidierung, Wiederholungsversuche und exponentiellen Backoff implementieren. Konfigurieren Sie für Verbindungspools Maximalwerte für das Alter von Verbindungen, inaktive Verbindungen und das Zeitlimit bei Inaktivität von Verbindungen.
Zeitlimits für Verbindungen
Die folgenden Fehler treten auf, wenn eine Anwendung versucht, eine neue TCP-Verbindung zu einem Remote-Host herzustellen, und die Verbindung zu lange dauert:
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
So beheben Sie Probleme mit Zeitüberschreitungen bei Verbindungen:
Wenn Sie den gesamten ausgehenden Traffic über ein VPC-Netzwerk weiterleiten, entweder über VPC-Connectors oder ausgehenden Direct VPC-Traffic, gehen Sie so vor:
Definieren Sie alle erforderlichen Firewallregeln, um eingehenden Traffic für die VPC-Connectors zuzulassen.
VPC-Firewallregeln müssen eingehenden Traffic zulassen, damit der Traffic von den VPC-Connectors oder dem Subnetz für ausgehenden Direct-VPC-Traffic den Zielhost oder das Zielsubnetz erreichen kann.
Achten Sie darauf, dass Sie alle erforderlichen Routen haben, damit der Traffic korrekt zu den Zielhosts und zurück geleitet werden kann. Das ist wichtig, wenn Sie den ausgehenden Traffic über VPC-Netzwerk-Peering oder Hybrid Cloud-Verbindungen weiterleiten, da Pakete mehrere Netzwerke durchlaufen, bevor sie den Remote-Host erreichen.
Wenn Sie einen HTTP-Proxy zum Weiterleiten des gesamten ausgehenden Traffics Ihrer Cloud Run-Dienste oder -Jobs verwenden, müssen die Remotehosts über den Proxy erreichbar sein.
Traffic, der über einen HTTP-Proxy weitergeleitet wird, kann sich je nach Ressourcenauslastung des Proxys verzögern. Wenn Sie HTTP-Ausgangstraffic über einen Proxy weiterleiten, implementieren Sie Wiederholungsversuche, exponentielles Backoff oder Circuit Breakers.
HTTP-Proxy-Ausnahmen konfigurieren
Wenn Sie einen HTTP-Proxy zum Weiterleiten des ausgehenden Traffics von Cloud Run-Diensten oder Jobs verwenden, müssen Sie Ausnahmen für Cloud APIs und andere Hosts und Subnetze ohne Proxy hinzufügen, um Latenz, Verbindungszeitüberschreitungen, Verbindungszurücksetzungen und Authentifizierungsfehler zu verhindern.
Nicht über einen Proxy geleitete Hosts und Subnetze müssen mindestens Folgendes enthalten:
127.0.0.1
169.254.*
oder169.254.0.0/16
localhost
*.google.internal
*.googleapis.com
Optional können nicht über einen Proxy geleitete Hosts Folgendes umfassen:
*.appspot.com
*.run.app
*.cloudfunctions.net
*.gateway.dev
*.googleusercontent.com
*.pkg.dev
*.gcr.io
So legen Sie HTTP-Proxy-Ausnahmen für das Egress-Netzwerk fest:
- Umgebungsvariablen:
NO_PROXY
oderno_proxy
. Java Virtual Machine-Flag
http.nonProxyHosts
:Die Systemeigenschaft
https.nonProxyHosts
ist nicht definiert. Dieses Systemattribut gilt sowohl für HTTP als auch für HTTPS.Die System-Property
http.nonProxyHosts
unterstützt keine CIDR-Notation. Sie müssen Musterabgleichsausdrücke verwenden.
Fehlerhafte Antwort oder Problem mit Containerinstanzverbindung
Der folgende Fehler tritt auf, wenn ein Problem mit der Verbindung zu einer Containerinstanz vorliegt:
HTTP 503 The request failed because either the HTTP response was malformed or connection to the instance had an error.
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Prüfen Sie Cloud Logging auf die folgenden Fehler:
Fehler aufgrund fehlenden Speichers Wenn die Logs Fehlermeldungen in Bezug auf die Containerinstanzen enthalten, die Speicherlimits überschreiten, lesen Sie die Empfehlungen im Abschnitt Containerinstanzen überschreiten Speicherlimits.
Fehler bei der Aktivitätsprüfung mit dem folgenden Fehler in den Logs:
LIVENESS HTTP probe failed 1 time consecutively for container CONTAINER_NAME on port 8080. The instance has been shut down.
Wenn Ihre Instanz innerhalb des Zeitlimits nicht erfolgreich auf den Probe reagiert, führen Sie die folgenden Schritte aus:
Aktivieren Sie die Instrumentprotokollierung und das Tracing, um die Ursache der erhöhten Latenz zu ermitteln.
Erhöhen Sie das Zeitlimit für die Aktivitätsprüfung.
Wenn Anfragen mit dem Fehlercode
503
beendet werden, bevor die in Cloud Run festgelegte Zeitüberschreitung für Anfragen erreicht ist, müssen Sie möglicherweise die Zeitüberschreitungseinstellung für Anfragen für Ihr Sprach-Framework aktualisieren:Node.js-Entwickler müssen das Attribut
server.timeout
überserver.setTimeout
aktualisieren (verwenden Sieserver.setTimeout(0)
, um ein unbegrenztes Zeitlimit zu erreichen), je nach der Version, die Sie verwenden.Python-Entwickler müssen das Standardzeitlimit von Gunicorn (
[CRITICAL] WORKER TIMEOUT
) aktualisieren.
In einigen Fällen kann ein
503
-Fehlercode aufgrund eines nachgelagerten Netzwerkengpasses auftreten, z. B. bei Lasttests. Wenn Ihr Dienst beispielsweise Traffic über einen Connector für serverlosen VPC-Zugriff weiterleitet, prüfen Sie, ob der Connector seinen Durchsatzschwellenwert überschritten hat. Gehen Sie dazu so vor:Öffnen Sie den serverlosen VPC-Zugriff in der Google Cloud Console:
Prüfen Sie, ob im Histogramm des Durchsatzdiagramms rote Balken zu sehen sind. Wenn ein roter Balken angezeigt wird, sollten Sie die maximale Anzahl der von Ihrem Connector verwendeten Instanzen oder Instanztypen erhöhen Alternativ können Sie den über einen Connector für serverlosen VPC-Zugriff gesendeten Traffic komprimieren.
Wenn eine Containerinstanz mehr als 800 Anfragen pro Sekunde empfängt, können die verfügbaren TCP-Sockets aufgebraucht sein. Um dieses Problem zu beheben, aktivieren Sie HTTP/2 für Ihren Dienst und nehmen Sie die erforderlichen Änderungen an Ihrem Dienst vor, um HTTP/2 zu unterstützen.
Gateway-Zeitüberschreitungsfehler
Der folgende Fehler tritt auf, wenn Ihr Dienst innerhalb eines bestimmten Zeitraums keine Antwort zurückgibt und die Anfrage endet:
HTTP 504 The request has been terminated because it has reached the maximum request timeout.
Weitere Informationen zu diesem Fehler finden Sie im Containerlaufzeitvertrag.
Gehen Sie so vor, um das Problem zu beheben:
Wenn Ihr Dienst lange Anfragen verarbeitet, erhöhen Sie das Zeitlimit für Anfragen.
Instrumentieren Sie das Logging und Tracing, um zu verstehen, wo Ihre Anwendung Zeit aufnimmt, bevor Sie das konfigurierte Anfragezeitlimit überschreiten.
Ausgehende Verbindungen werden aufgrund von Aktualisierungen der Infrastruktur gelegentlich zurückgesetzt. Wenn Ihre Anwendung langlebige Verbindungen wiederverwendet, sollten Sie Ihre Anwendung so konfigurieren, dass Verbindungen wiederhergestellt werden, um eine Wiederverwendung einer inaktiven Verbindung zu vermeiden.
Abhängig von der Logik Ihrer Anwendung oder der Fehlerbehandlung kann ein
504
-Fehler ein Signal dafür sein, dass Ihre Anwendung versucht, eine tote Verbindung wiederzuverwenden, und die Anfrage wird blockiert, bis das konfigurierte Anfragezeitlimit erreicht ist. Verwenden Sie eine Aktivitätsprüfung, um eine Instanz zu beenden, die persistente Fehler zurückgibt.Aufgrund von Speicherfehlern, die im Code der Anwendung auftreten (z. B.
java.lang.OutOfMemoryError
), wird eine Containerinstanz nicht unbedingt beendet. Wenn die Speichernutzung das Containerspeicherlimit nicht überschreitet, wird die Instanz von Cloud Run nicht beendet. Je nachdem, wie die App aufgrund von Speicherfehlern auf Anwendungsebene umgeht, können Anfragen hängen bleiben, bis sie das konfigurierte Zeitlimit für Anfragen überschreiten.So beenden Sie die Containerinstanz:
Konfigurieren Sie das Speicherlimit auf Anwendungsebene höher als Ihr Containerspeicherlimit.
Mit einer Aktivitätsprüfung können Sie eine Instanz beenden, die persistente Fehler zurückgibt.
Benutzerdefinierte Domain hängt bei der Bereitstellung des Zertifikats fest
Einer der folgenden Fehler tritt auf, wenn Sie eine benutzerdefinierte Domain zuordnen:
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.
So lösen Sie dieses Problem:
Warten Sie mindestens 24 Stunden. Das Bereitstellen des SSL-Zertifikats dauert in der Regel etwa 15 Minuten, kann jedoch bis zu 24 Stunden in Anspruch nehmen.
Prüfen Sie mit dem Dig-Tool der Google Admin Toolbox, ob Sie Ihre DNS-Einträge bei Ihrem Domain-Registrator ordnungsgemäß aktualisiert haben. Die DNS-Einträge in Ihrem Domain-Registrator müssen mit den Daten übereinstimmen, für die Sie dieGoogle Cloud -Konsole zum Hinzufügen auffordert.
Bestätigen Sie das Stammverzeichnis der Domain unter Ihrem Konto mit einer der folgenden Methoden:
Folgen Sie der Anleitung zum Hinzufügen bestätigter Domaininhaber und prüfen Sie, ob Ihr Konto als bestätigter Inhaber aufgeführt ist.
Verwenden Sie die Search Console.
Bestätigen Sie, dass das Zertifikat für die Domain nicht abgelaufen ist. Verwenden Sie den folgenden Befehl, um die Ablaufgrenzen zu ermitteln:
echo | openssl s_client -servername 'ROOT_DOMAIN' -connect 'ROOT_DOMAIN:443' 2>/dev/null | openssl x509 -startdate -enddate -noout
Die Verbindungstrennung des Clients wird nicht an Cloud Run weitergegeben
Wenn Sie HTTP/1.1 in Cloud Run verwenden, werden Ereignisse zur Verbindungstrennung des Clients nicht an den Cloud Run-Container weitergegeben.
Verwenden Sie zur Behebung dieses Problems Websockets oder HTTP/2.0, die die Trennung von Clients propagieren.