How to create a 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.

It may be advantageous to use a floating IP address when setting up the VIP of a load balancer to ensure that you retain control over the IP assigned as the floating IP if the load balancer needs to be destroyed, moved, or recreated.

Note

Note that with iPv6 load balancing is not possible with the following method because floating IPs do not work with iPv6.

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.
  • These backend servers were configured with a health check under the URL path “/healthcheck”. See lb-health-monitor.
  • The Neutron Network public is a shared external network created by the cloud operator and accessible over the Internet.
  • 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.

Solution:

  • Create the Load Balancer lb1 in the private-subnet.
  • Create a listener listener1.
  • Create the pool pool1 as the default pool of the listener1.
  • Create a health monitor on pool1 that tests the path “/healthcheck”.
  • 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.
  • Link this Floating IP with the VIP port of the lb1.

CLI commands:

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>

Note

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