Benutzerdefinierte App Engine-Domain zu Cloud Load Balancing migrieren

Regions-ID

REGION_ID ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Bei Anwendungen, die nach Februar 2020 erstellt wurden, ist REGION_ID.r in den App Engine-URLs enthalten. Bei Anwendungen, die vor diesem Datum erstellt wurden, ist die Regions-ID in der URL optional.

Hier finden Sie weitere Informationen zu Regions-IDs.

In diesem Leitfaden wird beschrieben, wie Sie mit Cloud Load Balancing einen neuen öffentlichen Endpunkt für Ihre App Engine-Anwendung einrichten.

Mit Cloud Load Balancing konfigurieren Sie Ihren benutzerdefinierten Domainendpunkt als Frontend-Dienst und die App Engine-Anwendung als Backend-Dienst. Dazu verwenden Sie eine serverlose Netzwerk-Endpunktgruppe (NEG). Der Traffic zum Endpunkt des Cloud Load Balancing-Frontend-Dienstes wird wie zuvor weitergeleitet, einschließlich aller Routingregeln, die Sie in der Datei dispatch.yaml Ihrer Anwendung definieren.

Das folgende Diagramm beschreibt die Änderungen an Ihrer Anwendung:

Verwenden Sie eine benutzerdefinierte App Engine-Domain und verschieben Sie eingehende Anfragen an einen Cloud Load Balancing-Frontend-Dienst, der Anfragen an den Backend-App Engine-Dienst verteilt.

Durch die Migration nach Cloud Load Balancing können Sie den Umgang mit Traffic bei Ihrer Domain erheblich flexibler gestalten. Sie können beispielsweise statische Inhalte aus Cloud Storage bereitstellen oder Dienste hinzufügen, die auf anderen Computing-Plattformen wie Cloud und Google Kubernetes Engine ausgeführt werden.

Sie erhalten außerdem Zugriff auf wichtige Google Cloud-Funktionen, die in App Engine nicht verfügbar sind. Dazu gehören:

  • Google Cloud Armor für mehr Sicherheit mit erweitertem DDoS-Schutz, IP- und standortbasierten Zugriffssteuerungen, Web Application Firewall-Regeln und mehr
  • Cloud CDN zur Übermittlung von im Cache gespeicherten Inhalten
  • SSL-Richtlinien zum Verwalten der SSL-Features und -TLS-Versionen, die Ihre Anwendung akzeptiert

Dieser Leitfaden umfasst die Einrichtungsanleitung zum Verschieben eingehender Anfragen von Ihrem App Engine-Dienst mit einer benutzerdefinierten Domain zu einem Frontend-Dienst von Cloud Load Balancing:

  1. Prüfen, ob Sie die erforderlichen Berechtigungen haben
  2. Von Google verwaltetes Zertifikat erstellen
  3. Cloud Load Balancing konfigurieren
  4. Load-Balancer testen
  5. Domain mit dem Load-Balancer verbinden
  6. Benutzerdefinierte Domainzuordnung in App Engine löschen
  7. Steuerelement für eingehenden Traffic einrichten, um nur den Zugriff über Cloud Load Balancing zuzulassen

Hinweis

Sie haben eine App Engine-Anwendung mit einer benutzerdefinierten Domain, die in den App Engine-Einstellungen konfiguriert ist.

Berechtigungen konfigurieren

Um dieser Anleitung zu folgen, müssen Sie in einem Projekt ein von Google verwaltetes Zertifikat, eine serverlose NEG und einen externen HTTP(S)-Load-Balancer erstellen. Sie sollten entweder Inhaber oder Bearbeiter des Projekts sein oder die folgenden IAM-Rollen haben:

Aufgabe Erforderliche Rolle
Von Google verwaltetes SSL-Zertifikat mit Zertifikatmanager erstellen Zertifikatmanager-Inhaber oder Zertifikatmanager-Bearbeiter und Compute-Load-Balancer-Administrator
DNS-Einträge für die benutzerdefinierte Domain aktualisieren Cloud DNS-Administrator, wenn Cloud DNS als DNS-Lösung verwendet wird.

Wenn Sie einen anderen DNS-Anbieter verwenden, benötigen Sie Berechtigungen zum Hinzufügen und Aktualisieren der DNS-Einträge für die benutzerdefinierte Domain.
Load-Balancer und Netzwerkkomponenten erstellen Compute-Netzwerkadministrator
NEGs erstellen und ändern Compute-Instanzadministrator
SSL-Zertifikate erstellen und ändern Compute-Sicherheitsadministrator
Benutzerdefinierte Domains in den App Engine-Einstellungen löschen Rolle "App Engine-Administrator" oder eine Rolle mit der Berechtigung appengine.applications.update

Von Google verwaltetes SSL-Zertifikat erstellen

Mit einem von Google verwalteten SSL-Zertifikat, das in der Dokumentation auch als TLS-Zertifikat bezeichnet wird, kann Google Cloud Zertifikate automatisch abrufen, verwalten und verlängern. Für die Migration zum Cloud Load Balancing-Frontend ohne Ausfallzeiten für Ihren vorhandenen App Engine-Dienst müssen Sie den Zertifikatmanager verwenden, um die DNS-Autorisierung und das von Google verwaltete Zertifikat zu erstellen.

Beachten Sie, dass die Cloud Load Balancing-Dokumentation eine ähnliche Anleitung zum Erstellen eines von Google verwalteten SSL-Zertifikats enthält. In dieser Anleitung wird jedoch eine Autorisierung des Load-Balancers verwendet, wodurch bei Ihrem App Engine-Dienst Ausfallzeiten von mehreren Stunden entstehen können. Weitere Informationen finden Sie unter Domainautorisierung für von Google verwaltete Zertifikate.

Führen Sie die Schritte auf dieser Seite aus, um Ausfallzeiten für Ihre Anwendung zu vermeiden.

DNS-Autorisierung erstellen

  1. Erstellen Sie die DNS-Autorisierung im Zertifikatmanager mit den folgenden Befehlen:

    gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
        --domain="DOMAIN_NAME"
    gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
    

    Dabei gilt:

    • AUTHORIZATION_NAME ist ein eindeutiger Name, der diese DNS-Autorisierung beschreibt.
    • DOMAIN_NAME ist der benutzerdefinierte App Engine-Domainname, für den Sie diese DNS-Autorisierung erstellen.
  2. Beachten Sie den vom gcloud-Befehl zurückgegebenen CNAME. Sie benötigen ihn, um Ihren DNS-Eintrag in den folgenden Schritten zu aktualisieren.

CNAME-Eintrag zu DNS-Konfiguration hinzufügen

Je nachdem, ob Sie Cloud DNS oder eine andere DNS-Lösung eines Drittanbieters verwenden, folgen Sie der entsprechenden Anleitung für Ihren Anwendungsfall:

Cloud DNS

Wenn Sie eine DNS-Autorisierung erstellen, gibt der gcloud-Befehl den entsprechenden CNAME-Eintrag zurück. Sie müssen diesen CNAME-Eintrag folgendermaßen Ihrer DNS-Konfiguration in der DNS-Zone der Zieldomain hinzufügen:

  1. Starten Sie die Transaktion des DNS-Eintrags:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Ersetzen Sie DNS_ZONE_NAME durch den Namen der öffentlichen DNS-Zone. Wenn Sie Google Cloud zum Verwalten Ihrer Domain verwenden und Traffic zu dieser Domain empfangen, haben Sie bereits eine öffentliche DNS-Zone erstellt. Informationen zum Aufrufen Ihrer öffentlichen DNS-Zone finden Sie unter Verwaltete Zonen auflisten und beschreiben.

  2. Fügen Sie den CNAME-Eintrag zur Ziel-DNS-Zone hinzu:

    gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"
    

    Dabei gilt:

    • CNAME_RECORD ist der vollständige Wert des CNAME-Eintrags, der vom gcloud-Befehl zurückgegeben wurde, mit dem die entsprechende DNS-Autorisierung erstellt wurde.
    • DOMAIN_NAME ist der benutzerdefinierte Domainname von App Engine. Sie dürfen den Punkt am Ende nach dem Zieldomainnamen nicht weglassen.
    • DNS_ZONE_NAME ist der Name der vorherigen Ziel-DNS-Zone.
  3. Führen Sie die Transaktion des DNS-Eintrags aus, um die Änderungen zu speichern:

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    Ersetzen Sie DNS_ZONE_NAME durch den Namen der vorherigen Ziel-DNS-Zone.

Andere DNS-Lösung

Fügen Sie der DNS-Konfiguration für Ihre Domain einen CNAME-Eintrag hinzu. Verwenden Sie dazu den Hostnamen (_acme-challenge.DOMAIN_NAME) und die Datenfelder aus dem vorherigen Abschnitt. Weitere Informationen finden Sie in der Dokumentation Ihrer DNS-Lösung eines Drittanbieters.

Ein von Google verwaltetes Zertifikat erstellen, das auf die DNS-Autorisierung verweist

Führen Sie die folgenden Befehle aus, um ein von Google verwaltetes Zertifikat zu erstellen, das auf die in den vorherigen Schritten erstellte DNS-Autorisierung verweist:

  1. Erstellen Sie ein von Google verwaltetes Zertifikat:

    gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
    

    Dabei gilt:

    • CERTIFICATE_NAME ist ein eindeutiger Name, der das Zertifikat beschreibt.
    • DOMAIN_NAME ist der benutzerdefinierte Domainname von App Engine.
    • AUTHORIZATION_NAME ist der Name der zuvor erstellten DNS-Autorisierung.
  2. Prüfen Sie, dass Ihr Zertifikat aktiv ist.

    Prüfen Sie mit dem folgenden Befehl, ob das Zertifikat selbst aktiv ist, bevor Sie es auf dem Load-Balancer bereitstellen. Beachten Sie, dass es mehrere Stunden dauern kann, bis sich der Zertifikatstatus in ACTIVE ändert.

    gcloud certificate-manager certificates describe CERTIFICATE_NAME
    

    Ersetzen Sie CERTIFICATE_NAME durch den Namen des von Google verwalteten Zertifikats, das zuvor erstellt wurde.

    Das gcloud-Tool gibt in etwa folgende Ausgabe zurück:

    certificatePem: myPEM
    createTime: '2021-10-20T12:19:53.370778666Z'
    expireTime: '2022-05-07T05:03:49Z'
    managed:
      authorizationAttemptInfo:
      - domain: example.com
        state: AUTHORIZED
      dnsAuthorizations:
      - projects/my-project/locations/global/dnsAuthorizations/myAuth
      domains:
      - example.com
      state: ACTIVE
    name: projects/myProject/locations/global/certificates/myCert
    scope: myScope
    sanDnsnames:
    - example.com
    updateTime: '2021-10-20T12:19:55.083385630Z'
    

    Wenn das gcloud-Tool eine andere Ausgabe zurückgibt, beachten Sie die Informationen unter Fehlerbehebung beim Zertifikatmanager.

Zertifikatzuordnung erstellen

  1. Erstellen Sie eine Zertifikatszuordnung:

    gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
    

    Ersetzen Sie CERTIFICATE_MAP_NAME durch einen eindeutigen Namen, der die Zertifikatszuordnung beschreibt.

  2. Erstellen Sie einen Eintrag für die Zertifikatszuordnung und verknüpfen Sie ihn mit dem Zertifikat und der Zertifikatszuordnung, die Sie vorher verwendet haben:

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME \
        --certificates=CERTIFICATE_NAME \
        --set-primary
    

    Dabei gilt:

    • CERTIFICATE_MAP_ENTRY_NAME ist ein eindeutiger Name, der diesen Eintrag der Zertifikatszuordnung beschreibt.
    • CERTIFICATE_MAP_NAME ist der Name der Zertifikatszuordnung, an die dieser Eintrag der Zertifikatszuordnung angehängt ist.
    • CERTIFICATE_NAME ist der Name des Zertifikats, das Sie mit diesem Eintrag der Zertifikatszuordnung verknüpfen möchten.

    Sie können das --set-primary-Flag anhängen, damit das Zertifikat als Standardzertifikat verwendet wird, wenn kein Domainname angegeben ist.

  3. Prüfen Sie, ob die Zertifikatszuordnung aktiv ist.

    Prüfen Sie mit dem folgenden Befehl, ob der Eintrag der Zertifikatszuordnung aktiv ist, bevor Sie die entsprechende Zertifikatszuordnung an den Zielproxy anhängen:

    gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME
    

    Dabei gilt:

    • CERTIFICATE_MAP_ENTRY_NAME ist der Name des Eintrags der vorherigen Zertifikatszuordnung.
    • CERTIFICATE_MAP_NAME ist der Name der Zertifikatszuordnung, an die dieser Eintrag der Zertifikatszuordnung angehängt wird.

    Das gcloud-Tool gibt in etwa folgende Ausgabe zurück:

    createTime: '2021-09-06T10:01:56.229472109Z'
    name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
    state: ACTIVE
    updateTime: '2021-09-06T10:01:58.277031787Z'
    

Weitere Informationen zur Verwendung des Zertifikatmanagers finden Sie unter Funktionsweise des Zertifikatmanagers.

Cloud Load Balancing konfigurieren

Wenn Sie ein von Google verwaltetes Zertifikat haben, können Sie Ihre benutzerdefinierte App Engine-Domain durch einen Cloud Load Balancing-Frontend-Dienst ersetzen.

Das folgende Diagramm zeigt einen HTTPS-Load-Balancer mit einem einzelnen Backend-Dienst und einer serverlosen NEG.

Traffic an eine App Engine-Anwendung verteilen

Weiterleitungsregeln leiten eingehende Anfragen von externen IP-Adressen an den Ziel-HTTPS-Proxy weiter. Die HTTPS-Load-Balancer nutzen URL-Zuordnungen, um Anfragen an den Backend-Dienst weiterzuleiten, der eine serverlose NEG für den App Engine-Dienst enthält.

Externe IP-Adresse reservieren

Bevor Sie Cloud Load Balancing konfigurieren, müssen Sie eine globale statische externe IP-Adresse einrichten, damit Nutzer den Load-Balancer erreichen können.

Console

  1. Gehen Sie in der Google Cloud Console auf die Seite Externe IP-Adressen.

    Zu externen IP-Adressen

  2. Klicken Sie auf Statische Adresse reservieren, um eine IPv4-Adresse zu reservieren.

  3. Weisen Sie der statischen Adresse einen Namen zu, z. B. appengine-external-ip.

  4. Legen Sie für die Netzwerkstufe Premium fest.

  5. Setzen Sie die IP-Version auf IPv4.

  6. Legen Sie für Typ Global fest.

  7. Klicken Sie auf Reservieren.

gcloud

  1. Erstellen Sie eine Reservierung einer externen IP-Adresse:

    gcloud compute addresses create EXTERNAL_IP \
        --network-tier=PREMIUM \
        --ip-version=IPV4 \
        --global
    

    EXTERNAL_IP ist der Name der zu erstellenden Adressen.

  2. Notieren Sie sich die reservierte IPv4-Adresse:

    gcloud compute addresses describe EXTERNAL_IP \
        --format="get(address)" \
        --global
    

Backend-Dienst für App Engine konfigurieren

Mit einer Netzwerk-Endpunktgruppe (NEG) wird eine Gruppe von Backend-Endpunkten für einen Load-Balancer angegeben. Wenn Sie ein Backend angeben möchten, das auf einen App Engine-Dienst verweist, konfigurieren Sie die serverlose NEG und dann den Backend-Dienst, die Routingregeln und den Frontend-Dienst in Cloud Load Balancing.

  1. Erstellen Sie eine serverlose NEG für Ihre App Engine-Anwendung:

    gcloud compute network-endpoint-groups create APP_ENGINE_NEG \
    --network-endpoint-type=serverless \
    --app-engine-app \
    --region=APP_ENGINE_REGION
    

    Dabei gilt:

    • APP_ENGINE_NEG ist der Name der Netzwerk-Endpunktgruppe.
    • APP_ENGINE_REGION ist die Region, die in App Engine festgelegt wurde.

    Sie können das obige --app-engine-app-Flag anhängen, um das Standardrouting zu verwenden, anstatt die Anfragen an einen bestimmten App Engine-Dienst weiterzuleiten. Bei Verwendung des Standardroutings werden Anfragen an den Standarddienst (https://PROJECT_ID.REGION_ID.r.appspot.com) gesendet. Ansonsten werden alle Routingregeln befolgt, die Sie in der Datei dispatch.yaml definieren. Dieses Verhalten ist mit dem von benutzerdefinierten Domains identisch, die mit App Engine konfiguriert wurden.

  2. Erstellen Sie den Backend-Dienst:

    gcloud compute backend-services create APP_ENGINE_BACKEND \
      --global \
      --load-balancing-scheme=EXTERNAL_MANAGED
    

    Ersetzen Sie APP_ENGINE_BACKEND durch den Namen des zu erstellenden Backend-Dienstes.

  3. Fügen Sie dem App Engine-Backend-Dienst die serverlose NEG hinzu:

    gcloud compute backend-services add-backend APP_ENGINE_BACKEND \
    --global --network-endpoint-group=APP_ENGINE_NEG \
    --network-endpoint-group-region=APP_ENGINE_REGION
    

    Dabei gilt:

    • APP_ENGINE_BACKEND ist der Name des vorherigen Backend-Dienstes.
    • APP_ENGINE_NEG ist der Name der Netzwerk-Endpunktgruppe.
    • APP_ENGINE_REGION ist die Region, die in App Engine festgelegt wurde.
  4. Erstellen Sie eine URL-Zuordnung, um eingehende Anfragen an den Backend-Dienst weiterzuleiten:

    gcloud compute url-maps create URL_MAP_NAME \
          --default-service APP_ENGINE_BACKEND
    

    Dabei gilt:

    • URL_MAP_NAME ist ein eindeutiger Name für die URL-Zuordnungsressource, die die Zuordnung von URLs zu Backend-Diensten definiert.
    • APP_ENGINE_BACKEND ist der Name des vorherigen Backend-Dienstes.
  5. Erstellen Sie einen HTTPS-Zielproxy, um Anfragen an Ihre URL-Zuordnung weiterzuleiten:

    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --certificate-map=CERTIFICATE_MAP_NAME \
          --url-map=URL_MAP_NAME
    

    Dabei gilt:

    • TARGET_HTTPS_PROXY_NAME ist ein eindeutiger Name, den Sie zum Beschreiben Ihres HTTPS-Proxys auswählen.
    • CERTIFICATE_MAP_NAME ist der Name der Zertifikatszuordnung, der auf die Zertifikatszuordnung und das zugehörige Zertifikat verweist.
    • URL_MAP_NAME ist der Name der vorherigen URL-Zuordnung.
  6. Erstellen Sie eine Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --address=EXTERNAL_IP \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --global \
          --ports=443
    

    Dabei gilt:

    • HTTPS_FORWARDING_RULE_NAME ist ein eindeutiger Name, der die Weiterleitungsregel zum Weiterleiten von Netzwerktraffic an den HTTPS-Proxy beschreibt.
    • TARGET_HTTPS_PROXY_NAME ist der Name des vorherigen HTTPS-Proxys.
    • EXTERNAL_IP ist der Name der IPv4-Adresse, die zuvor erstellt wurde.

Load-Balancer testen

Nachdem Sie nun den Load-Balancer konfiguriert haben, können Sie vor der Migration der Domain Traffic testweise an die IP-Adresse des Load-Balancers senden.

  1. Öffnen Sie in der Google Cloud Console die Seite Load-Balancing.
    Gehe zu „Load-Balancing“
  2. Klicken Sie auf den Load-Balancer, den Sie gerade erstellt haben.
  3. Notieren Sie sich seine IP-Adresse.
  4. Bei einem HTTPS-Load-Balancer können Sie Ihren Load-Balancer mit einem Webbrowser testen. Rufen Sie dafür https://IP_ADDRESS auf. Ersetzen Sie IP_ADDRESS durch die IP-Adresse des Load Balancer, z. B. 30.90.80.100.

    • Sollte das nicht funktionieren und Sie verwenden ein von Google verwaltetes Zertifikat, prüfen Sie, ob das Zertifikat ACTIVE und die Zertifikatszuordnung ACTIVE ist.
    • Wenn Sie ein selbst signiertes Zertifikat zu Testzwecken nutzen, zeigt der Browser eine Warnung an. Sie müssen Ihren Browser ausdrücklich anweisen, ein selbst signiertes Zertifikat zu akzeptieren. Bestätigen Sie die Warnung, um die eigentliche Seite zu sehen.

    Weitere Konfigurationsoptionen finden Sie unter Globalen externen HTTP(S)-Load-Balancer mit serverlosen Plattformen einrichten.

Domain mit dem Load-Balancer verbinden

Notieren Sie sich nach der Erstellung des Load-Balancers die IP-Adresse, die diesem zugewiesen ist, z. B. 30.90.80.100. Wenn Sie Ihre Domain auf den Load-Balancer verweisen möchten, erstellen Sie mit Ihrem Domain-Registrierungsdienst einen A-Eintrag. Wenn Sie Ihrem SSL-Zertifikat mehrere Domains hinzugefügt haben, müssen Sie für jede Domain einen A-Eintrag hinzufügen, der auf die IP-Adresse des Load-Balancers verweist. So erstellen Sie beispielsweise A-Einträge für www.example.com und example.com:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Wenn Sie Cloud DNS als DNS-Anbieter verwenden, finden Sie weitere Informationen unter Einträge hinzufügen, ändern und löschen.

Benutzerdefinierte Domainzuordnung in der App Engine löschen

In der Google Cloud Console:

  1. Wählen Sie auf der App Engine-Seite Einstellungen den Tab Benutzerdefinierte Domains aus.

    Benutzerdefinierte Domains aufrufen

  2. Wählen Sie den benutzerdefinierten Domainnamen aus und klicken Sie auf Löschen.

Alternativ können Sie zum Löschen der benutzerdefinierten Domain gcloud-Befehle oder die Admin API verwenden.

Steuerelement für eingehenden Traffic einrichten, um nur den Zugriff über Cloud Load Balancing zuzulassen

Nachdem Sie den Load-Balancer getestet haben, empfehlen wir, Ihre App Engine-Anwendung so zu aktualisieren, dass nur Traffic von Cloud Load Balancing akzeptiert wird. Informationen zum Konfigurieren der Steuerelemente für eingehenden Traffic internal-and-cloud-load-balancing finden Sie unter Einstellungen für eingehenden Traffic.