Ausgehender Direct VPC-Traffic mit einem freigegebenen VPC-Netzwerk

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.get für das freigegebene VPC-Hostprojekt
    • compute.subnetworks.get für das Hostprojekt oder das spezifische Subnetz
    • compute.subnetworks.use für das Hostprojekt oder das spezifische Subnetz
    • compute.addresses.get für das freigegebene VPC-Dienstprojekt
    • compute.addresses.list für das freigegebene VPC-Dienstprojekt
    • compute.addresses.create für das freigegebene VPC-Dienstprojekt
    • compute.addresses.delete für das freigegebene VPC-Dienstprojekt
    • compute.addresses.createInternal für das freigegebene VPC-Dienstprojekt
    • compute.addresses.deleteInternal für das freigegebene VPC-Dienstprojekt
    • compute.regionOperations.get fü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:

  • RFC 1918
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • RFC 6598
    • 100.64.0.0/10
  • Klasse E
    • 240.0.0.0/4

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.

  1. Aktualisieren Sie die Datei app.yaml und fügen Sie den Abschnitt vpc_access ein:

    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.
  2. 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:

  1. Entfernen Sie den Abschnitt vpc_access aus der Datei app.yaml.
  2. 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 Datei app.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:

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