Benutzerdefiniertes Header-Routing und Routing anhand von Abfrageparametern für den globalen externen HTTP(S)-Load-Balancer (klassisch) einrichten

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Diese Seite enthält zwei Beispiele für globale externe HTTP(S)-Load-Balancer (klassisch):

Informationen zum Konfigurieren der Trafficverwaltung für globale externe HTTP(S)-Load-Balancer mit erweiterter Trafficverwaltung und für regionale externe HTTP(S)-Load-Balancer mit erweiterter Trafficverwaltung finden Sie auf den folgenden Seiten:

Hinweis

Routing anhand von Abfrageparametern einrichten

In diesem Beispiel wird gezeigt, wie Anfrageparameter für A/B Testing verwendet werden, indem der Abfragestring abgeglichen wird.

Zwei Back-End-Instanzgruppen hinzufügen

Damit das Routing funktioniert, müssen Sie mehrere Back-Ends haben.

Zum Einrichten von zwei Back-Ends müssen sich die VMs in zwei Instanzgruppen befinden. In dieser Anleitung wird beschrieben, wie Sie verwaltete Instanzgruppen mit Linux-VMs erstellen, auf denen Apache ausgeführt wird, und wie Sie dann das Load-Balancing einrichten.

Die verwalteten Instanzgruppen stellen VMs bereit, die die Back-End-Server eines externen HTTP-Load-Balancers ausführen. Zu Demonstrationszwecken stellen Back-Ends ihre eigenen Hostnamen bereit.

Der Einfachheit halber befinden sich die Back-Ends in derselben Region. Wenn ein multiregionaler Standort eingerichtet werden soll, müssen Sie für die zweite Region eine Instanzvorlage einrichten.

Console

  1. eine Instanzvorlage erstellen Rufen Sie in der Google Cloud Console die Seite Instanzvorlagen auf.

    Zu Instanzvorlagen

    1. Klicken Sie auf Instanzvorlage erstellen.
    2. Geben Sie für Name lb-backend-template ein.
    3. Das Bootlaufwerk sollte auf ein Debian-Image wie Debian GNU/Linux 10 (Buster) eingestellt sein. Diese Anleitungen verwenden Befehle, die nur für Debian verfügbar sind, z. B. apt-get.
    4. Fügen Sie unter Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten auf dem Tab Verwaltung das folgende Skript in das Feld Startskript ein.

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

    6. Klicken Sie auf Erstellen.

  2. Erstellen Sie eine verwaltete Instanzgruppe. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zu den Instanzgruppen

    1. Klicken Sie auf Instanzgruppe erstellen.
    2. Wählen Sie Neue verwaltete Instanzgruppe (zustandslos) aus. Weitere Informationen finden Sie unter Zustandslose oder zustandsorientierte MIGs.
    3. Geben Sie für Name first-example-ig ein.
    4. Wählen Sie unter Ort die Option Einzelne Zone aus.
    5. Wählen Sie unter Region die gewünschte Region aus. In diesem Beispiel wird us-east1 verwendet.
    6. Wählen Sie bei Zone die Option us-east1-b aus.
    7. Wählen Sie unter Instanzvorlage die Instanzvorlage lb-backend-template aus.
    8. Geben Sie 2 bei Maximale Anzahl von Instanzen ein.
    9. Wählen Sie Off:do not autoscale unter Autoscaling-Modus aus.
    10. Klicken Sie auf Erstellen.

Erstellen Sie eine weitere verwaltete Instanzgruppe wie diese. Nennen Sie den zweiten Namen second-example-ig und verwenden Sie die Vorlage lb-backend-template.

gcloud

  1. Erstellen Sie eine Instanzvorlage.

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

    gcloud compute instance-groups managed create first-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    
  3. Erstellen Sie die zweite verwaltete Instanzgruppe anhand der Vorlage.

    gcloud compute instance-groups managed create second-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-c
    

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 "Firewalls" auf.
    Zur Seite "Firewalls"
  2. Klicken Sie auf Firewallregel erstellen, um die zweite Firewallregel zu erstellen:
  3. Geben Sie als Namen fw-allow-health-check ein.
  4. Wählen Sie unter Netzwerk die Option Default aus.
  5. Wählen Sie unter Ziele Angegebene Ziel-Tags 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 neben 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

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. Gehen Sie in der Google Cloud Console auf die Seite "Externe IP-Adressen".
    Zur Seite "Externe IP-Adressen"
  2. Klicken Sie auf Statische Adresse reservieren, um eine IPv4-Adresse zu reservieren.
  3. Weisen Sie als Name lb-ipv4-1 zu.
  4. Legen Sie für die Netzwerkstufe Standard fest.
  5. Setzen Sie die IP-Version auf IPv4.
  6. Legen Sie für Typ Global fest.
  7. Klicken Sie auf Reservieren.
  8. Prüfen Sie, dass der Typ auf Global festgelegt ist.
  9. 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-Back-Ends einrichten

Console

In der Google Cloud Console kann derzeit kein headerbasiertes und parameterbasiertes Routing eingerichtet werden. Verwenden Sie stattdessen gcloud oder die API.

gcloud

  1. Erstellen Sie eine Systemdiagnose.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. Erstellen Sie den ersten Back-End-Dienst.
    • Verwenden Sie für einen globalen externen HTTP(S)-Load-Balancer den gcloud CLI-Befehl mit load-balancing-scheme=EXTERNAL_MANAGED. Diese Einstellung bietet erweiterte Funktionen zur Trafficverwaltung.
    • Verwenden Sie für einen globalen externen HTTP(S)-Load-Balancer (klassisch) load-balancing-scheme=EXTERNAL.
        gcloud compute backend-services create service-a \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  3. Erstellen Sie den zweiten Back-End-Dienst.
        gcloud compute backend-services create service-b \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  4. Fügen Sie dem ersten Back-End-Dienst Ihre erste Instanzgruppe als Back-End hinzu.
        gcloud compute backend-services add-backend service-a \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=first-example-ig \
            --instance-group-zone=us-east1-b \
            --global
        
  5. Fügen Sie Ihre zweite Instanzgruppe als Back-End zum zweiten Back-End-Dienst hinzu.
        gcloud compute backend-services add-backend service-b \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=second-example-ig \
            --instance-group-zone=us-east1-c \
            --global
        

URL-Zuordnung erstellen

Console

In der Google Cloud Console kann derzeit kein headerbasiertes und parameterbasiertes Routing eingerichtet werden. Verwenden Sie stattdessen gcloud oder die API.

gcloud

  1. Erstellen Sie eine YAML-Datei vom Typ /tmp/web-map-http.yaml. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    name: web-map-http
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
    tests:
    - description: Test routing for query ABTest with A
      host: example.com
      path: /?ABTest=A
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      expectedOutputUrl: http://example.com/?ABTest=A
    - description: Test routing for query ABTest with B
      host: example.com
      path: /?ABTest=B
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
      expectedOutputUrl: http://example.com/?ABTest=B
    
  2. Validieren Sie die URL-Zuordnung.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Wenn die Tests erfolgreich sind und der Befehl eine Erfolgsmeldung ausgibt, speichern Sie die Änderungen in der URL-Zuordnung.

  3. Aktualisieren Sie die URL-Zuordnung.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

Zielproxy und Weiterleitungsregel erstellen

Console

In der Google Cloud Console kann derzeit kein headerbasiertes und parameterbasiertes Routing eingerichtet werden. Verwenden Sie stattdessen gcloud oder die API.

gcloud

  1. Erstellen Sie einen HTTP-Ziel-Proxy, um Anfragen an Ihre URL-Zuordnung zu leiten.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  2. Erstellen Sie eine globale Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten.
    • Verwenden Sie für einen globalen externen HTTP(S)-Load-Balancer den gcloud CLI-Befehl mit load-balancing-scheme=EXTERNAL_MANAGED. Diese Einstellung bietet erweiterte Funktionen zur Trafficverwaltung.
    • Verwenden Sie für einen globalen externen HTTP(S)-Load-Balancer (klassisch) load-balancing-scheme=EXTERNAL.
        gcloud compute forwarding-rules create http-content-rule \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --network-tier=PREMIUM \
            --address=lb-ipv4-1 \
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

Test

Notieren Sie sich die reservierte IPv4-Adresse:

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

Führen Sie folgenden Befehl aus, um diese Einrichtung zu testen:

curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B

Öffnen Sie http://IP_ADDRESS?ABTest=A und http://IP_ADDRESS?ABTest=B in einem Browser.

Routing anhand von benutzerdefinierten HTTP-Headern einrichten

In diesem Beispiel wird das Hinzufügen und Entfernen von benutzerdefinierten HTTP-Headern für intelligentes Routing veranschaulicht.

Hinweis

Sie können einen vorhandenen externen HTTP(S)-Load-Balancer verwenden oder einen neuen erstellen.

Sie können dieses Feature mit jedem der unterstützten Back-End-Typen verwenden. In diesem Beispiel wird davon ausgegangen, dass Sie VMs in einer Instanzgruppe verwenden.

Informationen zum Einrichten eines einfachen Load-Balancers finden Sie oben im Beispiel für die Einrichtung anhand von Abfrageparametern.

URL-Zuordnung aktualisieren

Console

In der Google Cloud Console kann derzeit kein headerbasiertes und parameterbasiertes Routing eingerichtet werden. Verwenden Sie stattdessen gcloud oder die API.

gcloud

  1. In diesem Beispiel wird gezeigt, wie HTTP-Anfrage-Header für A/B Testing verwendet werden, indem Werte in den HTTP-Headern der Anfrage abgeglichen werden.

    Erstellen Sie eine YAML-Datei vom Typ /tmp/web-map-http.yaml. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    kind: compute#urlMap
    name: web-map-http
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    tests:
    - description: Test routing for query ABTest with A
      host: example.com
      path: /
      headers:
      - name: ABTest
        value: A
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    - description: Test routing for query ABTest with B
      host: example.com
      path: /
      headers:
      - name: ABTest
        value: B
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    
  2. Validieren Sie die URL-Zuordnung.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Wenn die Tests erfolgreich sind und der Befehl eine Erfolgsmeldung ausgibt, speichern Sie die Änderungen in der URL-Zuordnung.

  3. Aktualisieren Sie die URL-Zuordnung.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

Test

Testen Sie diese Einrichtung mit der IPv4-Adresse des zugehörigen Load-Balancers mit folgendem Befehl:

curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"

Nächste Schritte