Globalen externen HTTP(S)-Load-Balancer (klassisch) mit einem Compute Engine-Back-End einrichten

In dieser Einrichtungsanleitung wird beschrieben, wie Sie einen externen HTTP(S)-Load-Balancer und ein Compute Engine-Back-End mit den folgenden Ressourcen erstellen:

Wenn dieses Beispiel nicht zu Ihrem Anwendungsfall passt, lesen Sie eine der folgenden Seiten:

Allgemeine Konzepte finden Sie in der Übersicht über externes HTTP(S)-Load-Balancing.

Load-Balancer-Topologien

Für einen HTTPS-Load-Balancer erstellen Sie die Konfiguration, die im folgenden Diagramm dargestellt wird.

HTTPS-Load-Balancer mit einem Compute Engine-Back-End (zum Vergrößern klicken)
HTTPS-Load-Balancer mit einem Compute Engine-Back-End (zum Vergrößern klicken)

Für einen HTTP-Load-Balancer erstellen Sie die Konfiguration, die im folgenden Diagramm dargestellt wird.

HTTP-Load-Balancer mit einem Compute Engine-Back-End (zum Vergrößern klicken)
HTTP-Load-Balancer mit einem Compute Engine-Back-End (zum Vergrößern klicken)

Die Ereignisabfolge in den Diagrammen sieht folgendermaßen aus:

  1. Ein Client sendet eine Inhaltsanfrage an die externe IPv4-Adresse, die in der Weiterleitungsregel definiert ist.
  2. Bei einem HTTPS-Load-Balancer leitet die Weiterleitungsregel die Anfrage an den Ziel-HTTPS-Proxy weiter.

    Bei einem HTTP-Load-Balancer leitet die Weiterleitungsregel die Anfrage an den Ziel-HTTP-Proxy weiter.

  3. Der Zielproxy verwendet die Regel in der URL-Zuordnung, um zu prüfen, ob der einzelne Back-End-Dienst alle Anfragen empfängt.

  4. Der Load-Balancer prüft, ob der Back-End-Dienst nur eine Instanzgruppe hat, und leitet die Anfrage an eine VM-Instanz in dieser Gruppe weiter.

  5. Die VM sendet die vom Nutzer angeforderten Inhalte.

Hinweise

Richten Sie Ihr System so ein, dass die Voraussetzungen erfüllt sind.

SSL-Zertifikatsressource einrichten

Erstellen Sie für einen HTTPS-Load-Balancer eine SSL-Zertifikatsressource, wie im Folgenden 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.

Berechtigungen einrichten

Sie benötigen die Berechtigung zum Erstellen von Compute Engine-Instanzen, Firewallregeln und reservierten IP-Adressen in einem Projekt, um die Schritte in dieser Anleitung ausführen zu können. Dafür benötigen Sie entweder die Rolle „Inhaber“ oder „Bearbeiter“ für das Projekt oder die folgenden IAM-Rollen für Compute Engine.

Aufgabe Erforderliche Rolle
Instanzen erstellen Instanzadministrator
Firewallregeln setzen und löschen Sicherheitsadministrator
Load-Balancer-Komponenten erstellen Netzwerkadministrator
Projekt erstellen (optional) Projektersteller

Weitere Informationen finden Sie in folgenden Leitfäden:

Verwaltete Instanzgruppe erstellen

Wenn Sie einen Load-Balancer mit einem Compute Engine-Back-End einrichten möchten, müssen sich Ihre VMs in einer Instanzgruppe befinden. In dieser Anleitung wird beschrieben, wie Sie eine verwaltete Instanzgruppe mit Linux-VMs erstellen, auf denen Apache ausgeführt wird, und wie Sie dann das Load-Balancing einrichten.

Die verwaltete Instanzgruppe stellt VMs bereit, auf denen die Back-End-Server eines externen HTTP(S)-Load-Balancers ausgeführt werden. Zu Demonstrationszwecken stellen Back-Ends ihre eigenen Hostnamen bereit.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zur Seite „Instanzgruppen“

  2. Klicken Sie auf Instanzgruppe erstellen.
  3. Wählen Sie links Neue verwaltete Instanzgruppe aus.
  4. Geben Sie für Name lb-backend-example ein.
  5. Wählen Sie unter Ort die Option Einzelne Zone aus.
  6. Wählen Sie unter Region die gewünschte Region aus. In diesem Beispiel wird us-east1 verwendet.
  7. Wählen Sie als Zone us-east1-b aus.
  8. Wählen Sie unter Instanzvorlage die Option Neue Instanzvorlage erstellen aus.
  9. Geben Sie für Name lb-backend-template ein.
  10. Das Bootlaufwerk sollte auf ein Debian-Image wie Debian GNU/Linux 9 (Stretch) eingestellt sein. Diese Anleitungen verwenden Befehle, die nur für Debian verfügbar sind, z. B. apt-get.
  11. Konfigurieren Sie nicht die Option Firewall.

    Da der externe HTTP(S)-Load-Balancer ein Proxy ist, müssen Sie unter Firewall weder HTTPS-Traffic zulassen noch HTTP-Traffic zulassen auswählen. Unter Firewallregel konfigurieren erstellen Sie die einzige erforderliche Firewallregel für diesen Load-Balancer.

  12. Fügen Sie unter Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten auf dem Tab Verwaltung das folgende Skript in das Feld Startskript ein.

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    
  13. Fügen Sie auf dem Tab Netzwerk die Netzwerk-Tags hinzu: allow-health-check

  14. Klicken Sie auf Speichern und fortfahren.

  15. Wählen Sie unter Autoscaling-Modus die Option Kein Autoscaling aus.

  16. Geben Sie 2 bei Anzahl der Instanzen ein.

  17. Klicken Sie auf Erstellen, um die neue Instanzgruppe zu erstellen.

gcloud

  1. Erstellen Sie die Vorlage.
       gcloud compute instance-templates create lb-backend-template \
           --region=us-east1 \
           --network=default \
           --subnet=default \
           --tags=allow-health-check \
           --image-family=debian-9 \
           --image-project=debian-cloud \
           --metadata=startup-script='#! /bin/bash
             apt-get update
             apt-get install apache2 -y
             a2ensite default-ssl
             a2enmod ssl
             vm_hostname="$(curl -H "Metadata-Flavor:Google" \
             http://169.254.169.254/computeMetadata/v1/instance/name)"
             echo "Page served from: $vm_hostname" | \
             tee /var/www/html/index.html
             systemctl restart apache2'
        
  2. Erstellen Sie anhand der Vorlage die verwaltete Instanzgruppe.
       gcloud compute instance-groups managed create lb-backend-example \
           --template=lb-backend-template --size=2 --zone=us-east1-b
       

Benannten Port zur Instanzgruppe hinzufügen

Legen Sie für Ihre Instanzgruppe einen HTTP-Dienst fest und ordnen Sie dem entsprechenden Port einen Portnamen zu. Der Load-Balancing-Dienst leitet den Traffic an den benannten Port weiter.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zur Seite Instanzgruppen

  2. Klicken Sie auf den Namen Ihrer Instanzgruppe (in diesem Beispiel lb-backend-example).
  3. Klicken Sie auf der Seite Übersicht der Instanzgruppe auf Bearbeiten.
  4. Klicken Sie auf Portnamenzuordnung festlegen.
  5. Klicken Sie auf Zeile hinzufügen.
  6. Geben Sie als Portname http ein. Geben Sie als Portnummer 80 ein.
  7. Klicken Sie auf Speichern.

gcloud

Führen Sie den Befehl gcloud compute instance-groups set-named-ports aus.

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone us-east1-b

Firewallregel konfigurieren

In diesem Beispiel erstellen Sie die Firewallregel fw-allow-health-check. Dies ist eine Ingress-Regel, die Traffic von den Systemdiagnosen von Google Cloud (130.211.0.0/22 und 35.191.0.0/16) zulässt. In diesem Beispiel wird das Ziel-Tag allow-health-check zur Identifizierung der VMs verwendet.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Firewall auf.

    Zur Seite "Firewall"

  2. Klicken Sie auf Firewallregel erstellen, um die zweite Firewallregel zu erstellen:
  3. Geben Sie für Name fw-allow-health-check ein.
  4. Wählen Sie unter Netzwerk die Option Standard aus.
  5. Wählen Sie unter Ziele Angegebene Zieltags aus.
  6. Tragen Sie im Feld Ziel-Tags allow-health-check ein.
  7. Legen Sie unter Quellfilter die Option IPv4-Bereiche fest.
  8. Legen Sie unter Quell-IPv4-Bereiche die Werte 130.211.0.0/22 und 35.191.0.0/16 fest.
  9. Wählen Sie unter Protokolle und Ports die Option Angegebene Protokolle und Ports aus.
  10. Klicken Sie das Kästchen tcp an und geben Sie 80 als Portnummer ein.
  11. Klicken Sie auf Erstellen.

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

Externe IP-Adresse reservieren

Nachdem die Instanzen nun ausgeführt werden, richten Sie eine globale statische externe IP-Adresse ein, über die Ihre Kunden den Load-Balancer erreichen können.

Console

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

    Zur Seite „Externe IP-Adressen“

  2. Um eine IPv4-Adresse zu reservieren, klicken Sie auf Statische Adresse reservieren.
  3. Geben Sie für Name lb-ipv4-1 ein.
  4. Setzen Sie die Netzwerkdienststufe auf Premium.
  5. Setzen Sie die IP-Version auf IPv4.
  6. Setzen Sie Typ auf Global.
  7. Klicken Sie auf Reservieren.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global

Notieren Sie sich die reservierte IPv4-Adresse:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Load-Balancer einrichten

In diesem Beispiel verwenden Sie HTTP oder HTTPS zwischen dem Client und dem Load-Balancer. Für HTTPS benötigen Sie eine oder mehrere SSL-Zertifikatsressourcen, um den Proxy zu konfigurieren. Wir empfehlen die Verwendung eines von Google verwalteten Zertifikats.

Auch wenn Sie HTTPS im Front-End verwenden, können Sie HTTP im Back-End verwenden. Google verschlüsselt automatisch Traffic zwischen Google Front Ends (GFEs) und Ihren Back-Ends, die sich in Google Cloud VPC-Netzwerken befinden.

Console

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

    Load-Balancing aufrufen
  2. Klicken Sie unter HTTP(S)-Load-Balancing auf Konfiguration starten.
  3. Wählen Sie Vom Internet zu meinen VMs aus und klicken Sie auf Weiter.
  4. Wählen Sie unter Erweiterte Trafficverwaltung die Option Klassischer HTTP(S)-Load-Balancer aus.
  5. Klicken Sie auf Weiter.
  6. Geben Sie als Namen des Load-Balancers web-map-https oder web-map-http ein.
  7. Klicken Sie auf Back-End-Konfiguration.
    1. Wählen Sie unter Back-End-Dienste und Back-End-Buckets erstellen oder auswählen die Option Back-End-Dienste > Back-End-Dienst erstellen aus.
    2. Fügen Sie einen Namen für Ihren Back-End-Dienst hinzu, z. B. web-backend-service.
    3. Wählen Sie unter Protokoll die Option HTTP aus.
    4. Geben Sie für Benannter Port http ein.
    5. Wählen Sie dann unter Back-Ends > Neues Back-End > Instanzgruppe die Instanzgruppe lb-backend-example aus.
    6. Geben Sie als Portnummern 80 ein.
    7. Behalten Sie die anderen Standardeinstellungen bei.
    8. Wählen Sie unter Systemdiagnose die Option Systemdiagnose erstellen aus und fügen Sie einen Namen für die Systemdiagnose hinzu, z. B. http-basic-check.
    9. Legen Sie als Protokoll HTTP fest und klicken Sie dann auf Speichern und fortfahren.
    10. Behalten Sie die anderen Standardeinstellungen bei.
    11. Klicken Sie auf Erstellen.
  8. Unter Host- und Pfadregeln behalten Sie die Standardeinstellungen bei.
  9. Verwenden Sie in der Front-End-Konfiguration die folgenden Werte:
    1. Legen Sie für Protokoll HTTPS oder HTTP fest.
    2. Legen Sie für IP-Adresse den zuvor erstellten Wert lb-ipv4-1 fest.
    3. Achten Sie darauf, dass der Port auf 443 festgelegt ist, damit HTTPS-Traffic zugelassen wird, oder 80 für HTTP-Traffic.
    4. Wenn Sie HTTPS ausgewählt haben, gehen Sie so vor:
      1. Klicken Sie auf Zertifikat und wählen Sie Ihr primäres SSL-Zertifikat aus.
      2. (Optional) Klicken Sie das Kästchen HTTP-zu-HTTPS-Weiterleitung aktivieren an, um Weiterleitungen von Port 80 zu Port 443 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 eingehenden HTTP-Anfragen an das HTTPS-Front-End Ihres Load-Balancers weiterleitet.

        Dieses Kästchen kann nur angeklickt werden, wenn das HTTPS-Protokoll aktiviert und eine reservierte IP-Adresse verwendet wird.

    5. Klicken Sie auf Fertig.
  10. Klicken Sie auf Prüfen und abschließen.
  11. Wenn Sie mit der Konfiguration des Load-Balancers fertig sind, klicken Sie auf Erstellen.
  12. Warten Sie, bis der Load-Balancer erstellt ist.

    Wenn Sie einen HTTPS-Load-Balancer erstellt und das Kästchen HTTP-zu-HTTPS-Weiterleitung aktivieren angeklickt haben, wird auch ein HTTP-Load-Balancer mit dem Suffix -redirect erstellt.

  13. Klicken Sie auf den Namen des Load-Balancers.
  14. Auf dem Bildschirm Load-Balancing-Details wird der IP:Port Ihres Load-Balancers angezeigt. Notieren Sie sich diesen.

gcloud

  1. Erstellen Sie eine Systemdiagnose.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. Erstellen Sie einen Back-End-Dienst.
        gcloud compute backend-services create web-backend-service \
            --load-balancing-scheme=EXTERNAL \
            --protocol=HTTP \
            --port-name=http \
            --health-checks=http-basic-check \
            --global
        
  3. Fügen Sie Ihre Instanzgruppe als Back-End zum Back-End-Dienst hinzu.
        gcloud compute backend-services add-backend web-backend-service \
            --instance-group=lb-backend-example \
            --instance-group-zone=us-east1-b \
            --global
        
  4. Erstellen Sie für HTTP eine URL-Zuordnung, um die eingehenden Anfragen an den Back-End-Standarddienst weiterzuleiten.
        gcloud compute url-maps create web-map-http \
            --default-service web-backend-service
        
  5. Erstellen Sie für HTTPS eine URL-Zuordnung, um die eingehenden Anfragen an den Back-End-Standarddienst weiterzuleiten.
        gcloud compute url-maps create web-map-https \
            --default-service web-backend-service
        

HTTPS-Front-End einrichten

Überspringen Sie diesen Abschnitt für HTTP-Load-Balancer.
  1. Erstellen Sie für HTTPS die globale SSL-Zertifikatsressource, wenn Sie dies noch nicht getan haben. Beispiel:
  2. Erstellen Sie für HTTPS einen Ziel-HTTPS-Proxy, um Anfragen an Ihre URL-Zuordnung weiterzuleiten. Der Proxy ist der Teil des Load-Balancers, der das SSL-Zertifikat für das HTTPS-Load-Balancing besitzt. Daher laden Sie in diesem Schritt auch Ihr Zertifikat.
        gcloud compute target-https-proxies create https-lb-proxy \
            --url-map=web-map-https \
            --ssl-certificates=www-ssl-cert
        
  3. Erstellen Sie für HTTPS eine globale Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten.
        gcloud compute forwarding-rules create https-content-rule \
            --load-balancing-scheme=EXTERNAL \
            --network-tier=PREMIUM \
            --address=lb-ipv4-1 \
            --global \
            --target-https-proxy=https-lb-proxy \
            --ports=443
        

HTTP-Front-End einrichten

Überspringen Sie diesen Abschnitt für HTTPS-Load-Balancer.

  1. Erstellen Sie für HTTP einen Ziel-HTTP-Proxy, um Anfragen an Ihre URL-Zuordnung weiterzuleiten.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map=web-map-http
        
  2. Erstellen Sie für HTTP eine globale Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten.
        gcloud compute forwarding-rules create http-content-rule \
            --load-balancing-scheme=EXTERNAL \
            --address=lb-ipv4-1 \
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

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 Google Domains verwenden, lesen Sie die Informationen auf der Hilfeseite von Google Domains.

An Ihre Instanzen gesendeten Traffic testen

Da der Load-Balancing-Dienst nun ausgeführt wird, können Sie Traffic an die Weiterleitungsregel senden. Dieser wird dann an verschiedene Instanzen verteilt.

Console

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

    Zur Seite „Load-Balancing“

  2. Klicken Sie auf den Load-Balancer, den Sie gerade erstellt haben.
  3. Prüfen Sie im Bereich Back-End, ob die VMs fehlerfrei sind. Die Spalte Fehlerfrei sollte ausgefüllt sein; in diesem Fall sind beide VMs fehlerfrei (2/2). Falls sie doch leer ist, aktualisieren Sie zuerst die Seite. Es kann einige Minuten dauern, bis in der Cloud Console angezeigt wird, dass die VMs fehlerfrei sind. Wenn die Back-Ends nach einigen Minuten nicht als fehlerfrei angezeigt werden, prüfen Sie die Firewallkonfiguration und das Netzwerk-Tag, die Ihren Back-End-VMs zugewiesen ist.
  4. Wenn Sie für HTTPS ein von Google verwaltetes Zertifikat verwenden, prüfen Sie, ob der Status der Zertifikatsressource AKTIV ist. Weitere Informationen finden Sie unter Status der von Google verwalteten SSL-Zertifikatsressource.
  5. Nachdem die Cloud Console anzeigt, dass die Back-End-Instanzen in Ordnung sind, können Sie Ihren Load-Balancer mit einem Webbrowser testen. Rufen Sie dafür https://IP_ADDRESS (oder http://IP_ADDRESS) auf. Ersetzen Sie IP_ADDRESS durch die IP-Adresse des Load-Balancers.
  6. Wenn Sie ein selbst signiertes Zertifikat genutzt haben, um HTTPS zu testen, zeigt Ihr Browser eine Warnung an. Sie müssen den Browser ausdrücklich anweisen, ein selbst signiertes Zertifikat zu akzeptieren.
  7. Im Browser sollte eine Seite mit Inhalt dargestellt werden, der den Namen der Instanz, die die Seite bereitstellt, und deren Zone enthält (z. B. Page served from: lb-backend-example-xxxx). Wenn der Browser diese Seite nicht anzeigt, prüfen Sie die Konfigurationseinstellungen aus dieser Anleitung.

gcloud

gcloud compute addresses describe lb-ipv4-1 \
   --format="get(address)" \
   --global

Nach einigen Minuten können Sie die Einrichtung mit dem folgenden curl-Befehl testen.

curl http://IP_ADDRESS

-ODER-

curl https://HOSTNAME

Nächste Schritte