Routing anhand von Headern und Abfrageparametern für den klassischen Application Load Balancer einrichten

Auf dieser Seite finden Sie zwei Beispiele für den klassischen Anwendungs-Load-Balancer:

Informationen zum Konfigurieren der Trafficverwaltung für den globalen externen Anwendungs-Load-Balancer und den regionalen externen Anwendungs-Load-Balancer finden Sie auf den folgenden Seiten:

Hinweise

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 Backend-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. Klicken Sie auf Erweiterte Optionen.
    5. Klicken Sie auf Netzwerk und konfigurieren Sie das folgende Feld:
      1. Geben Sie bei Netzwerk-Tags den Wert allow-health-check ein.
    6. Klicken Sie auf Verwaltung. Fügen Sie im Feld Startskript das nachfolgende Skript ein.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
    7. 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
         apt-get update
         apt-get install apache2 -y
         a2ensite default-ssl
         a2enmod ssl
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://metadata.google.internal/computeMetadata/v1/instance/name)"
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html
         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 Firewall auf.
    Zu „Firewall-Richtlinien“
  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 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. Create the first backend service.
    • Verwenden Sie für einen globalen externen Anwendungs-Load-Balancer den gcloud CLI-Befehl mit load-balancing-scheme=EXTERNAL_MANAGED. Diese Einstellung bietet erweiterte Funktionen zur Trafficverwaltung.
    • Verwenden Sie für einen klassischen Anwendungs-Load-Balancer 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 Backend-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 Anwendungs-Load-Balancer den gcloud CLI-Befehl mit load-balancing-scheme=EXTERNAL_MANAGED. Diese Einstellung bietet erweiterte Funktionen zur Trafficverwaltung.
    • Verwenden Sie für einen klassischen Anwendungs-Load-Balancer 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 HTTP-Headern einrichten

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

Hinweise

Sie können einen vorhandenen externen Anwendungs-Load-Balancer verwenden oder einen neuen erstellen.

Sie können dieses Feature mit jedem der unterstützten Backend-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