Wie erstelle ich einen Load Balancer via OSC

Das folgende HowTo beschreibt, wie Sie mit OpenStack OSC einen Load Balancer (LB) unter Verwendung einer Floating IP konfigurieren können. Bitte beachten Sie den Disclaimer. Viele weitere LB Konfigurationsbeispiele siehe lb-basic-cookbook.

Es kann vorteilhaft sein, bei der Einrichtung des VIP eines Load Balancers eine Floating IP-Adresse zu verwenden, um sicherzustellen, dass Sie die Kontrolle über die IP behalten, die als Floating IP zugewiesen wird, falls der Load Balancer zerstört, verschoben oder neu erstellt werden muss.

Bemerkung

Beachten Sie, dass bei iPv6 Load balancing mit der folgenden Methode nicht möglich ist, da Floating IPs nicht mit iPv6 funktionieren.

Konfiguration eines HTTP LoadBalancer

  • Die Backend-Server 192.0.2.10 und 192.0.2.11 im Subnetz private-subnet wurden mit einer HTTP-Anwendung auf TCP-Port 80 konfiguriert.
  • Diese Backend-Server wurden mit einem Health Check unter dem URL-Pfad „/healthcheck“ konfiguriert. Siehe unter lb-health-monitor.
  • Das Neutron Netzwerk public ist ein gemeinsames externes Netzwerk, das vom Cloud-Betreiber erstellt wurde und über das Internet erreichbar ist.
  • Es soll ein HTTP-Loadbalancer konfiguriert werden der aus dem Internet über eine Floating IP zugänglich ist, Web-Anfragen an die Backend-Server verteilt und den Pfad „/healthcheck“ überprüft, um die Verfügbarketi der Backends sicherzustellen.

Lösung:

  • Erstellen Sie den Load Balancer lb1 im private-subnet.
  • Erstellen Sie einen Listener listener1.
  • Erstellen Sie den Pool pool1 als Standard-Pool des listener1.
  • Erstellen Sie einen Health Monitor auf pool1, der den Pfad „/healthcheck“ testet.
  • Fügen Sie die Member 192.0.2.10 und 192.0.2.11 im private-subnet zu dem pool1 hinzu.
  • Erstellen Sie eine freie floating IP-Adresse im public.
  • Verknüpfen Sie diese Floating IP mit dem VIP-Port des lb1.

CLI-Befehle:

openstack loadbalancer create --name lb1 --vip-subnet-id private-subnet
# Re-run the following until lb1 shows ACTIVE and ONLINE statuses:
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
# The following IDs should be visible in the output of previous commands
openstack floating ip set --port <load_balancer_vip_port_id> <floating_ip_id>

HTTPS-terminierter LoadBalancer

  • Auf den Backend-Servern 192.0.2.10 und 192.0.2.11 im Subnetz private-subnet wird eine HTTP-Anwendung auf dem TCP-Port 80 konfiguriert.
  • Ein TLS-Zertifikat (server.crt), der private Schlüssel (server.key) sowie ein CA-Zertifikat (ca-chain.crt) für die Domain www.example.com wurden von einer Zertifizierungsstelle wie z.B. LetsEncrypt bereitgestellt.
  • Der private Schlüssel darf nicht mit einem Passwort verschlüsselt sein.
  • Das Ziel ist es, einen TLS-terminierten HTTPS-LoadBalancer zu konfigurieren, der über das Internet erreichbar ist und die eingehenden Verbindungen verschlüsselt. Die Anfragen vom LoadBalancer zu den Backend-Servern werden unverschlüsselt an die Backend-Server weitergereicht.
  • Die Zertifikate werden sicher im OpenStack Barbican Schlüsselmanagement gespeichert.

Konfiguration HTTPS-terminierter LoadBalancer

  • Erstellung einer PKCS12-Datei, die server.crt, server.key und ca-chain.crt enthält.
  • Erstellung eines Barbican-Secrets (tls_secret1) zur Speicherung der PKCS12-Datei.
  • Erstellung des LoadBalancers lb2 im Subnetz private-subnet.
  • Erstellung eines LB Listeners namens listener2 mit dem Protokoll TERMINATED_HTTPS, der tls_secret1 als seinen Standard-TLS-Container verwendet.
  • Erstellung des Pools pool2 als Standard-Pool für listener2.
  • Hinzufügen der Backends 192.0.2.10 und 192.0.2.11 aus private-subnet zu dem pool2.
  • Beantragung einer Floating IP-Adresse aus public.
  • Verknüpfung der Floating IP mit dem VIP-Port des LoadBalancers lb2.

Generierung eines HTTPS LoadBalancers mit der CLI

# Erstellen eines P12-Archivs
openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12

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

# LoadBalancer erstellen
openstack loadbalancer create --name lb2 --vip-subnet-id public

# Folgenden Befehl wiederholen, bis lb2 den Status ACTIVE und ONLINE zeigt
openstack loadbalancer show lb2

# Listener für den LoadBalancer erstellen
openstack loadbalancer listener create --protocol-port 443 --protocol TERMINATED_HTTPS --name listener2 --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1

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

# Mitglieder zum Pool 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
openstack floating ip create public

# Zuweisung der Floatin IP zu dem LoadBalancer (IDs aus den vorherigen Ausgaben übernähmen)
openstack floating ip set --port <load_balancer_vip_port_id> <floating_ip_id>

Bemerkung

Weiterführende Anweisungen zur Generierung eines SNI HTTPS-LoadBalancers (mehrere Domains oder ein Wildcard-Zertifikat) kann unter folgendem Link aufgeruffen werden: Deploy a TLS-terminated HTTPS load balancer with SNI