Dieses Dokument beschreibt, wie Sie einen externen Application Load Balancer erstellen, um Anfragen für statische Inhalte an Cloud Storage-Buckets weiterzuleiten. Nachdem Sie einen Load-Balancer mit den Backend-Buckets konfiguriert haben, werden mit /love-to-fetch
beginnende Anfragen an URL-Pfade an den Cloud us-east1
-Cloud-Storage-Bucket gesendet. Alle anderen Anfragen werden an den europe-north1
-Cloud Storage-Bucket gesendet, unabhängig von der Region des Nutzers.
Wenn Ihre Backends dynamische Inhalte über HTTP(S) bereitstellen, sollten Sie statt Backend-Diensten Backend-Buckets verwenden.
Wenn Sie bereits Nutzer des klassischen Application Load Balancers sind und eine neue Bereitstellung mit dem globalen externen Application Load Balancer planen, lesen Sie den Abschnitt Migration – Übersicht.Cloud Storage-Buckets als Back-Ends des Load-Balancers
Ein externer Application Load Balancer leitet über eine URL-Zuordnung Traffic von angegebenen URL-Pfaden an Ihre Back-Ends weiter.
Im folgenden Diagramm sendet der Load-Balancer Traffic mit dem Pfad /love-to-fetch/
an einen Cloud Storage-Bucket in der Region us-east1
. Alle anderen Anfragen werden an einen Cloud Storage-Bucket in der Region europe-north1
gesendet.
Cloud Storage verwendet standardmäßig den gleichen Cache wie Cloud CDN. Wenn Sie Cloud CDN für den Backend-Bucket aktivieren, können Sie Cloud CDN-Steuerelemente für Ihre Inhalte verwenden.
Cloud CDN-Steuerelemente umfassen beispielsweise Cache-Modi, signierte URLs und Entwertung. Mit Cloud CDN können Sie auch große Inhalte (> 10 MB) im Cache speichern. Wenn Sie Cloud CDN nicht für Ihren Backend-Bucket aktivieren, können Sie nur Cache-Control
-Ursprungsheader verwenden, um das Caching für kleinere Inhalte zu steuern, wie durch die Cloud Storage-Metadaten festgelegt.
Hinweis
Richten Sie Ihr System so ein, dass die folgenden Voraussetzungen erfüllt sind. Wenn Sie das Dienstprogramm gcloud storage
verwenden, können Sie es mithilfe der Anleitung unter Objektspeicher mit dem gcloud-Tool erforschen installieren.
Standardprojekt festlegen
Console
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
gcloud
gcloud config set project PROJECT_ID
Ersetzen Sie PROJECT_ID
durch das Projekt, das Sie für diesen Leitfaden verwenden.
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Berechtigungen
Um diesem Leitfaden zu folgen, müssen Sie Cloud Storage-Buckets und einen Load-Balancer in einem Projekt erstellen. Sie sollten entweder Inhaber oder Bearbeiter des Projekts sein oder die folgenden IAM-Rollen für Compute Engine haben:
Aufgabe | Erforderliche Rolle |
---|---|
Load-Balancer-Komponenten erstellen | Netzwerkadministrator |
Cloud Storage-Buckets erstellen | Storage-Objekt-Administrator |
Weitere Informationen finden Sie in folgenden Leitfäden:
SSL-Zertifikatsressource einrichten
Erstellen Sie für einen HTTPS-Load-Balancer eine SSL-Zertifikatsressource, wie in der folgenden Dokumentation beschrieben:
Wir empfehlen die Verwendung eines von Google verwalteten Zertifikats.
In diesem Beispiel wird angenommen, dass Sie bereits eine SSL-Zertifikatsressource mit dem Namen www-ssl-cert
haben.
Cloud Storage-Buckets und Inhalte vorbereiten
So bereiten Sie die Cloud Storage-Buckets vor:
Erstellen Sie die Buckets.
Kopieren Sie Inhalte in die Buckets.
Gewähren Sie öffentlichen Zugriff auf die Buckets.
Cloud Storage-Buckets erstellen
In diesem Beispiel erstellen Sie zwei Cloud Storage-Buckets für den Zugriff durch den Load-Balancer. Für Produktionsbereitstellungen empfehlen wir die Auswahl eines multiregionalen Buckets, der Objekte automatisch in mehreren Google Cloud-Regionen repliziert. Dies kann die Verfügbarkeit Ihrer Inhalte verbessern und die Fehlertoleranz in Ihrer gesamten Anwendung verbessern.
Notieren Sie die Namen der von Ihnen erstellten Cloud Storage-Buckets, da sie später verwendet werden. In diesem Leitfaden werden sie als BUCKET_1_NAME und BUCKET_2_NAME bezeichnet.
Console
Wechseln Sie in der Google Cloud Console zur Seite Cloud Storage-Buckets.
Klicken Sie auf Bucket erstellen.
Geben Sie im Feld Bucket benennen einen global eindeutigen Namen ein, der den Benennungsrichtlinien entspricht.
Klicken Sie auf Speicherort für Daten auswählen.
Legen Sie Standorttyp auf Region fest.
Setzen Sie Standort auf europe-north1. Dies ist BUCKET_1_NAME in diesem Leitfaden.
Klicken Sie auf Erstellen.
Klicken Sie auf Buckets, um zur Seite "Cloud Storage-Bucket" zurückzukehren. Folgen Sie dieser Anleitung, um einen zweiten Bucket zu erstellen. Legen Sie dabei den Standort jedoch auf us-east1 fest. Dies ist BUCKET_2_NAME in diesem Leitfaden.
gcloud
gcloud storage buckets create gs://BUCKET_1_NAME --project=PROJECT_ID --default-storage-class=standard --location=europe-north1 --uniform-bucket-level-access
gcloud storage buckets create gs://BUCKET_2_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
Ersetzen Sie BUCKET_1_NAME
und BUCKET_2_NAME
durch die Namen der Buckets, die Sie erstellen möchten.
Terraform
Verwenden Sie zum Erstellen der Buckets die Ressource google_storage_bucket
.
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Inhalte in Cloud Storage-Buckets übertragen
Sie können die Einrichtung später testen, indem Sie die folgenden Images aus einem öffentlichen Cloud Storage-Bucket in Ihre eigenen Cloud Storage-Buckets kopieren.
gcloud
Klicken Sie auf
Google Cloud Shell aktivieren.Führen Sie in Cloud Shell die folgenden Befehle aus und ersetzen Sie die Variablen für die Bucket-Namen durch Ihre Cloud Storage-Bucket-Namen:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET_2_NAME/love-to-fetch/
Terraform
Zum Kopieren von Elementen in den Bucket können Sie die Ressource google_storage_bucket_object
verwenden.
Alternativ können Sie die null_resource
-Ressource verwenden.
resource "null_resource" "upload_cat_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.bucket_1.name}/never-fetch/" } } resource "null_resource" "upload_dog_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://${google_storage_bucket.bucket_2.name}/love-to-fetch/" } }
Klicken Sie in der Google Cloud Console auf der Detailseite jedes Buckets auf Aktualisieren, um zu prüfen, ob die Datei erfolgreich kopiert wurde.
Cloud Storage-Buckets öffentlich lesbar machen
Wenn Sie Cloud Storage-Buckets öffentlich lesbar machen, kann jeder im Internet die zugehörigen Objekte auflisten und ansehen sowie die zugehörigen Metadaten (mit Ausnahme von ACLs) aufrufen. Nehmen Sie keine vertraulichen Informationen in Ihre öffentlichen Buckets auf.
Speichern Sie keine öffentlichen Objekte und sensiblen Daten im selben Bucket, um die Wahrscheinlichkeit einer versehentlichen Veröffentlichung vertraulicher Informationen zu verringern.
Console
Um allen Nutzern Zugriff auf Objekte in Ihren Buckets zu gewähren, wiederholen Sie das folgende Verfahren für jeden Bucket:
Wechseln Sie in der Google Cloud Console zur Seite Cloud Storage-Buckets.
Klicken Sie auf den Bucket-Namen und dann auf den Tab Berechtigungen.
Klicken Sie auf Hinzufügen.
Geben Sie im Feld Neue Hauptkonten
allUsers
ein.Wählen Sie im Feld Rolle auswählen die Option Cloud Storage > Storage-Objekt-Betrachter aus.
Klicken Sie auf Speichern.
Klicken Sie auf Öffentlichen Zugriff erlauben.
gcloud
Führen Sie die folgenden Befehle aus, um allen Nutzern Zugriff auf Objekte in Ihren Buckets zu gewähren:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_2_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
Wenn Sie allen Nutzern Zugriff auf Objekte in Ihren Buckets gewähren möchten, verwenden Sie die google_storage_bucket_iam_member
-Ressource und geben Sie das allUsers
-Mitglied an.
Externe IP-Adresse reservieren
Nachdem Sie Ihre Cloud Storage-Buckets eingerichtet haben, können Sie eine globale statische externe IP-Adresse reservieren, die Ihre Zielgruppe verwendet, um Ihren Load-Balancer zu erreichen.
Dieser Schritt ist optional, wird jedoch empfohlen, da eine statische externe IP-Adresse eine einzelne Adresse bietet, auf die Ihre Domain verweisen soll.
Console
Rufen Sie in der Google Cloud Console die Seite Externe IP-Adressen auf.
Klicken Sie auf Statische Adresse reservieren.
Geben Sie im Feld Name den Wert
example-ip
ein.Setzen Sie die Netzwerkdienststufe auf Premium.
Setzen Sie die IP-Version auf IPv4.
Legen Sie für Typ Global fest.
Klicken Sie auf Reservieren.
gcloud
gcloud compute addresses create example-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Notieren Sie sich die reservierte IPv4-Adresse:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Terraform
Verwenden Sie zum Reservieren der externen IP-Adresse die Ressource google_compute_global_address
.
Externen Application Load Balancer mit Backend-Buckets erstellen
In dieser Anleitung wird beschrieben, wie Sie einen HTTP- oder einen HTTPS-Load-Balancer erstellen. Zum Erstellen eines HTTPS-Load-Balancers müssen Sie dem Frontend des Load-Balancers eine SSL-Zertifikatsressource hinzufügen. Weitere Informationen finden Sie in der Übersicht zu SSL-Zertifikaten.
Console
Konfiguration starten
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
- Klicken Sie auf Load-Balancer erstellen.
- Wählen Sie unter Typ des Load Balancers die Option Application Load Balancer (HTTP/HTTPS) aus und klicken Sie auf Weiter.
- Wählen Sie für Öffentlich oder intern die Option Öffentlich (extern) aus und klicken Sie auf Weiter.
- Wählen Sie unter Globale oder Einzelregion-Bereitstellung die Option Am besten für globale Arbeitslasten aus und klicken Sie auf Weiter.
- Wählen Sie unter Generation des Load Balancers die Option Globaler externer Application Load Balancer aus und klicken Sie auf Weiter.
- Klicken Sie auf Konfigurieren.
Grundlegende Konfiguration
- Geben Sie im Feld Name den Wert
http-lb
ein.
Backend konfigurieren
Klicken Sie auf Backend-Konfiguration.
Klicken Sie auf das Feld Backend-Dienste und Backend-Buckets und dann auf Backend-Bucket erstellen.
Geben Sie im Feld Name des Backend-Buckets den Wert
cats
ein.Klicken Sie im Feld Cloud Storage-Bucket auf Durchsuchen.
Wählen Sie BUCKET_1_NAME aus und klicken Sie dann auf Auswählen. Wenn Sie den Backend-Bucket
cats
zuerst erstellen, wird dieser zum Standard-Bucket, an den alle nicht übereinstimmenden Trafficanfragen weitergeleitet werden. Sie können die Weiterleitungsregeln eines Standard-Backend-Buckets im Load-Balancer nicht ändern.Klicken Sie auf Erstellen.
Verwenden Sie denselben Prozess, um einen Backend-Bucket mit dem Namen
dogs
zu erstellen, und wählen Sie BUCKET_2_NAME aus.Klicken Sie auf OK.
Routingregeln konfigurieren
Routingregeln bestimmen, wie Ihr Traffic weitergeleitet wird. Um das Routing zu konfigurieren, richten Sie Hostregeln und Pfad-Matcher ein, die Konfigurationskomponenten der URL-Zuordnung eines externen Application Load Balancers sind. So richten Sie die Regeln für dieses Beispiel ein:
- Klicken Sie auf Routingregeln.
- Geben Sie für
dogs
den Wert*
im Feld Hosts und/love-to-fetch/*
im Feld Pfade ein.
Frontend konfigurieren
Klicken Sie auf Frontend-Konfiguration.
Prüfen Sie, ob die folgenden Optionen mit diesen Werten konfiguriert sind:
Attribut Wert (Wert eingeben bzw. Option auswählen) Protokoll HTTP Netzwerkdienststufe Premium IP-Version IPv4 IP-Adresse Beispiel-IP Port 80 Optional: HTTP-Keepalive-Zeitlimit Geben Sie ein Zeitlimit zwischen 5 und 1.200 Sekunden ein. Der Standardwert beträgt 610 Sekunden. Wenn Sie einen HTTPS-Load-Balancer statt eines HTTP-Load Balancers erstellen möchten, benötigen Sie ein SSL-Zertifikat (
gcloud compute ssl-certificates list
) und müssen die Felder so ausfüllen:Attribut Wert (Wert eingeben bzw. Option auswählen) Protokoll HTTP(S) Netzwerkdienststufe Premium IP-Version IPv4 IP-Adresse Beispiel-IP Port 443 Optional: HTTP-Keepalive-Zeitlimit Geben Sie ein Zeitlimit zwischen 5 und 1.200 Sekunden ein. Der Standardwert beträgt 610 Sekunden. Zertifikat Wählen Sie das www-ssl-cert
-Zertifikat aus, das Sie im Abschnitt SSL-Zertifikatsressource einrichten erstellt haben, oder erstellen Sie ein neues Zertifikat.Optional: HTTP-zu-HTTPS-Weiterleitung aktivieren Klicken Sie dieses Kästchen an, um Weiterleitungen zu aktivieren. Wenn Sie dieses Kästchen anklicken, wird ein zusätzlicher partieller HTTP-Load-Balancer erstellt, der dieselbe IP-Adresse wie Ihr HTTPS-Load-Balancer verwendet und die HTTP-Anfragen an das HTTPS-Frontend des Load-Balancers weiterleitet.
Dieses Kästchen kann nur angeklickt werden, wenn das HTTPS-Protokoll ausgewählt ist und eine reservierte IP-Adresse verwendet wird.
Klicken Sie auf Fertig.
Konfiguration prüfen
Klicken Sie auf Prüfen und abschließen.
Prüfen Sie das Frontend, Host- und Pfadregeln sowie die Backend-Buckets.
Klicken Sie auf Erstellen und warten Sie, bis der Load-Balancer erstellt ist.
Klicken Sie auf den Namen des Load-Balancers (http-lb).
Notieren Sie die IP-Adresse des Load-Balancers für die nächste Aufgabe. In diesem Leitfaden wird sie als IP_ADDRESS bezeichnet.
gcloud
Backend konfigurieren
gcloud compute backend-buckets create cats \ --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \ --gcs-bucket-name=BUCKET_2_NAME
URL-Zuordnung konfigurieren
gcloud compute url-maps create http-lb \ --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \ --path-matcher-name=path-matcher-2 \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=dogs" \ --default-backend-bucket=cats
Zielproxy konfigurieren
gcloud compute target-http-proxies create http-lb-proxy \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --url-map=http-lb
Ersetzen Sie HTTP_KEEP_ALIVE_TIMEOUT_SEC
durch den Wert für das Client-HTTP-Keepalive-Zeitlimit von 5 bis 1.200 Sekunden. Der Standardwert beträgt 610 Sekunden. Dieses Feld ist optional.
Weiterleitungsregel konfigurieren
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
Verwenden Sie zum Erstellen des Load-Balancers die folgenden Terraform-Ressourcen.
Backend konfigurieren
Verwenden Sie zum Erstellen des Back-Ends die Ressource google_compute_backend_bucket
.
URL-Zuordnung konfigurieren
Verwenden Sie zum Erstellen der URL-Zuordnung die Ressource google_compute_url_map
.
Zielproxy konfigurieren
Verwenden Sie zum Erstellen des Ziel-HTTP-Proxys die Ressource google_compute_target_http_proxy
.
Weiterleitungsregel konfigurieren
Verwenden Sie zum Erstellen der Weiterleitungsregel die Ressource google_compute_global_forwarding_rule
.
HINWEIS: Wenn Sie den Modus in einen klassischen Application Load Balancer ändern möchten, setzen Sie das Attribut load_balancing_scheme
anstelle von "EXTERNAL_MANAGED"
auf "EXTERNAL"
.
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Traffic an den Load-Balancer senden
Einige Minuten nach der Konfiguration des Load-Balancers können Sie Traffic an die IP-Adresse des Load-Balancers senden.
Console
Die Google Cloud Console wird nicht unterstützt.
gcloud
Verwenden Sie den Befehl curl
, um die Antwort von den folgenden URLs zu testen. Ersetzen Sie IP_ADDRESS
durch die IPv4-Adresse des Load-Balancers.
curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
Zusätzliche Konfiguration
In diesem Abschnitt wird die Konfiguration des Beispiels um alternative und zusätzliche Optionen erweitert. Alle Aufgaben sind optional. Sie können sie in beliebiger Reihenfolge ausführen.
HTTP-Keepalive-Zeitlimit des Clients aktualisieren
Der in den vorherigen Schritten erstellte Load Balancer wurde mit einem Standardwert für das Client-HTTP-Keepalive-Zeitlimit konfiguriert.Folgen Sie der nachstehenden Anleitung, um das HTTP-Keepalive-Zeitlimit des Clients zu aktualisieren.
Console
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
- Klicken Sie auf den Namen des Load-Balancers, den Sie ändern möchten.
- Klicken Sie auf Bearbeiten.
- Klicken Sie auf Frontend-Konfiguration.
- Maximieren Sie Erweiterte Funktionen. Geben Sie für HTTP-Keepalive-Zeitlimit ein Zeitlimit ein.
- Klicken Sie auf Aktualisieren.
- Klicken Sie zum Prüfen Ihrer Änderungen auf Prüfen und abschließen und dann auf Aktualisieren.
gcloud
Aktualisieren Sie bei einem HTTP-Load-Balancer den Ziel-HTTP-Proxy mit dem Befehl gcloud compute target-http-proxies update
:
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
Aktualisieren Sie bei einem HTTPS-Load-Balancer den Ziel-HTTPS-Proxy mit dem Befehl gcloud compute target-https-proxies update
:
gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
Ersetzen Sie Folgendes:
TARGET_HTTP_PROXY_NAME
ist der Name des HTTP-Ziel-Proxys.TARGET_HTTPS_PROXY_NAME
ist der Name des HTTPS-Ziel-Proxys.HTTP_KEEP_ALIVE_TIMEOUT_SEC
ist das HTTP-Keepalive-Zeitlimit von 5 bis 600 Sekunden.
Beschränkungen
- Backend-Buckets werden nur von globalen externen Application Load Balancern und dem klassischen Application Load Balancer unterstützt. Sie werden nicht vom regionalen externen Application Load Balancer oder anderen Load-Balancer-Typen unterstützt.
- Backend-Buckets werden in Verbindung mit Identity-Aware Proxy nicht unterstützt.
- Der globale externe Application Load Balancer unterstützt keine Uploads in Cloud Storage-Buckets.