Zum Inhalt

Load Balancer

Diese Anleitung beschreibt, wie Sie einen Load Balancer (LB) mit der OpenStack CLI unter Verwendung einer Floating IP konfigurieren. Der Load-Balancer-Dienst wird von Octavia bereitgestellt.

Voraussetzungen

  • Ein privates Netzwerk mit Subnetz (siehe Netzwerk einrichten).
  • Backend-Server mit Ihrer laufenden Anwendung.
  • Application Credentials (cloud.yaml) für CLI-Zugriff konfiguriert (siehe Tools).

Die Verwendung einer Floating IP für das Load-Balancer-VIP stellt sicher, dass Sie die Kontrolle über die IP-Adresse behalten, falls der Load Balancer zerstört, verschoben oder neu erstellt werden muss.

Note

Load Balancing mit IPv6 ist mit dieser Methode nicht möglich, da Floating IPs nicht mit IPv6 funktionieren.

HTTP Load Balancer

Szenario

  • Die Backend-Server 192.0.2.10 und 192.0.2.11 im Subnetz private-subnet betreiben eine HTTP-Anwendung auf TCP-Port 80.
  • Ein Health Check ist unter dem URL-Pfad /healthcheck konfiguriert.
  • Das Neutron-Netzwerk public ist das gemeinsame externe Netzwerk, das über das Internet erreichbar ist.

Schritte

  1. Erstellen Sie den Load Balancer lb1 im private-subnet.
  2. Erstellen Sie einen Listener listener1 (HTTP, Port 80).
  3. Erstellen Sie einen Pool pool1 als Standard-Pool für listener1.
  4. Erstellen Sie einen Health Monitor auf pool1, der den Pfad /healthcheck testet.
  5. Fügen Sie die Member 192.0.2.10 und 192.0.2.11 zu pool1 hinzu.
  6. Erstellen Sie eine Floating IP in public.
  7. Verknüpfen Sie die Floating IP mit dem VIP-Port von lb1.

CLI-Befehle

openstack loadbalancer create --name lb1 --vip-subnet-id private-subnet
# Wiederholen Sie, bis lb1 den Status ACTIVE und ONLINE zeigt:
openstack loadbalancer show lb1

openstack loadbalancer listener create --name listener1 --protocol HTTP --protocol-port 80 lb1
openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
openstack loadbalancer healthmonitor create --delay 5 --max-retries 4 --timeout 10 --type HTTP --url-path /healthcheck pool1
openstack loadbalancer member create --subnet-id private-subnet --address 192.0.2.10 --protocol-port 80 pool1
openstack loadbalancer member create --subnet-id private-subnet --address 192.0.2.11 --protocol-port 80 pool1

openstack floating ip create public
# Verwenden Sie die VIP-Port-ID und Floating-IP-ID aus den obigen Ausgaben:
openstack floating ip set --port <load_balancer_vip_port_id> <floating_ip_id>

HTTPS-terminierter Load Balancer

Szenario

  • Die Backend-Server 192.0.2.10 und 192.0.2.11 betreiben eine HTTP-Anwendung auf TCP-Port 80.
  • Ein TLS-Zertifikat (server.crt), privater Schlüssel (server.key) und CA-Zertifikat (ca-chain.crt) für die Domain www.example.com wurden bereitgestellt.
  • Der private Schlüssel darf nicht passwortverschlüsselt sein.
  • Der Load Balancer terminiert TLS und leitet Anfragen unverschlüsselt an die Backend-Server weiter.
  • Zertifikate werden sicher in OpenStack Barbican Key Management gespeichert.

Schritte

  1. Erstellen Sie eine PKCS12-Datei mit Zertifikat, Schlüssel und CA-Chain.
  2. Speichern Sie diese als Barbican Secret (tls_secret1).
  3. Erstellen Sie den Load Balancer lb2 im private-subnet.
  4. Erstellen Sie einen Listener listener2 mit dem Protokoll TERMINATED_HTTPS, der tls_secret1 verwendet.
  5. Erstellen Sie einen Pool pool2 als Standard-Pool für listener2.
  6. Fügen Sie die Backend-Member zu pool2 hinzu.
  7. Erstellen und verknüpfen Sie eine Floating IP.

CLI-Befehle

# PKCS12-Archiv erstellen
openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12

# Secret in Barbican speichern
openstack secret store --name='tls_secret1' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server.p12)"

# Load Balancer erstellen
openstack loadbalancer create --name lb2 --vip-subnet-id private-subnet
# Wiederholen Sie, bis lb2 den Status ACTIVE und ONLINE zeigt:
openstack loadbalancer show lb2

# Listener mit TLS-Terminierung erstellen
openstack loadbalancer listener create \
    --protocol-port 443 \
    --protocol TERMINATED_HTTPS \
    --name listener2 \
    --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') \
    lb2

# Pool erstellen
openstack loadbalancer pool create --name pool2 --lb-algorithm ROUND_ROBIN --listener listener2 --protocol HTTP

# Member hinzufügen
openstack loadbalancer member create --subnet-id private-subnet --address 192.0.2.10 --protocol-port 80 pool2
openstack loadbalancer member create --subnet-id private-subnet --address 192.0.2.11 --protocol-port 80 pool2

# Floating IP erstellen und zuweisen
openstack floating ip create public
openstack floating ip set --port <load_balancer_vip_port_id> <floating_ip_id>

Note

Für SNI (mehrere Domains oder ein Wildcard-Zertifikat) siehe Octavia Basic Cookbook — TLS-terminated HTTPS with SNI.