Internes HTTP(S)-Load-Balancing für GKE-Pods einrichten

Dieses Dokument enthält Anleitungen zum Konfigurieren des internen HTTP(S)-Load-Balancings für Ihre Dienste, die in Google Kubernetes Engine-Pods (GKE) ausgeführt werden.

Hinweis

Für die Anleitungen in diesem Handbuch müssen Sie die Bash oder eine Bash-ähnliche Shell verwenden. Sie können beispielsweise Cloud Shell verwenden.

Lesen Sie die folgenden Dokumente, bevor Sie die Anleitungen in diesem Handbuch befolgen:

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

In diesem Abschnitt wird die Konfiguration für Dienste angezeigt, die auf GKE-Pods 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-GKE-Pods weitergeleitet.

Im Beispiel auf dieser Seite wird explizit eine reservierte interne IP-Adresse für die interne Weiterleitungsregel festgelegt, statt zuzulassen, dass eine sitzungsspezifische interne IP-Adresse zugewiesen wird. Dies ist die empfohlene Vorgehensweise für Weiterleitungsregeln.

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.

Back-Ends konfigurieren: GKE-Cluster

In diesem Abschnitt werden ein Demonstrations-GKE-Cluster und ein Deployment zum Ausführen eines einfachen Containers erstellt, der einen einfachen Webserver ausführt, der den Hostnamen des Knotens bereitstellt. Außerdem wird ein ClusterIP-Dienst erstellt, der automatisch ein NEG erstellt.

Console

Zum Erstellen eines Clusters mit der Cloud Console führen Sie die folgenden Schritte aus:

  1. Rufen Sie in der Cloud Console das Menü Google Kubernetes Engine auf.

    Zum Google Kubernetes Engine-Menü

  2. Klicken Sie auf Cluster erstellen.

  3. Geben Sie im Feld Name l7-ilb-cluster ein.

  4. Wählen Sie Zonal als Standorttyp aus.

  5. Wählen Sie us-west1-b als Zone aus.

  6. Wählen Sie die standardmäßige Masterversion aus.

  7. Maximieren Sie Verfügbarkeit, Netzwerk, Sicherheit und weitere Funktionen:

    1. Vergewissern Sie sich, dass das Kästchen VPC nativ aktivieren (mit Alias-IP) aktiviert ist.
    2. Wählen Sie lb-network als Netzwerk aus.
    3. Wählen Sie backend-subnet als Knotensubnetz aus.
    4. Vergewissern Sie sich, dass Load-Balancing aktiviert ist. Wählen Sie dafür das Kästchen neben Enable HTTP load balancing aus.
  8. Behalten Sie für die übrigen Felder die Standardwerte bei oder passen Sie sie an Ihre Anforderungen an.

  9. Klicken Sie auf Erstellen.

Wenn Sie den Cluster mithilfe der Cloud Console erstellen, müssen Sie dem Proxy-Firewallfilter das vom System erzeugte Netzwerk-Tag hinzufügen:

  1. Suchen Sie das Netzwerk-Tag, das GKE den Knoten im Cluster hinzugefügt hat. Das Tag wird vom Cluster-Hash generiert.

    1. Öffnen Sie die Seite der VM-Instanzen.

      Zur Seite "VM-Instanzen"

    2. Wählen Sie im Spalten-Pulldown-Menü die Option Netzwerk-Tags aus.

    3. Kopieren Sie das Netzwerk-Tag für die GKE-Knoten. Das sollte ungefähr so aussehen:

      gke-l7-ilb-cluster-id-node
      
  2. Bearbeiten Sie die Firewallregel fw-allow-proxies und fügen Sie das Tag hinzu.

    1. Rufen Sie in der Google Cloud Console die Seite "Firewallregeln" auf.
      Zur Seite "Firewallregeln"
    2. Klicken Sie auf die Firewallregel fw-allow-proxies und anschließend auf Bearbeiten.
    3. Fügen Sie im Feld Ziel-Tags das Netzwerk-Tag hinzu, das Sie im vorherigen Schritt kopiert haben.
    4. Klicken Sie auf Speichern.

gcloud

  1. Erstellen Sie einen GKE-Cluster mit dem Befehl gcloud container clusters create.

    gcloud container clusters create l7-ilb-cluster \
        --zone=us-west1-b \
        --network=lb-network \
        --subnetwork=backend-subnet \
        --enable-ip-alias \
        --tags=allow-ssh,load-balanced-backend
    

API

Erstellen Sie einen GKE-Cluster mit der Methode projects.zones.clusters.create und ersetzen Sie [project-id] durch Ihre Projekt-ID.

POST https://container.googleapis.com/v1/projects/[project-id]/zones/us-west1-b/clusters
{
  "cluster": {
    "name": "l7-ilb-cluster",
    "network": "projects/[project-id]/global/networks/lb-network",
    "subnetwork": "projects/[project-id]/regions/us-west1/subnetworks/backend-subnet",
    "initialClusterVersion": "",
    "location": "us-west1-b",
    "nodePools": [{
      "name": "l7-ilb-node-pool",
      "initialNodeCount": 3,
      "config": {
        "tags":["allow-ssh","load-balanced-backend"]
      }
    }],
    "defaultMaxPodsConstraint": {
      "maxPodsPerNode": "110"
    },
    "ipAllocationPolicy": {
      "useIpAliases": true
    }
  }
}

Anmeldedaten zur Ausführung des Clusters abrufen

Verwenden Sie den Befehl gcloud container clusters get-credentials.

gcloud container clusters get-credentials l7-ilb-cluster \
    --zone=us-west1-b

Deployment mit Testcontainern definieren, die ihren Hostnamen liefern

Erstellen Sie hostname.yaml mit der Deployment- und Dienstspezifikation.

cat << EOF > hostname.yaml
apiVersion: v1
kind: Service
metadata:
  name: hostname
  annotations:
    cloud.google.com/neg: '{"exposed_ports":{"80":{}}}'
spec:
  ports:
  - port: 80
    name: host1
    protocol: TCP
    targetPort: 8000
  selector:
    run: hostname
  type: ClusterIP

---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: hostname
  name: hostname
spec:
  replicas: 3
  selector:
    matchLabels:
      run: hostname
  template:
    metadata:
      labels:
        run: hostname
    spec:
      containers:
      - image: gcr.io/kubernetes-e2e-test-images/serve-hostname-amd64:1.1
        name: host1
        command:
        - /bin/sh
        - -c
        - /serve_hostname -http=true -udp=false -port=8000
        ports:
        - protocol: TCP
          containerPort: 8000
EOF

Konfiguration anwenden

  1. Wenn Sie kein Dienstkonto verwenden, um den Zugriff auf Google Cloud zu autorisieren, führen Sie den Befehl gcloud auth application-default login aus.

    gcloud auth application-default login
    
  2. Wenden Sie die Konfiguration an.

    kubectl apply -f hostname.yaml
    

Deployment und GKE-Konfiguration überprüfen

Vergewissern Sie sich, dass der neue Diensthostname erstellt und der Anwendungs-Pod ausgeführt wird.

kubectl get svc

Die Beispielausgabe sieht so aus:

NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
hostname     ClusterIP   10.71.9.71           80/TCP    41m
[..skip..]

Beachten Sie, dass Ihre Cluster-IP-Adresse wahrscheinlich anders aussieht, da GKE den Cluster-IP-Bereich automatisch als sekundären IP-Bereich im backend-subnet erstellt.

kubectl get pods

Die Beispielausgabe sieht so aus:

NAME                        READY     STATUS    RESTARTS   AGE
hostname-6db459dcb9-896kh   1/1       Running   0          33m
hostname-6db459dcb9-k6ddk   1/1       Running   0          50m
hostname-6db459dcb9-x72kb   1/1       Running   0          33m
[..skip..]

Die Ausgabe sollte einen neuen Diensthostnamen anzeigen. Pods für die Hostnamenanwendung sollten den STATUS Running haben.

Beachten Sie, dass sich die Pod-Namen von den Beispielnamen unterscheiden.

Name der NEG abrufen

Mit dem Befehl gcloud compute network-endpoint-groups list können Sie den Namen der NEG ermitteln und nach der Zone des Clusters und dem Namen des Deployments filtern. Weisen Sie den NEG-Namen einer Variablen mit der Bezeichnung DEPLOYMENT_NAME zu:

export DEPLOYMENT_NAME=$(gcloud compute network-endpoint-groups list \
       --filter="us-west1-b AND hostname" \
       --format="get(name)")
echo $DEPLOYMENT_NAME

NEG-Konfiguration untersuchen

Mit den Befehlen gcloud compute network-endpoint-groups list-network-endpoints und gcloud compute network-endpoint-groups describe können Sie Details und Endpunkte in der NEG untersuchen.

gcloud compute network-endpoint-groups describe $DEPLOYMENT_NAME \
    --zone=us-west1-b
gcloud compute network-endpoint-groups list-network-endpoints $DEPLOYMENT_NAME \
    --zone=us-west1-b

Load-Balancer für GKE 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 NEG 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 der Grundlage von Regeln weiter, die Sie für den Host und den Pfad einer eingehenden URL definieren. Auf eine regionale URL-Zuordnung kann nur von einer regionalen Zielproxy-Regel in derselben Region verwiesen 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.

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-gke-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-Dienst 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-gke-backend-service fest.
  4. Wählen Sie unter Backend-Typ Netzwerk-Endpunktgruppen aus.
  5. Gehen Sie auf der Karte Neues Back-End des Abschnitts Back-Ends folgendermaßen vor:
    1. Legen Sie die Netzwerk-Endpunktgruppe auf die NEG fest, die von GKE erstellt wurde. Informationen dazu, wie Sie den Namen ermitteln, erhalten Sie unter Name der NEG abrufen.
    2. Geben Sie eine maximale Rate von 5 RPS pro Endpunkt ein. Google Cloud überschreitet diesen Höchstwert bei Bedarf.
    3. Klicken Sie auf Fertig.
  6. Wählen Sie im Abschnitt Systemdiagnose die Option Systemdiagnose erstellen mit den folgenden Parametern aus:
    1. Name: l7-ilb-gke-basic-check
    2. Protokoll: HTTP
    3. Portspezifikation: Bereitstellungsport
    4. Klicken Sie auf Speichern und Fortfahren.
  7. Klicken Sie auf Erstellen.

URL-Zuordnung konfigurieren

  1. Klicken Sie auf Host- und Pfadregeln. Vergewissern Sie sich, dass der l7-ilb-gke-backend-service der einzige Back-End-Dienst für alle nicht übereinstimmenden Hosts und alle nicht übereinstimmenden Pfade ist.

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-gke-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-gke-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.199 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-Zertifikatressourcen 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-gke-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-gke-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.199 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 es 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 Dateien im PEM-Format 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

  1. 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-gke-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-gke-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=l7-ilb-gke-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1
    
  3. Fügen Sie dem Back-End-Dienst NEG-Back-Ends mit dem Befehl gcloud compute backend-services add-backend hinzu.

    gcloud compute backend-services add-backend l7-ilb-gke-backend-service \
       --network-endpoint-group=$DEPLOYMENT_NAME \
       --network-endpoint-group-zone=us-west1-b \
       --region=us-west1 \
       --balancing-mode=RATE \
       --max-rate-per-endpoint=5
    
  4. Erstellen Sie die URL-Zuordnung mit dem Befehl gcloud compute url-maps create.

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

    Bei HTTP:

    Verwenden Sie den Befehl gcloud compute target-http-proxies create.

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

    Bei HTTPS:

    Informationen zum Erstellen von SSL-Zertifikatressourcen 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 mit dem Befehl gcloud compute ssl-certificates create ein regionales SSL-Zertifikat.

    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 einen Zielproxy mit dem Befehl gcloud compute target-https-proxies create zu erstellen.

    gcloud compute target-https-proxies create

    gcloud compute target-https-proxies create l7-ilb-gke-proxy \
      --url-map=l7-ilb-gke-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. Beachten Sie, 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-gke-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=10.1.2.199 \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=l7-ilb-gke-proxy \
      --target-http-proxy-region=us-west1
    

    Bei HTTPS:

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

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

API

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

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

Erstellen Sie den regionalen Back-End-Dienst. Stellen Sie dazu eine POST-Anfrage an die Methode regionBackendServices.insert und ersetzen Sie [project-id] durch Ihre Projekt-ID und [neg-name] durch den Namen der von Ihnen erstellten NEG.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/backendServices
{
  "name": "l7-ilb-gke-backend-service",
  "backends": [
    {
      "group": "https://www.googleapis.com/compute/v1/projects/[project-id]/zones/us-west1-b/networkEndpointGroups/[neg-name]",
      "balancingMode": "RATE",
      "maxRatePerEndpoint": 5
    }
  ],
  "healthChecks": [
    "projects/[project-id]/regions/us-west1/healthChecks/l7-ilb-gke-basic-check"
  ],
  "loadBalancingScheme": "INTERNAL_MANAGED"
}

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

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

Erstellen Sie den HTTP-Zielproxy. Stellen Sie dazu eine POST-Anfrage an die Methode regionTargetHttpProxies.insert und ersetzen Sie dabei [project-id] durch Ihre Projekt-ID.

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

Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST-Anfrage an die Methode forwardingRules.insert und ersetzen Sie dabei [project-id] durch Ihre Projekt-ID.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/forwardingRules
{
  "name": "l7-ilb-gke-forwarding-rule",
  "IPAddress": "10.1.2.199",
  "IPProtocol": "TCP",
  "portRange": "80-80",
  "target": "projects/[project-id]/regions/us-west1/targetHttpProxies/l7-ilb-gke-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 in der Zone zum Testen der Konnektivität erstellen

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

Load-Balancer testen

Melden Sie sich bei der Clientinstanz an, damit HTTP(S)-Dienste auf den Back-Ends über die IP-Adresse der Weiterleitungsregel des internen HTTP(S)-Load-Balancers erreichbar sind und der Traffic ausgeglichen auf die Endpunkte in der NEG verteilt wird.

Verbindung mit jeder Clientinstanz über SSH

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

Überprüfen, ob die IP ihren Hostnamen bereitstellt

curl 10.1.2.199

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.199: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.199)"
done
echo "***"
echo "*** Results of load-balancing to 10.1.2.199: "
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.199:443
)"
done
echo "***"
echo "*** Results of load-balancing to 10.1.2.199: "
echo "***"
echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
echo
}

Beachten Sie, dass mehrere Proxys das Load-Balancing für jeden curl-Befehl durchführen und sie nicht die Auswahl der Back-Ends koordinieren. Daher erhalten die Back-Ends in diesem Test nicht die gleiche Anzahl von Anfragen. Langfristig gesehen, also mit Tausenden bis Millionen Anfragen, nähert sich der Anteil der Anfragen, die von jedem Back-End empfangen werden, einer gleichmäßigen Verteilung an.

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 diesem Cookie leitet der Load-Balancer die Anfrage an dieselbe Back-End-VM oder denselben Back-End-Endpunkt weiter. Für interne 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.

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" ]
}

Nächste Schritte