Klassischen Application Load Balancer mit einem externen Backend einrichten

Diese Anleitung vermittelt anhand eines Beispiels die Grundlagen für die Verwendung eines externen Back-Ends (manchmal auch als benutzerdefinierter Ursprung bezeichnet) mit einem globalen externen Application Load Balancer. Ein externes Backend ist ein Endpunkt, der sich außerhalb von Google Cloud befindet. Wenn Sie ein externes Backend mit einem globalen externen Application Load Balancer verwenden, können Sie die Leistung mithilfe von Cloud CDN-Caching verbessern.

In dieser Anleitung erfahren Sie, wie Sie einen globalen externen Application Load Balancer mit einem Cloud CDN-fähigen Backend-Dienst konfigurieren, der Anfragen an einen externen Backend-Server weiterleitet.

Bevor Sie dieser Anleitung folgen, sollten Sie sich mit der Internet-NEG-Übersicht und den Einschränkungen vertraut machen.

Das folgende Architekturdiagramm zeigt ein globales externes Application Load Balancer-Frontend mit einem externen Backend.

Globaler externer Application Load Balancer mit externem Backend.
Abbildung 1. A global external Application Load Balancer with an external backend (click to enlarge).

Berechtigungen

Damit Sie diesem Leitfaden folgen können, müssen Sie eine Internet-NEG erstellen und einen externen Application Load Balancer in einem Projekt erstellen oder ändern. Sie sollten entweder Inhaber oder Bearbeiter (roles/owner oder roles/editor) des Projekts sein oder alle folgenden IAM-Rollen in Compute Engine haben:

Aufgabe Erforderliche Rolle
Load-Balancer-Komponenten erstellen und ändern Compute-Netzwerkadministrator
(roles/compute.networkAdmin)
NEGs erstellen und ändern Compute-Instanzadministrator
(roles/compute.instanceAdmin)

Externe Backend-Umgebung außerhalb von Google Cloud einrichten

In den folgenden Abschnitten erfahren Sie, wie Sie Ihre Umgebung einrichten.

Netzwerkendpunkte konfigurieren

Konfigurieren Sie einen Netzwerkendpunkt, um Ihr externes Backend für Google Cloud verfügbar zu machen. Achten Sie darauf, dass der Endpunkt - entweder eine Kombination aus IP:Port oder einem vollqualifizierten Domainnamen (FQDN) und Port - über das Internet erreichbar ist. Dieser Endpunkt wird später von der Internet-NEG referenziert.

Ausführliche Konfigurationsanforderungen für Internet-NEG-Endpunkte finden Sie in der Übersicht über Internet-NEGs.

Externem Backend Traffic von Google Cloud erlauben

Damit Anfragen von Google Cloud Ihr externes Backend erreichen können, müssen Sie die IP-Adressbereiche verwenden, die Google zum Senden von Anfragen an externe Backends verwendet. Um nach den IP-Adressen zu suchen, denen erlaubt werden muss, Traffic an Ihre externen Back-Ends zu senden, fragen Sie den _cloud-eoips.googleusercontent.com-DNS-TXT-Eintrag mit einem Tool wie dig oder nslookup ab.

Beispiele:

  • Führen Sie folgenden Befehl nslookup aus:

    nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
    

    Die Ausgabe sieht in etwa so aus:

    Non-authoritative answer:
    _cloud-eoips.googleusercontent.com    text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
    

    Notieren Sie sich die CIDR-Bereiche nach ip4: und sorgen Sie dafür, dass diese Bereiche von den Firewallregeln oder ACLs (Cloud Access Control) zugelassen werden, die auf Ihrem externen Backend konfiguriert sind.

  • Führen Sie folgenden Befehl dig aus:

    dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
    

    Die Ausgabe enthält die beiden folgenden IP-Adressbereiche:

    34.96.0.0/20
    34.127.192.0/18
    

Google Cloud-Umgebung einrichten

Erstellen Sie den globalen externen Application Load Balancer mit einem Internet-NEG-Backend.

Externe IP-Adresse reservieren

Reservieren Sie eine globale statische externe IP-Adresse, über die Clients Ihre Anwendung erreichen.

Console

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

    Zu externen IP-Adressen

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

  3. Geben Sie einen Namen ein.

  4. Wählen Sie für Netzwerkdienststufe die Option Premium aus.

  5. Setzen Sie die IP-Version auf IPv4.

  6. Wählen Sie unter Typ die Option Global aus.

  7. Klicken Sie auf Reservieren.

gcloud

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

Notieren Sie sich die reservierte IPv4-Adresse:

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

Internet-NEG einrichten

Console

  1. Rufen Sie in der Google Cloud Console die Seite Netzwerk-Endpunktgruppen auf.

    Zu den Netzwerk-Endpunktgruppen

  2. Klicken Sie auf NETZWERK-ENDPUNKTGRUPPE ERSTELLEN.

  3. Geben Sie einen Namen ein.

  4. Wählen Sie als Typ der Netzwerk-Endpunktgruppe die Option Netzwerk-Endpunktgruppe (Internet) aus.

  5. Geben Sie als Standardport 443 ein.

  6. Wählen Sie unter Neuer Netzwerkendpunkt die Option Voll qualifizierter Domainname und Port aus.

  7. Geben Sie den voll qualifizierten Domainnamen ein.

  8. Wählen Sie als Porttyp die Option Standard aus und verifizieren Sie, dass die Portnummer 443 ist.

  9. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie eine Internet-NEG und legen Sie für --network-endpoint-type den Wert internet-fqdn-port fest (der Hostname und der Port, an dem Ihr externes Back-End erreicht werden kann):

    gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type="internet-fqdn-port" \
        --global
    
  2. Fügen Sie den Endpunkt zur NEG hinzu. Wenn kein Port angegeben ist, wird abhängig von dem im Back-End-Dienst konfigurierten Protokoll standardmäßig Port 80 (HTTP) oder 443 (HTTPS, HTTP/2) ausgewählt. Achten Sie darauf, das Flag --global anzugeben:

    gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \
        --global
    

Load-Balancer erstellen

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.

Frontend-Konfiguration

  1. Klicken Sie auf Frontend-Konfiguration.
  2. Geben Sie einen Namen ein.
  3. Zum Erstellen eines HTTPS-Load-Balancers benötigen Sie ein SSL-Zertifikat. Wir empfehlen die Verwendung eines von Google verwalteten Zertifikats.

    Prüfen Sie, ob die folgenden Optionen mit diesen Werten konfiguriert sind.

    Attribut Wert (Wert eingeben bzw. Option auswählen)
    Protokoll HTTPS
    Netzwerkdienststufe Premium
    IP-Version IPv4
    IP-Adresse Wählen Sie die im Schritt Externe IP-Adresse reservieren erstellte IP-Adresse aus.
    Port 443
    Zertifikat

    Wählen Sie ein vorhandenes Zertifikat aus oder erstellen Sie ein neues.

    Zum Erstellen eines HTTPS-Load-Balancers benötigen Sie eine SSL-Zertifikatsressource, die im HTTPS-Proxy verwendet wird. Sie können eine SSL-Zertifikatsressource entweder mit einem von Google verwalteten SSL-Zertifikat oder mit einem selbst verwalteten SSL-Zertifikat erstellen.

    Zum Erstellen eines von Google verwalteten Zertifikats benötigen Sie eine Domain. Der A-Eintrag der Domain muss der IP-Adresse des Load-Balancers zugeordnet werden (in diesem Beispiel example-ip). Wir empfehlen die Verwendung von Google-verwalteten Zertifikaten, da Google Cloud diese Zertifikate automatisch abruft, verwaltet und verlängert. Wenn Sie keine Domain haben, können Sie ein selbst signiertes SSL-Zertifikat zu Testzwecken verwenden.

    Optional: HTTP-zu-HTTPS-Weiterleitung aktivieren

    Klicken Sie dieses Kästchen an, um HTTP-zu-HTTPS-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 Ihres Load-Balancers weiterleitet.

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

    Wenn Sie diesen Prozess testen möchten, ohne eine SSL-Zertifikatsressource oder eine Domain einzurichten (für von Google verwaltete Zertifikate erforderlich), können Sie einen HTTP-Load-Balancer einrichten.

    Um einen HTTP-Load-Balancer zu erstellen, 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 Wählen Sie die im Schritt Externe IP-Adresse reservieren erstellte IP-Adresse aus.
    Port 80
  4. Klicken Sie auf Fertig.

Backend-Konfiguration

  1. Klicken Sie auf Backend-Konfiguration.
  2. Klicken Sie auf Backend-Dienste und Backend-Buckets.
  3. Klicken Sie auf Backend-Dienst erstellen.
  4. Geben Sie einen Namen ein.
  5. Wählen Sie als Backend-Typ die Option Internetnetzwerk-Endpunktgruppe aus.
  6. Wählen Sie unter Protokoll das Protokoll aus, das Sie vom Load-Balancer zur Internet-NEG verwenden möchten. Wählen Sie für dieses Beispiel HTTP/2 aus.
  7. Wählen Sie unter Backends im Fenster Neues Backend die Internet-NEG aus, die Sie im vorherigen Schritt erstellt haben.
  8. Klicken Sie auf Erstellen.

Überprüfen und abschließen

  1. Klicken Sie auf Prüfen und abschließen.
  2. Wenn alles korrekt aussieht, klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie einen Backend-Dienst.
      gcloud compute backend-services create BACKEND_SERVICE \
          --global
      
  2. Fügen Sie dem Backend-Dienst die Internet-NEG hinzu:
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --global-network-endpoint-group \
          --global
       
  3. Erstellen Sie eine URL-Zuordnung, um eingehende Anfragen an den Backend-Dienst weiterzuleiten:
      gcloud compute url-maps create URL_MAP_NAME \
          --default-service=BACKEND_SERVICE \
          --global
      
  4. Führen Sie diesen Schritt nur aus, wenn Sie einen HTTPS-Load-Balancer erstellen möchten. Dieser Schritt ist für HTTP-Load-Balancer nicht erforderlich.

    Zum Erstellen eines HTTPS-Load-Balancers benötigen Sie eine SSL-Zertifikatsressource, die im HTTPS-Zielproxy verwendet wird. Sie können eine SSL-Zertifikatsressource entweder mit einem von Google verwalteten SSL-Zertifikat oder mit einem selbst verwalteten SSL-Zertifikat erstellen. Es empfiehlt sich, die von Google verwalteten Zertifikate zu verwenden, da Google Cloud diese Zertifikate automatisch abruft, verwaltet und verlängert.

    Zum Erstellen eines von Google verwalteten Zertifikats benötigen Sie eine Domain. Wenn Sie keine Domain haben, können Sie ein selbstverwaltetes SSL-Zertifikat zu Testzwecken verwenden.

    So erstellen Sie eine von Google verwaltete SSL-Zertifikatsressource:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --domains DOMAIN
      
    So erstellen Sie eine selbstverwaltete SSL-Zertifikatressource:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --certificate CRT_FILE_PATH \
          --private-key KEY_FILE_PATH
      
  5. Erstellen Sie einen HTTP(S)-Zielproxy, um Anfragen an Ihre URL-Zuordnung weiterzuleiten.

    Erstellen Sie einen HTTP-Zielproxy für einen HTTP-Load-Balancer:

      gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME \
          --global
      

    Erstellen Sie einen HTTPS-Zielproxy für einen HTTPS-Load-Balancer. Der Proxy ist der Teil des Load-Balancers, der das SSL-Zertifikat für den HTTPS-Load-Balancer besitzt. Daher laden Sie in diesem Schritt auch Ihr Zertifikat.

      gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --ssl-certificates=SSL_CERTIFICATE_NAME \
          --url-map=URL_MAP_NAME \
          --global
      

    Ersetzen Sie dabei Folgendes:

    • TARGET_HTTP_PROXY_NAME ist der Name des HTTP-Ziel-Proxys.
    • TARGET_HTTPS_PROXY_NAME ist der Name des HTTPS-Ziel-Proxys.
    • SSL_CERTIFICATE_NAME ist der Name des SSL-Zertifikats.
    • URL_MAP_NAME ist der Name der URL-Zuordnung.
  6. Erstellen Sie eine Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten.

    Für einen HTTP-Load-Balancer:

      gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
          --address=LB_IP_ADDRESS_NAME \
          --target-http-proxy=TARGET_HTTP_PROXY_NAME \
          --global \
          --ports=80
      

    Für einen HTTPS-Load-Balancer:

      gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
          --address=LB_IP_ADDRESS_NAME \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --global \
          --ports=443
      

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.

Load-Balancer testen

Nachdem Sie den Load-Balancer konfiguriert haben, können Sie Traffic an die IP-Adresse des Load-Balancers senden. Wenn Sie eine Domain konfiguriert haben, können Sie auch Traffic an den Domainnamen senden. Die DNS-Weitergabe kann jedoch einige Zeit in Anspruch nehmen. Sie sollten daher zuerst die IP-Adresse zu Testzwecken verwenden.

Console

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

    Load-Balancing aufrufen

  2. Klicken Sie auf den Load-Balancer, den Sie gerade erstellt haben.

  3. Rufen Sie die IP-Adresse des Load-Balancers ab:

  4. Senden Sie den Traffic an den Load-Balancer.

    • Wenn Sie einen HTTP-Load-Balancer erstellt haben, können Sie ihn über http://IP_ADDRESS testen. Ersetzen Sie IP_ADDRESS durch die IP-Adresse des Load-Balancers. Sie werden nun zu der Anwendung weitergeleitet, die Sie auf dem externen Backend ausführen.

    • Wenn Sie einen HTTPS-Load-Balancer erstellt haben, können Sie ihn mit https://IP_ADDRESS testen. Ersetzen Sie IP_ADDRESS durch die IP-Adresse des Load-Balancers. Sie werden nun zu der Anwendung weitergeleitet, die Sie auf dem externen Backend ausführen.

    Sollte das nicht funktionieren und Sie verwenden ein von Google verwaltetes Zertifikat, prüfen Sie, ob der Status der Zertifikatsressource AKTIV ist. Weitere Informationen finden Sie unter Status der von Google verwalteten SSL-Zertifikatressourcen.

    Alternativ können Sie curl über die Befehlszeile Ihres lokalen Computers verwenden. Ersetzen Sie IP_ADDRESS durch die IPv4-Adresse des Load-Balancers: Wenn Sie ein von Google verwaltetes Zertifikat verwenden, testen Sie die Domain, die auf die IP-Adresse des Load-Balancers verweist. Beispiel:

    curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
    

  5. Optional: Wenn Sie eine benutzerdefinierte Domain verwenden, müssen Sie möglicherweise warten, bis die aktualisierten DNS-Einstellungen wirksam werden. Testen Sie dann Ihre Domain im Webbrowser.

    Hilfe zur Fehlerbehebung finden Sie unter Fehlerbehebung bei Problemen mit dem externen Backend und der Internet-NEG.

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.

Cloud CDN aktivieren

Wenn Cloud CDN aktiviert ist, sendet der externe Application Load Balancer nur dann Anfragen an das Internet-NEG-Backend, wenn ein Cloud CDN-Cache-Fehler auftritt.

Console

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

    Load-Balancing aufrufen.

  2. Klicken Sie auf den Namen des Load-Balancers, den Sie ändern möchten.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf Backend-Konfiguration.

  5. Klicken Sie für den Backend-Dienst mit dem Internet-NEG-Backend auf Bearbeiten.

  6. Wählen Sie Cloud CDN aktivieren aus.

  7. Optional: Ändern Sie die Einstellungen für den Cache-Modus und den TTL-Wert.

  8. Klicken Sie auf Aktualisieren.

  9. Klicken Sie zum Prüfen Ihrer Änderungen auf Prüfen und abschließen und dann auf Aktualisieren.

gcloud

  • Verwenden Sie den folgenden Befehl, um Cloud CDN im Backend-Dienst zu aktivieren:
      gcloud compute backend-services update BACKEND_SERVICE \
          --global \
          --enable-cdn \
          --cache-mode=CACHE_MODE
      

    Legen Sie den Cache-Modus fest. Ersetzen Sie dazu CACHE_MODE durch einen der folgenden Werte:

    • CACHE_All_STATIC: Speichert statischen Inhalt automatisch im Cache.
    • USE_ORIGIN_HEADERS (Standard): Hiermit wird erzwungen, dass der Ursprung zum Speichern von Inhalten im Cache gültige Caching-Header festlegt.
    • FORCE_CACHE_ALL: Alle Inhalte werden im Cache gespeichert. Sämtliche Anweisungen private, no-store oder no-cache in Cache-Control-Antwortheadern werden ignoriert.

Einen benutzerdefinierten Header zur Authentifizierung von Anfragen verwenden

Zur Authentifizierung von Anfragen, die an Ihr externes Backend gesendet werden, können Sie einen benutzerdefinierten Header festlegen, der angibt, dass die Anfrage von einem Google Cloud-Load-Balancer stammt. Beispiel: Sie können das externe Backend so konfigurieren, dass für den Host-Header der HTTP-Anfrage ein bestimmter Wert erwartet wird, und Sie können den Backend-Dienst so konfigurieren, dass der Host-Header auf diesen erwarteten Wert gesetzt wird.

Führen Sie die folgenden Schritte aus, um den Backend-Dienst so zu konfigurieren, dass jeder Anfrage ein benutzerdefinierter Host-Header hinzugefügt wird.

Console

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

    Load-Balancing aufrufen.

  2. Klicken Sie auf den Namen des Load-Balancers, den Sie ändern möchten.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf Backend-Konfiguration.

  5. Klicken Sie für den Backend-Dienst mit dem Internet-NEG-Backend auf Bearbeiten.

  6. Klicken Sie auf Erweiterte Konfigurationen.

  7. Klicken Sie für Benutzerdefinierte Anfrageheader auf Header hinzufügen:

    1. Geben Sie als Headername Host ein.
    2. Geben Sie als Headerwert FQDN_NEG_ENDPOINT ein.
  8. Klicken Sie auf Aktualisieren.

  9. Klicken Sie zum Prüfen Ihrer Änderungen auf Prüfen und abschließen und dann auf Aktualisieren.

gcloud

  • Verwenden Sie den folgenden Befehl, um den Backend-Dienst so zu konfigurieren, dass jeder Anfrage ein benutzerdefinierter Host hinzugefügt wird.
      gcloud compute backend-services update BACKEND_SERVICE \
          --custom-request-header "Host: HEADER_VALUE" \
          --global
      

Sorgen Sie außerdem dafür, dass das externe Backend so konfiguriert ist, dass es einen Host-Header erwartet, damit eingehende Anfragen authentifiziert werden können.

Allgemeine Informationen zu benutzerdefinierten Anfrageheadern finden sich unter Benutzerdefinierte Anfrageheader konfigurieren. Informationen zu anderen Authentifizierungsmethoden finden Sie unter Anfragen an das externe Backend authentifizieren.

IAP für den externen Application Load Balancer aktivieren

Hinweis: IAP ist allerdings nicht mit Cloud CDN kompatibel.

Sie können IAP so konfigurieren, dass es aktiviert oder deaktiviert (Standard) wird. Wenn diese Option aktiviert ist, müssen Werte für oauth2-client-id und oauth2-client-secret angegeben werden.

Aktualisieren Sie zum Aktivieren von IAP den Back-End-Dienst so, dass das Flag --iap=enabled mit oauth2-client-id und oauth2-client-secret enthalten ist.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \
    --global

Optional können Sie IAP für eine Compute Engine-Ressource aktivieren. Verwenden Sie dazu die Google Cloud Console, die gcloud CLI oder die API.

Nächste Schritte