Klassischen Application Load Balancer mit Cloud Storage-Buckets einrichten

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.


Eine detaillierte Anleitung dazu finden Sie direkt in der Google Cloud Console. Klicken Sie dazu einfach auf Anleitung:

Anleitung


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.

Der Load-Balancer sendet Traffic an ein Cloud Storage-Backend.
Traffic an Cloud Storage verteilen

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. 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

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Storage-Buckets.

    Cloud Storage-Bucket aufrufen

  2. Klicken Sie auf Bucket erstellen.

  3. Geben Sie im Feld Bucket benennen einen global eindeutigen Namen ein, der den Benennungsrichtlinien entspricht.

  4. Klicken Sie auf Speicherort für Daten auswählen.

  5. Legen Sie Standorttyp auf Region fest.

  6. Setzen Sie Standort auf europe-north1. Dies ist BUCKET_1_NAME in diesem Leitfaden.

  7. Klicken Sie auf Erstellen.

  8. 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.

# Create Cloud Storage buckets
resource "random_id" "bucket_prefix" {
  byte_length = 8
}

resource "google_storage_bucket" "bucket_1" {
  name                        = "${random_id.bucket_prefix.hex}-bucket-1"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
}

resource "google_storage_bucket" "bucket_2" {
  name                        = "${random_id.bucket_prefix.hex}-bucket-2"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
}

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

  1. Klicken Sie auf Google Cloud Shell aktivieren.

  2. 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/three-cats.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.

resource "google_storage_bucket_object" "cat_image" {
  name         = "never-fetch/three-cats.jpg"
  source       = "images/three-cats.jpg"
  content_type = "image/jpeg"

  bucket = google_storage_bucket.bucket_1.name
}

resource "google_storage_bucket_object" "dog_image" {
  name         = "love-to-fetch/two-dogs.jpg"
  source       = "images/two-dogs.jpg"
  content_type = "image/jpeg"

  bucket = google_storage_bucket.bucket_2.name
}

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:

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Storage-Buckets.

    Cloud Storage-Bucket aufrufen

  2. Klicken Sie auf den Bucket-Namen und dann auf den Tab Berechtigungen.

  3. Klicken Sie auf Add.

  4. Geben Sie im Feld Neue Hauptkonten allUsers ein.

  5. Wählen Sie im Feld Rolle auswählen die Option Cloud Storage > Storage-Objekt-Betrachter aus.

  6. Klicken Sie auf Speichern.

  7. 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 Ressource google_storage_bucket_iam_member und geben Sie das Mitglied allUsers an.

# Make buckets public
resource "google_storage_bucket_iam_member" "bucket_1" {
  bucket = google_storage_bucket.bucket_1.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

resource "google_storage_bucket_iam_member" "bucket_2" {
  bucket = google_storage_bucket.bucket_2.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

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

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

    Zu externen IP-Adressen

  2. Klicken Sie auf Statische Adresse reservieren.

  3. Geben Sie im Feld Name den Wert example-ip ein.

  4. Setzen Sie die Netzwerkdienststufe auf Premium.

  5. Setzen Sie die IP-Version auf IPv4.

  6. Legen Sie für Typ Global fest.

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

# Reserve IP address
resource "google_compute_global_address" "default" {
  name = "example-ip"
}

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

  1. Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.

    Load-Balancing aufrufen

  2. Klicken Sie auf Load-Balancer erstellen.
  3. Wählen Sie unter Typ des Load Balancers die Option Application Load Balancer (HTTP/HTTPS) aus und klicken Sie auf Weiter.
  4. Wählen Sie für Öffentlich oder intern die Option Öffentlich (extern) aus und klicken Sie auf Weiter.
  5. Wählen Sie unter Globale oder Einzelregion-Bereitstellung die Option Am besten für globale Arbeitslasten aus und klicken Sie auf Weiter.
  6. Wählen Sie unter Generation des Load Balancers die Option Klassischer Application Load Balancer aus und klicken Sie auf Weiter.
  7. Klicken Sie auf Konfigurieren.

Grundlegende Konfiguration

  1. Geben Sie im Feld Name den Wert http-lb ein.

Backend konfigurieren

  1. Klicken Sie auf Backend-Konfiguration.

  2. Klicken Sie auf das Feld Backend-Dienste und Backend-Buckets und dann auf Backend-Bucket erstellen.

  3. Geben Sie im Feld Name des Backend-Buckets den Wert cats ein.

  4. Klicken Sie im Feld Cloud Storage-Bucket auf Durchsuchen.

  5. 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.

  6. Klicken Sie auf Erstellen.

  7. Verwenden Sie denselben Prozess, um einen Backend-Bucket mit dem Namen dogs zu erstellen, und wählen Sie BUCKET_2_NAME aus.

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

  1. Klicken Sie auf Host- und Pfadregeln.
  2. Geben Sie für dogs den Wert * im Feld Hosts und /love-to-fetch/* im Feld Pfade ein.

Frontend konfigurieren

  1. Klicken Sie auf Frontend-Konfiguration.

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

    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
    Wählen Sie ein Zertifikat aus 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.

  3. Klicken Sie auf Fertig.

Konfiguration prüfen

  1. Klicken Sie auf Prüfen und abschließen.

  2. Prüfen Sie das Frontend, Host- und Pfadregeln sowie die Backend-Buckets.

  3. Klicken Sie auf Erstellen und warten Sie, bis der Load-Balancer erstellt ist.

  4. Klicken Sie auf den Namen des Load-Balancers (http-lb).

  5. 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 \
  --url-map=http-lb

Weiterleitungsregel konfigurieren

gcloud compute forwarding-rules create http-lb-forwarding-rule \
  --load-balancing-scheme=EXTERNAL \
  --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.

# Create LB backend buckets
resource "google_compute_backend_bucket" "bucket_1" {
  name        = "cats"
  description = "Contains cat image"
  bucket_name = google_storage_bucket.bucket_1.name
}

resource "google_compute_backend_bucket" "bucket_2" {
  name        = "dogs"
  description = "Contains dog image"
  bucket_name = google_storage_bucket.bucket_2.name
}

URL-Zuordnung konfigurieren

Verwenden Sie zum Erstellen der URL-Zuordnung die Ressource google_compute_url_map.

# Create url map
resource "google_compute_url_map" "default" {
  name = "http-lb"

  default_service = google_compute_backend_bucket.bucket_1.id

  host_rule {
    hosts        = ["*"]
    path_matcher = "path-matcher-2"
  }
  path_matcher {
    name            = "path-matcher-2"
    default_service = google_compute_backend_bucket.bucket_1.id

    path_rule {
      paths   = ["/love-to-fetch/*"]
      service = google_compute_backend_bucket.bucket_2.id
    }
  }
}

Zielproxy konfigurieren

Verwenden Sie zum Erstellen des Ziel-HTTP-Proxys die Ressource google_compute_target_http_proxy.

# Create HTTP target proxy
resource "google_compute_target_http_proxy" "default" {
  name    = "http-lb-proxy"
  url_map = google_compute_url_map.default.id
}

Weiterleitungsregel konfigurieren

Verwenden Sie zum Erstellen der Weiterleitungsregel die Ressource google_compute_global_forwarding_rule.

# Create forwarding rule
resource "google_compute_global_forwarding_rule" "default" {
  name                  = "http-lb-forwarding-rule"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}

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

Rufen Sie in einem Webbrowser die folgenden Adressen auf, um den Load-Balancer zu testen. Ersetzen Sie dabei IP_ADDRESS durch die IP-Adresse des Load-Balancers:

  • http://IP_ADDRESS/love-to-fetch/two-dogs.jpg

  • http://IP_ADDRESS/never-fetch/three-cats.jpg

Wenn Sie einen HTTP-Load-Balancer eingerichtet haben, achten Sie darauf, dass der Browser nicht automatisch zu HTTPS weiterleitet.

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

Beschränkungen