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.
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:
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:
- Prüfen, ob Sie die erforderlichen Berechtigungen haben
- Von Google verwaltetes Zertifikat erstellen
- Cloud Load Balancing konfigurieren
- Load-Balancer testen
- Domain mit dem Load-Balancer verbinden
- Benutzerdefinierte Domainzuordnung in App Engine löschen
- Steuerelement für eingehenden Traffic einrichten, um nur den Zugriff über Cloud Load Balancing zuzulassen
Vorbereitung
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
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
Ersetzen Sie dabei Folgendes:
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.
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:
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.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"
Ersetzen Sie dabei Folgendes:
CNAME_RECORD
ist der vollständige Wert des CNAME-Eintrags, der vomgcloud
-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.
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:
Erstellen Sie ein von Google verwaltetes Zertifikat:
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
Ersetzen Sie dabei Folgendes:
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.
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
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.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
Ersetzen Sie dabei Folgendes:
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.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
Ersetzen Sie dabei Folgendes:
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.
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
Gehen Sie in der Google Cloud Console auf die Seite Externe IP-Adressen.
Klicken Sie auf Statische Adresse reservieren, um eine IPv4-Adresse zu reservieren.
Weisen Sie der statischen Adresse einen Namen zu, z. B.
appengine-external-ip
.Legen Sie für die Netzwerkstufe Premium fest.
Setzen Sie die IP-Version auf IPv4.
Legen Sie für Typ Global fest.
Klicken Sie auf Reservieren.
gcloud
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.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.
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
Ersetzen Sie dabei Folgendes:
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 Dateidispatch.yaml
definieren. Dieses Verhalten ist mit dem von benutzerdefinierten Domains identisch, die mit App Engine konfiguriert wurden.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.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
Ersetzen Sie dabei Folgendes:
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.
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
Ersetzen Sie dabei Folgendes:
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.
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
Ersetzen Sie dabei Folgendes:
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.
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
Ersetzen Sie dabei Folgendes:
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.
- Öffnen Sie in der Google Cloud Console die Seite Load-Balancing.
Gehe zu „Load-Balancing“ - Klicken Sie auf den Load-Balancer, den Sie gerade erstellt haben.
- Notieren Sie sich seine IP-Adresse.
Bei einem HTTPS-Load-Balancer können Sie Ihren Load-Balancer mit einem Webbrowser testen. Rufen Sie dafür
https://IP_ADDRESS
auf. Ersetzen SieIP_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 ZertifikatszuordnungACTIVE
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.
- Sollte das nicht funktionieren und Sie verwenden ein von Google verwaltetes Zertifikat, prüfen Sie, ob das Zertifikat
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:
Wählen Sie auf der App Engine-Seite Einstellungen den Tab Benutzerdefinierte Domains aus.
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.