Sie können Ihren App Engine-Dienst aktivieren, um Traffic an ein freigegebenes VPC-Netzwerk zu senden. Verwenden Sie dazu ausgehenden Direct VPC-Traffic; dabei ist kein Connector für Serverloser VPC-Zugriff erforderlich.
Auf dieser Seite wird beschrieben, wie Sie die IAM-Berechtigungen von App Engine konfigurieren, um das Subnetz des freigegebene VPC-Netzwerks zu verwenden. Darauf können Sie Ihren Dienst im freigegebenen Subnetz platzieren.
Hinweis
Im Abschnitt Zuweisung von IP-Adressen finden Sie eine Anleitung zum Zuweisen von IP-Adressen aus Ihrem Subnetz.
Beschränkungen
IP-Adressverbrauch: Die IP-Adressnutzung Ihres Dienstes skaliert direkt mit der Anzahl der ausgeführten Instanzen. Ihre Skalierungsfähigkeit ist durch die Anzahl der verfügbaren IP-Adressen im ausgewählten Subnetz begrenzt.
Wartungsereignisse: Bei Wartungsereignissen an der Netzwerkinfrastruktur kann es zu kurzen Verbindungs unterbrechungen kommen. Wir empfehlen die Verwendung von Clientbibliotheken, bei denen gelegentlich Verbindungen zurückgesetzt werden können ohne dass es Probleme gibt.
Kaltstarts: Die anfänglichen Kaltstartzeiten hängen von der Region und dem jeweiligen Anwendungsfall ab. In seltenen Fällen können Kaltstarts bis zu einer Minute dauern.
Eingehender Direct VPC-Traffic: App Engine unterstützt keinen eingehenden Direct VPC-Traffic.
Anzahl der Instanzen: Sie können nur bis zu 100 Instanzen pro App Engine-Version für die Verwendung von ausgehendem Direct VPC-Traffic konfigurieren.
IAM-Berechtigungen einrichten
Bevor App Engine in einem Dienstprojekt mit freigegebene VPC auf ein VPC-Netzwerk mit gemeinsam genutzter VPC zugreifen kann, müssen Sie prüfen, ob der App Engine-Dienst-Agent ausreichende Berechtigungen zur Verwendung des Subnetzes hat.
Rolle „App Engine-Dienst-Agent“: Um auf das freigegebene VPC-Netzwerk zuzugreifen, müssen Sie dem App Engine-Dienst-Agent ausreichende Berechtigungen erteilen. Dazu fügen Sie eine der folgenden Rollen hinzu:
Compute-Netzwerknutzer (
roles/compute.networkUser) für das freigegebene VPC-Hostprojekt. Für Subnetze mit externem IPv6 ist auch die Rolle „Compute Public IP Admin (roles/compute.publicIpAdmin)“ erforderlich.Führen Sie beispielsweise folgenden Befehl aus, um die Rolle „Compute-Netzwerknutzer“ zuzuweisen:
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
Ersetzen Sie Folgendes:
- HOST_PROJECT_ID: Die ID Ihres freigegebene VPC-Host-Projekts.
- SERVICE_PROJECT_NUMBER: die Projektnummer des freigegebene VPC-Dienstprojekts, in dem Sie Ihren App Engine-Dienst bereitstellen.
Compute Network Viewer (
compute.networkViewer) für das freigegebene VPC-Hostprojekt und die Rolle „Compute Network User“ (compute.networkUser) für das freigegebene VPC-Subnetz. Für Subnetze mit externem IPv6 ist auch die Rolle „Compute Public IP Admin“ (roles/compute.publicIpAdmin) erforderlich.Führen Sie beispielsweise folgenden Befehl aus, um die Rolle „Compute-Netzwerknutzer“ im Subnetz zuzuweisen:
gcloud compute networks subnets add-iam-policy-binding SUBNET_NAME \ --region REGION \ --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \ --role "roles/compute.networkUser" \ --project HOST_PROJECT_ID
Ersetzen Sie Folgendes:
- SUBNET_NAME: Der voll qualifizierte Ressourcenname des Subnetzes in dem Sie Ihre App Engine-Dienste ausführen möchten.
- REGION: Die Region für Ihren App Engine-Dienst, die der Region Ihres Subnetzes entsprechen muss.
- SERVICE_PROJECT_NUMBER: die Projektnummer des freigegebene VPC-Dienstprojekts, in dem Sie Ihren App Engine-Dienst bereitstellen.
- HOST_PROJECT_ID: Die ID Ihres freigegebene VPC-Host-Projekts.
Benutzerdefinierte Berechtigungen: Für eine detailliertere Kontrolle erteilen Sie dem App Engine Dienst-Agent die folgenden zusätzlichen Berechtigungen für das Projekt:
compute.networks.getfür das freigegebene VPC-Hostprojektcompute.subnetworks.getfür das Hostprojekt oder das spezifische Subnetzcompute.subnetworks.usefür das Hostprojekt oder das spezifische Subnetzcompute.addresses.getfür das freigegebene VPC-Dienstprojektcompute.addresses.listfür das freigegebene VPC-Dienstprojektcompute.addresses.createfür das freigegebene VPC-Dienstprojektcompute.addresses.deletefür das freigegebene VPC-Dienstprojektcompute.addresses.createInternalfür das freigegebene VPC-Dienstprojektcompute.addresses.deleteInternalfür das freigegebene VPC-Dienstprojektcompute.regionOperations.getfür das freigegebene VPC-Dienstprojekt
Zuweisung von IP-Adressen
Wenn Sie Ihren App Engine-Dienst in einem VPC-Netzwerk platzieren möchten, geben Sie entweder ein VPC-Netzwerk oder ein Subnetz oder beides an. Wenn Sie nur ein Netzwerk angeben, hat das Subnetz denselben Namen wie das Netzwerk. App Engine weist IP-Adressen aus Ihrem Subnetz zu.
IP-Adressen sind sitzungsspezifisch. Erstellen Sie also keine Richtlinien, die auf einzelnen IP-Adressen basieren. Wenn Sie eine Richtlinie anhand von IP-Adressen erstellen müssen, z. B. in Firewallregeln, müssen Sie den IP-Adressbereich des gesamten Subnetzes verwenden.
Wenn Sie das von Ihrem Dienst verwendete Netzwerk oder Subnetz ändern möchten, stellen Sie eine neue Version bereit, die die neuen Netzwerk- und Subnetzwerte verwendet.
Hoch- und Herunterskalieren
Für eine schnellere Aufskalierung bei einem Trafficanstieg reserviert App Engine IP-Adressen in Blöcken von 16 (28-Subnetzmaske).
Damit genügend IPv4-Adressen für die Verwendung in App Engine verfügbar sind, muss der IPv4-Adressbereich Ihres Subnetzes /26 oder größer sein.
Für eine effiziente IP-Zuordnung und einfachere Verwaltung platzieren Sie mehrere Ressourcen im selben Subnetz. Wenn Ihr IPv4-Adressbereich begrenzt ist, finden Sie weitere Optionen unter Unterstützte IPv4-Bereiche.
Wenn Sie das Subnetz löschen möchten, müssen Sie zuerst Ihren App Engine-Dienst löschen oder noch einmal bereitstellen, um das Subnetz nicht mehr zu verwenden. Warten Sie dann 1–2 Stunden.
IP-Adressverbrauch für Dienste
Im stabilen Zustand verwendet App Engine doppelt so viele IP-Adressen wie die Anzahl der Instanzen. Wenn eine Version herunterskaliert wird, behält App Engine seine IP-Adressen bis zu 20 Minuten lang bei. Reservieren Sie insgesamt mindestens die doppelte Anzahl an IP-Adressen sowie einen Puffer für Versionsupdates.
Wenn Sie beispielsweise die Versionen so aktualisieren, dass version 1 von 100 Instanzen auf null skaliert wird, während version 2 von null auf 100 skaliert wird, behält App Engine die IP-Adressen von version 1 bis zu 20 Minuten nach dem Herunterskalieren bei. Während des 20-minütigen Aufbewahrungszeitraums müssen Sie mindestens 400 IP-Adressen reservieren ((100 + 100) * 2).
Unterstützte IPv4-Bereiche
App Engine unterstützt die folgenden IPv4-Bereiche für Ihr Subnetz:
App Engine-Dienst bereitstellen
Durch ausgehenden Direct VPC-Traffic kann Ihr App Engine-Dienst Traffic ohne Connector für serverlosen VPC-Zugriff an ein freigegebene VPC-Netzwerk senden. Sie können einer bestimmten Version Ihres App Engine-Dienstes Netzwerk-Tags zuweisen, um eine detailliertere Netzwerksicherheit zu erhalten, z. B. durch Anwenden von VPC-Firewallregeln.
Geben Sie zum Platzieren Ihres Dienstes im freigegebenen Subnetz die voll qualifizierten Ressourcennamen für das freigegebene VPC-Netzwerk und das Subnetz in der Datei app.yaml an.
Aktualisieren Sie die Datei
app.yamlund fügen Sie den Abschnittvpc_accessein:vpc_access: network_interface: network: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK subnet: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME tags: - NETWORK_TAGS vpc_egress: EGRESS_SETTING
Ersetzen Sie Folgendes:
- HOST_PROJECT_ID: Die ID Ihres freigegebene VPC-Projekts.
- VPC_NETWORK: Der Name Ihres freigegebene VPC-Netzwerks.
- REGION: Die Region für Ihren App Engine-Dienst, die der Region Ihres Subnetzes entsprechen muss.
- SUBNET_NAME: Der voll qualifizierte Ressourcenname Ihres Subnetzes.
- Optional: NETWORK_TAGS: Eine Liste von Netzwerk-Tags, die den Instanzen Ihres App Engine-Dienstes zugewiesen werden sollen und in Firewallregeln und Routingrichtlinien verwendet werden.
Optional: EGRESS_SETTING: Steuert die Weiterleitung von ausgehendem Traffic. Dieses Feld unterstützt die folgenden Konfigurationseinstellungen:
all-traffic: Sendet den gesamten ausgehenden Traffic über das freigegebene VPC-Netzwerk.private-ranges-only(Standard): Sendet nur Traffic an interne Adressen über das freigegebene VPC-Netzwerk.
Stellen Sie Ihren Dienst durch Ausführen des folgenden Befehls bereit:
gcloud beta app deploy
Dienst trennen
So entfernen Sie Ihren Dienst aus dem freigegebene VPC-Netzwerk:
- Entfernen Sie den Abschnitt
vpc_accessaus der Dateiapp.yaml. Stellen Sie Ihren Dienst neu bereit:
gcloud beta app deploy
Fehlerbehebung
In diesem Abschnitt werden häufige Fehler beschrieben, die bei der Verwendung von ausgehendem Direct VPC-Traffic mit einem freigegebene VPC-Netzwerk auftreten können, und es wird eine Anleitung zur Behebung dieser Fehler gegeben.
Subnetz kann nicht gelöscht werden
Bevor Sie ein Subnetz löschen müssen Sie zuerst alle Ressourcen löschen, die es verwenden. Wenn App Engine ein Subnetz verwendet, müssen Sie die Verbindung trennen oder es in ein anderes Subnetz verschieben, bevor Sie das Subnetz löschen.
Nachdem Sie Ihre App Engine-Ressourcen gelöscht oder verschoben haben, müssen Sie ein bis zwei Stunden warten, bis App Engine die IP-Adressen freigegeben hat und Sie das Subnetz löschen können.
Bereitstellungsfehler
Wenn die Bereitstellung fehlschlägt, werden in der Google Cloud CLI Fehlermeldungen angezeigt, die die Ursache angeben. Beispiele für häufige Probleme:
Falsche VPC-Netzwerkmetadaten, z. B. ein falsch geschriebener Netzwerk- oder Subnetzname in der Datei
app.yaml. Prüfen Sie die VPC-Netzwerkkonfiguration in der Dateiapp.yaml, um mögliche Fehler zu beheben.Unzureichende IAM-Berechtigungen. Achten Sie darauf, dass Sie die erforderlichen Berechtigungen für Ihr Bereitstellungsdienstkonto gewähren. Wenn bei der Bereitstellung Berechtigungsfehler auftreten, gewähren Sie dem Dienstkonto die folgenden zusätzlichen Rollen:
- Cloud Build-Dienstkonto (
roles/cloudbuild.builds.builder) - Ersteller von Dienstkonto-Token (
roles/iam.serviceAccountTokenCreator)
- Cloud Build-Dienstkonto (
Freigegebene VPC-Netzwerk kann nicht getrennt werden
Wenn Sie das freigegebene VPC-Netzwerk im Hostprojekt trennen möchten, führen Sie die Schritte zum Aufheben der Bereitstellung einer gemeinsam genutzten VPC aus und trennen auch die App Engine-Dienste aus dem freigegebene VPC-Netzwerk.
Führen Sie folgenden Befehl aus, um zu sehen, welche App Engine-Ressourcen das freigegebene VPC-Netzwerk verwenden:
gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
Ersetzen Sie HOST_PROJECT_ID durch die ID Ihres freigegebene VPC-Hostprojekts.
Direct VPC-Subnetz für ausgehenden Traffic hat keine IPv4-Adressen mehr
Wenn im Subnetz des VPC-Netzwerk keine IPv4-Adressen mehr verfügbar sind, kann App Engine keine weiteren Dienstinstanzen starten.
Um dieses Problem zu beheben, können Sie zu einem Subnetz mit mehr verfügbaren IP-Adressen wechseln oder den Subnetzbereich erweitern.
Zugewiesene IP-Adressen anzeigen
Um zu sehen, welche IP-Adressen App Engine zugewiesen hat, rufen Sie in der Google Cloud Console die Seite „IP-Adressen“ auf oder führen folgenden Befehl über die Google Cloud CLI aus:
gcloud compute addresses list