Internes HTTP(S)-Load-Balancing einrichten

Dieses Dokument enthält Anleitungen zum Konfigurieren des internen HTTP(S)-Load-Balancings für Dienste, die auf Compute Engine-VMs ausgeführt werden.

Informationen zum Konfigurieren des Load-Balancings für Ihre Dienste, die in GKE-Pods ausgeführt werden, finden Sie unter Containernatives Load-Balancing mit eigenständigen NEGs und Internen HTTP(S)-Load-Balancer an eigenständige NEGs anhängen.

Das Einrichten des internen HTTP(S)-Load-Balancings setzt sich aus zwei Phasen zusammen:

  • Erforderliche Aufgaben wie Prüfen notwendiger Konten auf die richtigen Berechtigungen und Vorbereiten des VPC-Netzwerks (Virtual Private Cloud) ausführen
  • Load-Balancer-Ressourcen einrichten

Bevor Sie diese Anleitung durcharbeiten, sollten Sie sich mit Folgendem vertraut machen:

Berechtigungen

Damit Sie dieser Anleitung folgen können, müssen Sie in der Lage sein, Instanzen zu erstellen und ein Netzwerk in einem Projekt zu ändern. Sie müssen entweder ein Inhaber oder Bearbeiter des Projekts sein oder alle folgenden Compute Engine-IAM-Rollen haben.

Aufgabe Erforderliche Rolle
Netzwerke, Subnetze und Load-Balancer-Komponenten erstellen Netzwerkadministrator
Firewallregeln setzen und löschen Sicherheitsadministrator
Instanzen erstellen Instanzadministrator

Weitere Informationen finden Sie in den folgenden Leitfäden:

Einrichtung: Übersicht

Sie können das interne HTTP(S)-Load-Balancing wie im folgenden allgemeinen Konfigurationsablauf beschrieben konfigurieren. Die nummerierten Schritte beziehen sich auf die Zahlen im Diagramm.

Nummerierte Komponenten des internen HTTP(S)-Load-Balancings (zum Vergrößern klicken)
Nummerierte Komponenten des internen HTTP(S)-Load-Balancings (zum Vergrößern klicken)

Wie im Diagramm dargestellt, wird in diesem Beispiel ein interner HTTP(S)-Load-Balancer in einem VPC-Netzwerk in der Region us-west1 mit einem Back-End-Dienst und zwei Back-End-Gruppen erstellt.

Das Diagramm zeigt Folgendes:

  1. Ein VPC-Netzwerk mit zwei Subnetzen:

    1. Das eine Subnetz wird für Back-Ends (Instanzgruppen und NEGs) und die Weiterleitungsregel verwendet. Der primäre IP-Adressbereich ist 10.1.2.0/24.

    2. Das andere Subnetz ist ein Nur-Proxysubnetz in der Region us-west1. Sie müssen in jeder Region eines VPC-Netzwerks, in dem Sie interne HTTP(S)-Load-Balancer verwenden, ein Nur-Proxysubnetz erstellen. Das Nur-Proxysubnetz der Region wird von allen internen HTTP(S)-Load-Balancern in der Region gemeinsam genutzt. Quelladressen von Paketen, die der interne HTTP(S)-Load-Balancer an die Back-Ends Ihres Dienstes sendet, werden vom Nur-Proxysubnetz zugewiesen. In diesem Beispiel hat das Nur-Proxysubnetz für die Region den primären IP-Adressbereich 10.129.0.0/23. Dies ist die für Subnetze empfohlene Größe. Weitere Informationen finden Sie unter Nur-Proxysubnetze für interne HTTP(S)-Load-Balancer.

  2. Eine Firewallregel, die Nur-Proxysubnetz-Traffic in Ihrem Netzwerk zulässt. Dies bedeutet, dass Sie eine Regel hinzufügen müssen, die Traffic von TCP-Port 80, 443 und 8080 über 10.129.0.0/23 zulässt (in diesem Beispiel der Bereich des Nur-Proxysubnetzes). Eine weitere Firewallregel für die Systemdiagnoseprüfungen.

  3. Back-End-Instanzen. Dieses Beispieldiagramm zeigt die folgenden Back-End-Deployments:

    1. Compute Engine-VMs
    2. Google Kubernetes Engine-Back-Ends (GKE), die eigenständigen Netzwerk-Endpunktgruppen (NEGs) hinzugefügt wurden
  4. Instanzgruppen und NEGs:

    1. Verwaltete oder nicht verwaltete Instanzgruppen für Compute Engine-VM-Deployments
    2. NEGs für GKE-Deployments

    Je nach Anforderungen Ihres Deployments können Sie in jeder Zone eine Kombination aus Back-End-Gruppentypen verwenden.

  5. Eine regionale Systemdiagnose, die die Bereitschaft Ihrer Back-Ends meldet.

  6. Ein regionaler Back-End-Dienst, der die Nutzung und die Integrität von Back-Ends überwacht.

  7. Eine regionale URL-Zuordnung, die die URL einer Anfrage parst und Anfragen anhand des Hosts und Pfades der Anfrage-URL an bestimmte Back-End-Dienste weiterleitet.

  8. Ein regionaler HTTP- oder HTTPS-Zielproxy, der eine Anfrage vom Nutzer empfängt und an die URL-Zuordnung weiterleitet. Konfigurieren Sie für HTTPS eine regionale SSL-Zertifikatsressource. Der Zielproxy verwendet das SSL-Zertifikat, um SSL-Traffic zu entschlüsseln, wenn Sie das HTTPS-Load-Balancing konfigurieren. Der Zielproxy kann Traffic über HTTP oder HTTPS an Ihre Instanzen weiterleiten.

  9. Eine Weiterleitungsregel mit der internen IP-Adresse Ihres Load-Balancers zum Weiterleiten jeder eingehenden Anfrage an den Zielproxy.

    Die interne IP-Adresse der Weiterleitungsregel kann aus jedem Subnetz (im selben Netzwerk und in derselben Region) stammen, wobei das Flag --purpose auf PRIVATE gesetzt ist. Hinweis:

    • Die IP-Adresse kann (nicht erforderlich) aus demselben Subnetz wie die Back-End-Instanzgruppen stammen.
    • Die IP-Adresse darf nicht aus dem reservierten Nur-Proxy-Subnetz stammen, dessen Flag --purpose auf INTERNAL_HTTPS_LOAD_BALANCER gesetzt ist.

Netzwerk und Subnetze konfigurieren

Sie benötigen ein VPC-Netzwerk mit zwei Subnetzen: eines für die Back-Ends des Load-Balancers und eines für die Proxys des Load-Balancers. Ein interner HTTP(S)-Load-Balancer ist regional. Traffic innerhalb des VPC-Netzwerks wird an den Load-Balancer weitergeleitet, wenn sich die Quelle des Traffics in einem Subnetz in derselben Region wie der Load-Balancer befindet.

In diesem Beispiel werden das folgende VPC-Netzwerk, die folgende Region und die folgenden Subnetze verwendet:

  • Netzwerk. Das Netzwerk ist ein VPC-Netzwerk im benutzerdefinierten Modus mit dem Namen lb-network.

  • Subnetz für Back-Ends. Ein Subnetz mit dem Namen backend-subnet in der Region us-west1 verwendet 10.1.2.0/24 für seinen primären IP-Bereich.

  • Subnetz für Proxys Ein Subnetz mit dem Namen proxy-only-subnet in der Region us-west1 verwendet 10.129.0.0/23 für seinen primären IP-Bereich.

Netzwerk und Subnetz für Back-Ends konfigurieren

Cloud Console

  1. Rufen Sie in der Google Cloud Console die VPC-Netzwerkseite auf.
    Zur VPC-Netzwerkseite
  2. Klicken Sie auf VPC-Netzwerk erstellen.
  3. Geben Sie im Feld Name lb-network ein.
  4. Im Bereich Subnetze:
    • Legen Sie Modus für Subnetzerstellung auf Benutzerdefiniert fest.
    • Geben Sie im Bereich Neues Subnetz folgende Informationen ein:
      • Name: backend-subnet
      • Region: us-west1
      • IP-Adressbereich: 10.1.2.0/24
    • Klicken Sie auf Fertig.
  5. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie mit dem Befehl gcloud compute networks create das benutzerdefinierte VPC-Netzwerk:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Erstellen Sie mit dem Befehl gcloud compute networks subnets create ein Subnetz im Netzwerk lb-network in der Region us-west1:

    gcloud compute networks subnets create backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

API

Stellen Sie eine POST-Anfrage an die Methode networks.insert und ersetzen Sie project-id dabei durch Ihre Projekt-ID.

POST https://www.googleapis.com/compute/v1/projects/project-id/global/networks

{
  "routingConfig": {
    "routingMode": "REGIONAL"
  },
  "name": "lb-network",
  "autoCreateSubnetworks": false
}

Stellen Sie eine POST-Anfrage an die Methode subnetworks.insert und ersetzen Sie project-id dabei durch Ihre Projekt-ID.

POST https://www.googleapis.com/compute/v1/projects/project-id/regions/us-west1/subnetworks

{
  "name": "backend-subnet",
  "network": "projects/project-id/global/networks/lb-network",
  "ipCidrRange": "10.1.2.0/24",
  "region": "projects/project-id/regions/us-west1",
}

Nur-Proxysubnetz konfigurieren

Das Nur-Proxysubnetz ist für alle internen HTTP(S)-Load-Balancer in der Region us-west1 bestimmt.

Cloud Console

Wenn Sie die Google Cloud Console verwenden, können Sie das Nur-Proxy-Subnetz später auf der Seite "Load-Balancing" erstellen.

gcloud

Erstellen Sie das Nur-Proxy-Subnetz mit dem Befehl gcloud compute networks subnets create.

gcloud compute networks subnets create proxy-only-subnet \
  --purpose=INTERNAL_HTTPS_LOAD_BALANCER \
  --role=ACTIVE \
  --region=us-west1 \
  --network=lb-network \
  --range=10.129.0.0/23

API

Erstellen Sie das Nur-Proxysubnetz mit der Methode subnetworks.insert und ersetzen Sie project-id dabei durch Ihre Projekt-ID.

POST https://www.googleapis.com/compute/v1/projects/project-id/regions/us-west1/subnetworks

{
  "name": "proxy-only-subnet",
  "ipCidrRange": "10.129.0.0/23",
  "network": "projects/project-id/global/networks/lb-network",
  "region": "projects/project-id/regions/us-west1",
  "purpose": "INTERNAL_HTTPS_LOAD_BALANCER",
  "role": "ACTIVE"
}

Firewallregeln konfigurieren

In diesem Beispiel werden die folgenden Firewallregeln verwendet:

  • fw-allow-ssh: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und eingehende SSH-Verbindungen über TCP-Port 22 von jeder Adresse aus ermöglicht. Sie können einen restriktiveren IP-Quellbereich für diese Regel auswählen. Geben Sie dazu beispielsweise nur die IP-Bereiche des Systems an, von dem aus Sie SSH-Sitzungen initiieren. In diesem Beispiel wird das Ziel-Tag allow-ssh verwendet.

  • fw-allow-health-check. Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und Traffic von den Google Cloud-Systemen für Systemdiagnosen zulässt (130.211.0.0/22 und 35.191.0.0/16). In diesem Beispiel wird das Ziel-Tag load-balanced-backend verwendet.

  • fw-allow-proxies. Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und TCP-Traffic über Port 80, 443und 8080 von den verwalteten Proxys des internen HTTP(S)-Load-Balancers zulässt. In diesem Beispiel wird das Ziel-Tag load-balanced-backend verwendet.

Ohne diese Firewallregeln blockiert die Standardregel zum Ablehnen von eingehendem Traffic den eingehenden Traffic zu den Back-End-Instanzen.

Die Back-End-Instanzen werden von den Ziel-Tags definiert. Ohne die Ziel-Tags gelten die Firewallregeln für alle Ihre Back-End-Instanzen im VPC-Netzwerk. Achten Sie beim Erstellen der Back-End-VMs darauf, die angegebenen Ziel-Tags wie in Verwaltete Instanzgruppe erstellen beschrieben zu verwenden.

Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite "Firewallregeln" auf.
    Zur Seite "Firewallregeln"
  2. Klicken Sie auf Firewallregel erstellen, um die Regel zu erstellen, die eingehende SSH-Verbindungen zulässt:
    • Name: fw-allow-ssh
    • Netzwerk: lb-network
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Angegebene Ziel-Tags
    • Zieltags: allow-ssh
    • Quellfilter: IP-Bereiche.
    • Quell-IP-Bereiche: 0.0.0.0/0
    • Protokolle und Ports:
      • Wählen Sie Angegebene Protokolle und Ports aus.
      • Klicken Sie das Kästchen tcp an und geben Sie 22 als Portnummer ein.
  3. Klicken Sie auf Erstellen.
  4. Klicken Sie ein zweites Mal auf Firewallregel erstellen, um die Regel zum Zulassen von Google Cloud-Systemdiagnosen zu erstellen:
    • Name: fw-allow-health-check
    • Netzwerk: lb-network
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Angegebene Ziel-Tags
    • Zieltags: load-balanced-backend
    • Quellfilter: IP-Bereiche.
    • Quell-IP-Bereiche: 130.211.0.0/22 und 35.191.0.0/16
    • Protokolle und Ports:
      • Wählen Sie Angegebene Protokolle und Ports aus.
      • Klicken Sie das Kästchen tcp an und geben Sie 80 als Portnummer ein.
        Sie sollten diese Regeln nur auf Protokolle und Ports beschränken, die mit den von Ihren Systemdiagnosen verwendeten übereinstimmen. Wenn Sie tcp:80 für das Protokoll und den Port verwenden, kann Google Cloud HTTP auf Port 80 verwenden, um Ihre VMs zu kontaktieren. Es kann HTTPS jedoch nicht auf Port 443 verwenden, um den Kontakt herzustellen.
  5. Klicken Sie auf Erstellen.
  6. Klicken Sie ein drittes Mal auf Firewallregel erstellen, um die Regel zu erstellen, die Verbindungen von den Proxyservern des Load-Balancers zu den Back-Ends zulässt:
    • Name: fw-allow-proxies
    • Netzwerk: lb-network
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Angegebene Ziel-Tags
    • Zieltags: load-balanced-backend
    • Quellfilter: IP-Bereiche.
    • Quell-IP-Bereiche: 10.129.0.0/23
    • Protokolle und Ports:
      • Wählen Sie Angegebene Protokolle und Ports aus.
      • Klicken Sie das Kästchen tcp an und geben Sie 80, 443, 8080 als Portnummer ein.
  7. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie die Firewallregel fw-allow-ssh, um SSH-Verbindungen zu VMs mit dem Netzwerk-Tag allow-ssh zu ermöglichen. Wenn Sie source-ranges weglassen, bezieht Google Cloud die Regel auf jede Quelle.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  2. Erstellen Sie die Regel fw-allow-health-check, um Google Cloud-Systemdiagnosen zuzulassen. In diesem Beispiel wird der gesamte TCP-Traffic von Systemdiagnosetests zugelassen. Sie können jedoch Ihren Anforderungen entsprechend eine kleinere Gruppe von Ports konfigurieren:

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=load-balanced-backend \
        --rules=tcp
    
  3. Erstellen Sie die Regel fw-allow-proxies, um Verbindungen von den Proxys des internen HTTP(S)-Load-Balancers zu Ihren Back-Ends zuzulassen.

    gcloud compute firewall-rules create fw-allow-proxies \
      --network=lb-network \
      --action=allow \
      --direction=ingress \
      --source-ranges=10.129.0.0/23 \
      --target-tags=load-balanced-backend \
      --rules=tcp:80,tcp:443,tcp:8080
    

API

Erstellen Sie die Firewallregel fw-allow-ssh, indem Sie eine POST-Anfrage an die Methode firewalls.insert senden und dabei project-id durch Ihre Projekt-ID ersetzen.

POST https://www.googleapis.com/compute/v1/projects/project-id/global/firewalls

{
  "name": "fw-allow-ssh",
  "network": "projects/project-id/global/networks/lb-network",
  "sourceRanges": [
    "0.0.0.0/0"
  ],
  "targetTags": [
    "allow-ssh"
  ],
  "allowed": [
   {
     "IPProtocol": "tcp",
     "ports": [
       "22"
     ]
   }
  ],
 "direction": "INGRESS"
}

Erstellen Sie die Firewallregel fw-allow-health-check, indem Sie eine POST-Anfrage an die Methode firewalls.insert senden und dabei project-id durch Ihre Projekt-ID ersetzen.

POST https://www.googleapis.com/compute/v1/projects/project-id/global/firewalls

{
  "name": "fw-allow-health-check",
  "network": "projects/project-id/global/networks/lb-network",
  "sourceRanges": [
    "130.211.0.0/22",
    "35.191.0.0/16"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp"
    }
  ],
  "direction": "INGRESS"
}

Erstellen Sie die Firewallregel fw-allow-proxies, um TCP-Traffic im Proxysubnetz für die Methode firewalls.insert zuzulassen. Ersetzen Sie dabei project-id durch Ihre Projekt-ID.

POST https://www.googleapis.com/compute/v1/projects/{project}/global/firewalls

{
  "name": "fw-allow-proxies",
  "network": "projects/project-id/global/networks/lb-network",
  "sourceRanges": [
    "10.129.0.0/23"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp",
      "ports": [
        "80"
      ]
    },
  {
      "IPProtocol": "tcp",
      "ports": [
        "443"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "8080"
      ]
    }
  ],
  "direction": "INGRESS"
}

Internes HTTP-Load-Balancing mit einem VM-basierten Dienst konfigurieren

In diesem Abschnitt wird die Konfiguration für Dienste erläutert, die auf Compute Engine-VMs ausgeführt werden. Client-VMs stellen eine Verbindung zur IP-Adresse und dem Port her, die Sie in der Weiterleitungsregel konfigurieren. Wenn Ihre Client-Anwendungen Traffic an diese IP-Adresse und diesen Port senden, werden ihre Anfragen entsprechend der URL-Zuordnung Ihres internen HTTP(S)-Load-Balancers an Ihre Back-End-VMs weitergeleitet.

Im Beispiel auf dieser Seite wird explizit eine reservierte interne IP-Adresse für die Weiterleitungsregel des internen HTTP(S)-Load-Balancers festgelegt, statt die Zuweisung einer sitzungsspezifischen internen IP-Adresse zuzulassen. Als Best Practice empfehlen wir, IP-Adressen für Weiterleitungsregeln zu reservieren.

Verwenden Sie backend-subnet für die IP-Adresse der Weiterleitungsregel. Wenn Sie das Nur-Proxy-Subnetz verwenden, schlägt das Erstellen der Weiterleitungsregel fehl.

Verwaltete Instanzgruppe erstellen

In diesem Abschnitt wird gezeigt, wie Sie eine Vorlage und eine verwaltete Instanzgruppe erstellen. Die verwaltete Instanzgruppe stellt VM-Instanzen bereit, auf denen die Back-End-Server eines beispielhaften internen HTTP(S)-Load-Balancers ausgeführt werden. Der Traffic von Clients wird auf diese Back-End-Server verteilt. Zur Veranschaulichung stellen Back-Ends ihre eigenen Hostnamen bereit.

Cloud Console

  1. Öffnen Sie in der Cloud Console die Seite Instanzgruppen.

    Zur Seite "Instanzgruppen"

  2. Klicken Sie auf Instanzgruppe erstellen.
  3. Wählen Sie links Neue verwaltete Instanzgruppe aus.
  4. Geben Sie im Feld Name l7-ilb-backend-example ein.
  5. Wählen Sie unter Ort die Option Einzelne Zone aus.
  6. Wählen Sie us-west1 als Region aus.
  7. Wählen Sie us-west1-a als Zone aus.
  8. Wählen Sie unter Instanzvorlage die Option Neue Instanzvorlage erstellen aus.

    1. Geben Sie im Feld Name l7-ilb-backend-template ein.
    2. 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.
    3. 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
      systemctl restart apache2'
      
    4. Wählen Sie unter Netzwerk lb-network als Netzwerk und backend-subnet als Subnetz aus.

    5. Fügen Sie die Netzwerk-Tags allow-ssh und load-balanced-backend hinzu.

    6. Klicken Sie auf Speichern und fortfahren.

  9. Geben Sie an, wie viele Instanzen die Gruppe umfassen soll.

    In diesem Beispiel können Sie unter Autoscaling-Modus Folgendes auswählen:

    • Automatische Skalierung nicht konfigurieren
    • Geben Sie 2 für Anzahl der Instanzen ein.

    Optional können Sie im Abschnitt Autoscaling der Benutzeroberfläche die Instanzgruppe so konfigurieren, dass Instanzen basierend auf der CPU-Auslastung automatisch hinzugefügt oder entfernt werden.

  10. Klicken Sie auf Erstellen, um die neue Instanzgruppe anzulegen.

gcloud

Bei den gcloud-Anleitungen in diesem Handbuch wird davon ausgegangen, dass Sie Cloud Shell oder eine andere Umgebung verwenden, in der Bash installiert ist.

  1. Erstellen Sie mit dem Befehl gcloud compute instance-templates create eine VM-Instanzvorlage mit HTTP-Server.

    gcloud compute instance-templates create l7-ilb-backend-template \
    --region=us-west1 \
    --network=lb-network \
    --subnet=backend-subnet \
    --tags=allow-ssh,load-balanced-backend \
    --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 mit dem Befehl gcloud compute instance-groups managed create eine verwaltete Instanzgruppe in der Zone.

    gcloud compute instance-groups managed create l7-ilb-backend-example \
        --zone=us-west1-a \
        --size=2 \
        --template=l7-ilb-backend-template
    

API

Erstellen Sie die Instanzvorlage mit der Methode instanceTemplates.insert und ersetzen Sie [project-id] durch Ihre Projekt-ID.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/instanceTemplates
{
  "name":"l7-ilb-backend-template",
  "properties":{
     "machineType":"n1-standard-1",
     "tags":{
        "items":[
           "allow-ssh",
           "load-balanced-backend"
        ]
     },
     "metadata":{
        "kind":"compute#metadata",
        "items":[
          {
              "key":"startup-script",
              "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
          }
        ]
     },
     "networkInterfaces":[
       {
           "network":"projects/[project-id]/global/networks/lb-network",
           "subnetwork":"regions/us-west1/subnetworks/backend-subnet",
           "accessConfigs":[
             {
                 "type":"ONE_TO_ONE_NAT"
             }
           ]
       }
     ],
     "disks":[
       {
           "index":0,
           "boot":true,
           "initializeParams":{
              "sourceImage":"projects/debian-cloud/global/images/family/debian-9"
           },
           "autoDelete":true
       }
     ]
  }
}

Erstellen Sie in jeder Zone eine verwaltete Instanzgruppe mit der Methode instanceGroupManagers.insert. Ersetzen Sie [project-id] dabei durch Ihre Projekt-ID.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/zones/{zone}/instanceGroupManagers
{
  "name": "l7-ilb-backend-example",
  "zone": "projects/[project-id]/zones/us-west1-a",
  "instanceTemplate": "projects/[project-id]/global/instanceTemplates/l7-ilb-backend-template",
  "baseInstanceName": "l7-ilb-backend-example",
  "targetSize": 2
}

Load-Balancer konfigurieren

In diesem Beispiel wird gezeigt, wie Sie die folgenden Ressourcen für den internen HTTP(S)-Load-Balancer erstellen:

  • HTTP-Systemdiagnose
  • Back-End-Dienst mit einer verwalteten Instanzgruppe als Back-End
  • Eine URL-Zuordnung
    • Vergewissern Sie sich, dass Sie auf eine regionale URL-Zuordnung verweisen, wenn eine Region für den HTTP(S)-Zielproxy definiert ist. Eine regionale URL-Zuordnung leitet Anfragen an einen regionalen Back-End-Dienst auf Grundlage von Regeln weiter, die Sie für den Host und den Pfad einer eingehenden URL definieren. Eine regionale URL-Zuordnung kann nur von einer regionalen Zielproxy-Regel in derselben Region referenziert werden.
  • SSL-Zertifikat (für HTTPS)
  • Zielproxy
  • Weiterleitungsregel

Verwenden Sie backend-subnet für die IP-Adresse der Weiterleitungsregel. Wenn Sie das Nur-Proxy-Subnetz verwenden, schlägt das Erstellen der Weiterleitungsregel fehl.

Proxyverfügbarkeit

Manchmal haben Google Cloud-Regionen nicht genügend Proxykapazität für einen neuen internen HTTP(S)-Load-Balancer. In diesem Fall gibt die Cloud Console beim Erstellen des Load-Balancers eine Warnmeldung zur Proxyverfügbarkeit aus. Sie haben folgende Möglichkeiten, dieses Problem zu beheben:

  • Wählen Sie eine andere Region für den Load-Balancer aus. Diese Option kann sinnvoll sein, wenn Sie Back-Ends in einer anderen Region haben.
  • Wählen Sie ein VPC-Netzwerk aus, dem bereits ein Nur-Proxy-Subnetz zugewiesen ist.
  • Warten Sie, bis das Kapazitätsproblem behoben ist.

Cloud Console

Load-Balancer-Typ auswählen

  1. Öffnen Sie in der Google Cloud Console die Seite "Load-Balancing".
    Zur Seite "Load-Balancing"
  2. Klicken Sie unter HTTP(S)-Load-Balancing auf Konfiguration starten.
  3. Wählen Sie Nur zwischen meinen VMs aus. Diese Einstellung bedeutet, dass der Load-Balancer intern ist.
  4. Klicken Sie auf Weiter.

Load-Balancer vorbereiten

  1. Geben Sie l7-ilb-map als Name für den Load-Balancer ein.
  2. Wählen Sie us-west1 als Region aus.
  3. Wählen Sie lb-network als Netzwerk aus.
  4. Lassen Sie das Fenster geöffnet, um fortzufahren.

Nur-Proxy-Subnetz reservieren

Reservieren Sie beim internen HTTP-Load-Balancing ein Proxy-Subnetz:

  1. Klicken Sie auf Subnetz reservieren.
  2. Geben Sie im Feld Name proxy-only-subnet ein.
  3. Geben Sie 10.129.0.0/23 als IP-Adressbereich ein.
  4. Klicken Sie auf Hinzufügen.

Back-End-Service konfigurieren

  1. Klicken Sie auf Back-End-Konfiguration.
  2. Wählen Sie im Menü Back-End-Dienst erstellen oder auswählen die Option Back-End-Dienst erstellen aus.
  3. Legen Sie als Name für den Back-End-Dienst l7-ilb-backend-service fest.
  4. Setzen Sie den Backend-Typ auf Instanzgruppen.
  5. Im Abschnitt Neues Back-End:
    1. Legen Sie für die Instanzgruppe l7-ilb-backend-example fest.
    2. Setzen Sie die Portnummern auf 80.
    3. Setzen Sie den Balancing-Modus auf Auslastung.
    4. Klicken Sie auf Fertig.
  6. Wählen Sie im Abschnitt Systemdiagnose die Option Systemdiagnose erstellen mit den folgenden Parametern aus:
    1. Name: l7-ilb-basic-check
    2. Protokoll: HTTP
    3. Port: 80
    4. Klicken Sie auf Speichern und Fortfahren.
  7. Klicken Sie auf Erstellen.

URL-Zuordnung konfigurieren

Klicken Sie auf Host- und Pfadregeln. Der l7-ilb-backend-service muss der einzige Back-End-Dienst für alle nicht übereinstimmenden Hosts und alle nicht übereinstimmenden Pfade sein.

Weitere Informationen zur Trafficverwaltung finden Sie unter Trafficverwaltung einrichten.

Front-End konfigurieren

Bei HTTP:

  1. Klicken Sie auf Front-End-Konfiguration.
  2. Klicken Sie auf Front-End-IP und Port hinzufügen.
  3. Legen Sie als Name l7-ilb-forwarding-rule fest.
  4. Legen Sie als Protokoll HTTP fest.
  5. Legen Sie als Subnetz backend-subnet fest.
  6. Wählen Sie unter Interne IP-Adresse die Option Statische interne IP-Adresse reservieren aus.
  7. Geben Sie im angezeigten Feld die folgenden Informationen ein:
    1. Name: l7-ilb-ip
    2. Wählen Sie im Abschnitt Statische IP-Adresse die Option Selbst auswählen aus.
    3. Geben Sie im Abschnitt Benutzerdefinierte IP-Adresse 10.1.2.99 ein.
    4. Klicken Sie auf Reservieren.
  8. Legen Sie als Port 80 fest.
  9. Klicken Sie auf Fertig.

Bei HTTPS:

Wenn Sie HTTPS zwischen dem Client und dem Load-Balancer verwenden, benötigen Sie eine oder mehrere SSL-Zertifikatsressourcen, um den Proxy zu konfigurieren. Informationen zum Erstellen von SSL-Zertifikatsressourcen finden Sie unter SSL-Zertifikate. Von Google verwaltete Zertifikate werden derzeit nicht von internen HTTP(S)-Load-Balancern unterstützt.

  1. Klicken Sie auf Front-End-Konfiguration.
  2. Klicken Sie auf Front-End-IP und Port hinzufügen.
  3. Geben Sie im Feld Name l7-ilb-forwarding-rule ein.
  4. Wählen Sie im Feld Protokoll die Option HTTPS (includes HTTP/2) aus.
  5. Legen Sie als Subnetz backend-subnet fest.
  6. Wählen Sie unter Interne IP-Adresse die Option Statische interne IP-Adresse reservieren aus.
  7. Geben Sie im angezeigten Feld die folgenden Informationen ein:
    1. Name: l7-ilb-ip
    2. Wählen Sie im Abschnitt Statische IP-Adresse die Option Selbst auswählen aus.
    3. Geben Sie im Abschnitt Benutzerdefinierte IP-Adresse 10.1.2.99 ein.
    4. Klicken Sie auf Reservieren.
  8. Achten Sie darauf, dass der Port auf 443 festgelegt ist, um HTTPS-Traffic zuzulassen.
  9. Klicken Sie auf die Drop-down-Liste Zertifikat.
    1. Wenn Sie bereits eine selbstverwaltete SSL-Zertifikatressource haben, die Sie als primäres SSL-Zertifikat verwenden möchten, wählen Sie diese aus dem Drop-down-Menü aus.
    2. Wählen Sie andernfalls Neues Zertifikat erstellen aus.
      1. Geben Sie l7-ilb-cert als Name ein.
      2. Laden Sie in den entsprechenden Feldern Ihre PEM-formatierten Dateien hoch:
        • Public-Key-Zertifikat
        • Zertifikatskette
        • Privater Schlüssel
      3. Klicken Sie auf Erstellen.
  10. So fügen Sie zusätzlich zur primären SSL-Zertifikatsressource weitere Zertifikatsressourcen hinzu:
    1. Klicken Sie auf Zertifikat hinzufügen.
    2. Wählen Sie ein Zertifikat in der Liste Zertifikate aus oder klicken Sie auf Neues Zertifikat erstellen und befolgen Sie die obige Anleitung.
  11. Klicken Sie auf Fertig.

Konfiguration abschließen

Klicken Sie auf Erstellen.

gcloud

  1. Definieren Sie die HTTP-Systemdiagnose mit dem Befehl gcloud compute health-checks create http.

    gcloud compute health-checks create http l7-ilb-basic-check \
       --region=us-west1 \
       --use-serving-port
    
  2. Definieren Sie den Back-End-Dienst mit dem Befehl gcloud compute backend-services create.

    gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=l7-ilb-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1
    
  3. Fügen Sie dem Back-End-Dienst mit dem Befehl gcloud compute backend-services add-backend Back-Ends hinzu.

    gcloud compute backend-services add-backend l7-ilb-backend-service \
      --balancing-mode=UTILIZATION \
      --instance-group=l7-ilb-backend-example \
      --instance-group-zone=us-west1-a \
      --region=us-west1
    
  4. Erstellen Sie die URL-Zuordnung mit dem Befehl gcloud compute url-maps create.

    gcloud compute url-maps create l7-ilb-map \
      --default-service=l7-ilb-backend-service \
      --region=us-west1
    
  5. Erstellen Sie den Zielproxy.

    Bei HTTP:

    Erstellen Sie für einen internen HTTP-Load-Balancer den Zielproxy mit dem Befehl gcloud compute target-http-proxies create.

    gcloud compute target-http-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --url-map-region=us-west1 \
      --region=us-west1
    

    Bei HTTPS:

    Informationen zum Erstellen von SSL-Zertifikatsressourcen finden Sie unter SSL-Zertifikate. Von Google verwaltete Zertifikate werden derzeit nicht von internen HTTP(S)-Load-Balancern unterstützt.

    Weisen Sie Ihre Dateipfade den entsprechenden Variablennamen zu.

    export LB_CERT=path to PEM-formatted file
    
    export LB_PRIVATE_KEY=path to PEM-formatted file
    

    Erstellen Sie ein regionales SSL-Zertifikat mit dem Befehl gcloud compute ssl-certificates create.

    gcloud compute ssl-certificates create l7-ilb-cert \
      --certificate=$LB_CERT \
      --private-key=$LB_PRIVATE_KEY \
      --region=us-west1
    

    Verwenden Sie das regionale SSL-Zertifikat, um mit dem Befehl gcloud compute target-https-proxies create einen Zielproxy zu erstellen.

    gcloud compute target-https-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --region=us-west1 \
      --ssl-certificates=l7-ilb-cert
    
  6. Erstellen Sie die Weiterleitungsregel.

    Bei benutzerdefinierten Netzwerken müssen Sie in der Weiterleitungsregel auf das Subnetz verweisen. Achten Sie darauf, dass dies das VM-Subnetz und nicht das Proxy-Subnetz ist.

    Bei HTTP:

    Verwenden Sie den Befehl gcloud compute forwarding-rules create mit den richtigen Flags.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=10.1.2.99 \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-west1
    

    Bei HTTPS:

    Erstellen Sie die Weiterleitungsregel mit dem Befehl gcloud compute forwarding-rules create und den richtigen Flags.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=10.1.2.99 \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=l7-ilb-proxy \
      --target-https-proxy-region=us-west1
    

API

Erstellen Sie die Systemdiagnose, indem Sie eine POST-Anfrage an die Methode regionHealthChecks.insert stellen und dabei [project-id] durch Ihre Projekt-ID ersetzen.

POST https://compute.googleapis.com/compute/v1/projects/[project-id]/regions/{region}/healthChecks
{
  "name": "l7-ilb-basic-check",
  "type": "HTTP",
  "httpHealthCheck": {
    "portSpecification": "USE_SERVING_PORT"
  }
}

Erstellen Sie den regionalen Back-End-Dienst, indem Sie eine POST-Anfrage an die Methode regionBackendServices.insert stellen und dabei [project-id] durch Ihre Projekt-ID ersetzen.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/backendServices
{
  "name": "l7-ilb-backend-service",
  "backends": [
    {
      "group": "projects/[project-id]/zones/us-west1-a/instanceGroups/l7-ilb-backend-example",
      "balancingMode": "UTILIZATION"
    }
  ],
  "healthChecks": [
    "projects/[project-id]/regions/us-west1/healthChecks/l7-ilb-basic-check"
  ],
  "loadBalancingScheme": "INTERNAL_MANAGED"
}

Erstellen Sie die URL-Zuordnung, indem Sie eine POST-Anfrage an die Methode regionUrlMaps.insert stellen und dabei [project-id] durch Ihre Projekt-ID ersetzen.

POST https://compute.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/urlMaps
{
  "name": "l7-ilb-map",
  "defaultService": "projects/[project-id]/regions/us-west1/backendServices/l7-ilb-backend-service"
}

Erstellen Sie den Ziel-HTTP-Proxy, indem Sie eine POST-Anfrage an die Methode regionTargetHttpProxies.insert senden und dabei [project-id] durch Ihre Projekt-ID ersetzen.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/targetHttpProxy
{
  "name": "l7-ilb-proxy",
  "urlMap": "projects/[project-id]/global/urlMaps/l7-ilb-map",
  "region": "us-west1"
}

Erstellen Sie die Firewallregel POST, indem Sie eine -Anfrage an die Methode forwardingRules.insert[project-id] senden und dabei durch Ihre Projekt-ID ersetzen.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/forwardingRules
{
  "name": "l7-ilb-forwarding-rule",
  "IPAddress": "10.1.2.99",
  "IPProtocol": "TCP",
  "portRange": "80-80",
  "target": "projects/[project-id]/regions/us-west1/targetHttpProxies/l7-ilb-proxy",
  "loadBalancingScheme": "INTERNAL_MANAGED",
  "subnetwork": "projects/[project-id]/regions/us-west1/subnetworks/backend-subnet",
  "network": "projects/[project-id]/global/networks/lb-network",
  "networkTier": "PREMIUM",
}

Test

VM-Instanz zum Testen der Konnektivität erstellen

gcloud compute instances create l7-ilb-client-us-west1-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --network=lb-network \
    --subnet=backend-subnet \
    --zone=us-west1-a \
    --tags=allow-ssh

Load-Balancer testen

Melden Sie sich in der soeben erstellten Instanz an und testen Sie, ob die HTTP(S)-Dienste auf den Back-Ends über die IP-Adresse der Weiterleitungsregel des internen HTTP(S)-Load-Balancers erreichbar sind und ob Traffic ausgeglichen auf die Back-End-Instanzen verteilt wird.

Verbindung mit jeder Clientinstanz über SSH herstellen

gcloud compute ssh l7-ilb-client-us-west1-a \
    --zone=us-west1-a

Überprüfen, ob die IP ihren Hostnamen bereitstellt

curl 10.1.2.99

Ersetzen Sie für HTTPS-Tests curl durch:

curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:10.1.2.99:443

Das Flag -k bewirkt, dass curl die Zertifikatsvalidierung überspringt.

100 Anfragen ausführen und prüfen, ob ein Load-Balancing stattfindet

Bei HTTP:

{
  RESULTS=
  for i in {1..100}
  do
      RESULTS="$RESULTS:$(curl --silent 10.1.2.99)"
  done
  echo "***"
  echo "*** Results of load-balancing to 10.1.2.99: "
  echo "***"
  echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
  echo
}

Bei HTTPS:

{
  RESULTS=
  for i in {1..100}
  do
      RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:10.1.2.99:443)"
  done
  echo "***"
  echo "*** Results of load-balancing to 10.1.2.99: "
  echo "***"
  echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
  echo
}

Zusätzliche Konfigurationsoptionen

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.

Sitzungsaffinität aktivieren

Mit diesen Verfahren wird gezeigt, wie Sie einen Back-End-Dienst für den internen HTTP(S)-Beispiel-Load-Balancer so aktualisieren, dass der Back-End-Dienst die generierte Cookie-Affinität, Header-Feld-Affinität oder HTTP-Cookie-Affinität verwendet.

Wenn die generierte Cookie-Affinität aktiviert ist, gibt der Load-Balancer bei der ersten Anfrage ein Cookie aus. Bei jeder nachfolgenden Anfrage mit demselben Cookie leitet der Load-Balancer die Anfrage an dieselbe Back-End-VM oder denselben Back-End-Endpunkt weiter. Für externe HTTP(S)-Load-Balancer lautet das Cookie GCILB.

Wenn die Header-Feld-Affinität aktiviert ist, leitet der Load-Balancer Anfragen an Back-End-VMs oder Endpunkte in einer NEG anhand des Werts des mit dem Flag --custom-request-header angegebenen HTTP-Headers weiter. Die Header-Feld-Affinität ist nur gültig, wenn die Load-Balancing-Lokalitätsrichtlinie entweder RING_HASH oder MAGLEV ist und der konsistente Hash des Back-End-Dienstes den Namen des HTTP-Headers angibt.

Wenn die HTTP-Cookie-Affinität aktiviert ist, leitet der Load-Balancer Anfragen an Back-End-VMs oder Endpunkte in einer NEG anhand eines HTTP-Cookies weiter, das im Flag HTTP_COOKIE mit dem optionalen Flag --affinity-cookie-ttl angegeben wird. Wenn der Client das Cookie in seiner HTTP-Anfrage nicht bereitstellt, generiert der Proxy das Cookie und gibt es in einem Set-Cookie-Header an den Client zurück. Die HTTP-Cookie-Affinität ist nur gültig, wenn die Load-Balancing-Lokalitätsrichtlinie entweder RING_HASH oder MAGLEV ist und der konsistente Hash des Back-End-Dienstes das HTTP-Cookie angibt.

Cloud Console

So aktivieren oder ändern Sie die Sitzungsaffinität für einen Back-End-Dienst:

  1. Öffnen Sie in der Google Cloud Console die Seite "Load-Balancing".
    Zur Seite "Load-Balancing"
  2. Klicken Sie auf Back-Ends.
  3. Klicken Sie auf l7-ilb-backend-service, den Namen des Back-End-Dienstes, den Sie für dieses Beispiel erstellt haben, und dann auf Bearbeiten.
  4. Klicken Sie auf der Seite Back-End-Dienstdetails auf Erweiterte Konfiguration.
  5. Wählen Sie unter Sitzungsaffinität die gewünschte Art der Sitzungsaffinität aus dem Menü aus.
  6. Klicken Sie auf Aktualisieren.

gcloud

Mit den folgenden gcloud-Befehlen können Sie den Back-End-Dienst l7-ilb-backend-service auf verschiedene Arten der Sitzungsaffinität aktualisieren:

gcloud compute backend-services update l7-ilb-backend-service \
    --session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP]
    --region=us-west1

API

Zum Festlegen der Sitzungsaffinität senden Sie eine PATCH-Anfrage an die Methode regionBackendServices/patch.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-west1/regionBackendServices/l7-ilb-backend-service
{
  "sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ]
}

Weitere Informationen