Sie können Ihren App Engine-Dienst aktivieren, um Traffic an ein gemeinsam genutztes 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 gemeinsam genutzten Subnetz platzieren.
Hinweis
Im Abschnitt IP-Adresszuweisung finden Sie eine Anleitung zum Zuweisen von IP-Adressen aus Ihrem Subnetz.
Beschränkungen
Verbrauch von IP-Adressen: Die IP-Adressnutzung Ihres Dienstes skaliert direkt mit der Anzahl der ausgeführten Instanzen. Ihre Skalierungsfähigkeit wird durch die Anzahl der verfügbaren IP-Adressen im ausgewählten Subnetz begrenzt.
Wartungsereignisse: Bei Wartungsereignissen der Netzwerkinfrastruktur kann es zu kurzen Verbindungsunterbrechungen 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 kann ein Kaltstart bis zu einer Minute dauern.
Direct VPC Ingress: App Engine unterstützt Direct VPC Ingress nicht.
Anzahl der Instanzen: Sie können nur bis zu 100 Instanzen pro App Engine-Version für die Verwendung von Direct VPC-Ausgang konfigurieren.
VPC-Flusslogs: Die Version Ihres App Engine-Dienstes wird in den Logeinträgen nicht angezeigt. Der Dienstname wird im Feld
AppEngineServiceDetailsangezeigt.
IAM-Berechtigungen einrichten
Bevor App Engine in einem Dienstprojekt mit freigegebene VPC auf ein freigegebene VPC-Netzwerk zugreifen kann, müssen Sie prüfen, ob der App Engine-Dienst-Agent ausreichende Berechtigungen zur Verwendung des Subnetzes hat.
App Engine-Dienst-Agent-Rolle: 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 Network User (
roles/compute.networkUser) im freigegebene VPC-Hostprojekt. Für Subnetze mit externen IPv6-Adressen ist auch die Rolle Compute Public IP Admin (roles/compute.publicIpAdmin) erforderlich.Führen Sie beispielsweise den folgenden Befehl aus, um die Rolle „Compute Network User“ 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-Hostprojekts.
- SERVICE_PROJECT_NUMBER: Die Projektnummer des freigegebene VPC-Dienstes, in dem Sie den App Engine-Dienst bereitstellen.
Compute Network Viewer (
compute.networkViewer) für das Hostprojekt mit freigegebene VPC und die Rolle Compute Network User (compute.networkUser) für das Subnetz der freigegebene VPC. Für Subnetze mit externen IPv6-Adressen ist auch die Rolle Compute Public IP Admin (roles/compute.publicIpAdmin) erforderlich.Beispiel: Führen Sie 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-Dienstes, in dem Sie den App Engine-Dienst bereitstellen.
- HOST_PROJECT_ID: Die ID Ihres freigegebene VPC-Hostprojekts.
Benutzerdefinierte Berechtigungen: Für eine detaillierte Kontrolle erteilen Sie dem App Engine-Dienst-Agent die folgenden zusätzlichen Berechtigungen für das Projekt:
compute.networks.getim freigegebene VPC-Hostprojektcompute.subnetworks.getfür das Hostprojekt oder das spezifische Subnetzcompute.subnetworks.usefür das Hostprojekt oder das spezifische Subnetzcompute.addresses.getim Dienstprojekt mit freigegebene VPCcompute.addresses.listim Dienstprojekt mit freigegebene VPCcompute.addresses.createim Dienstprojekt mit freigegebene VPCcompute.addresses.deleteim Dienstprojekt mit freigegebene VPCcompute.addresses.createInternalim Dienstprojekt mit freigegebene VPCcompute.addresses.deleteInternalim Dienstprojekt mit freigegebene VPCcompute.regionOperations.getim Dienstprojekt mit freigegebene VPC
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
Damit bei einem Trafficanstieg schnell eine vertikale Skalierung möglich ist, reserviert App Engine IP-Adressen in Blöcken von 16 Adressen (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-Zuweisung 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 ihre IP-Adressen bis zu 20 Minuten lang bei. Reservieren Sie insgesamt mindestens das Doppelte der Anzahl der IP-Adressen plus 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 version 1-IP-Adressen für bis zu 20 Minuten nach dem Herunterskalieren bei. Während des 20-minütigen Aufbewahrungszeitraums müssen Sie mindestens 400 IP-Adressen ((100 + 100) * 2) reservieren.
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 Serverloser 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 gemeinsam genutzten Subnetz die voll qualifizierten Ressourcennamen für das freigegebene VPC-Netzwerk und das Subnetz in Ihrer Datei app.yaml an.
Aktualisieren Sie die Datei
app.yaml, um den Abschnittvpc_accessaufzunehmen: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 des 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 zugeordnet werden sollen und in Firewallregeln und Routingrichtlinien verwendet werden.
Optional: EGRESS_SETTING: Steuert, wie ausgehender Traffic weitergeleitet wird. 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 den Dienst mit dem folgenden Befehl 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 den 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, sowie Anleitungen zur Behebung dieser Fehler.
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 zu App Engine 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. Zu den häufigsten Problemen zählen folgende:
Falsche VPC-Netzwerkmetadaten, z. B. ein falsch geschriebener Netzwerk- oder Subnetzname in Ihrer
app.yaml-Datei. Sehen Sie sich die VPC-Netzwerkkonfiguration in Ihrerapp.yaml-Datei an, um mögliche Fehler zu beheben.Unzureichende IAM-Berechtigungen. Achten Sie darauf, dass Sie Ihrem Dienstkonto für die Bereitstellung die erforderlichen Berechtigungen erteilen. Wenn bei der Bereitstellung Berechtigungsfehler auftreten, weisen Sie dem Dienstkonto die folgenden zusätzlichen Rollen zu:
- 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 den 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 das Subnetz des VPC-Netzwerk keine IPv4-Adressen mehr hat, kann App Engine keine weiteren Dienstinstanzen starten.
Um dieses Problem zu beheben, sollten Sie zu einem Subnetzwerk 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 Sie den folgenden Befehl über die Google Cloud CLI aus:
gcloud compute addresses list