Aller au contenu

Load Balancer

Ce guide décrit comment configurer un Load Balancer (LB) avec l'OpenStack CLI en utilisant une Floating IP. Le service Load Balancer est propulsé par Octavia.

Prérequis

  • Un réseau privé avec un sous-réseau (voir Configuration du réseau).
  • Des serveurs backend avec votre application en cours d'exécution.
  • Des Application Credentials (cloud.yaml) configurés pour l'accès CLI (voir Outils).

Utiliser une Floating IP pour le VIP du Load Balancer vous garantit de garder le contrôle de l'adresse IP si le Load Balancer doit être détruit, déplacé ou recréé.

Note

Le load balancing avec IPv6 n'est pas possible avec cette méthode, car les Floating IPs ne fonctionnent pas avec IPv6.

Load Balancer HTTP

Scénario

  • Les serveurs backend 192.0.2.10 et 192.0.2.11 dans private-subnet exécutent une application HTTP sur le port TCP 80.
  • Un health check est configuré sur le chemin d'URL /healthcheck.
  • Le réseau Neutron public est le réseau externe partagé accessible via Internet.

Étapes

  1. Créez le Load Balancer lb1 dans private-subnet.
  2. Créez un Listener listener1 (HTTP, port 80).
  3. Créez un Pool pool1 comme pool par défaut pour listener1.
  4. Créez un Health Monitor sur pool1 testant le chemin /healthcheck.
  5. Ajoutez les membres 192.0.2.10 et 192.0.2.11 à pool1.
  6. Créez une Floating IP dans public.
  7. Associez la Floating IP au port VIP de lb1.

Commandes CLI

openstack loadbalancer create --name lb1 --vip-subnet-id private-subnet
# Re-run until lb1 shows ACTIVE and ONLINE:
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
# Use the VIP port ID and Floating IP ID from the outputs above:
openstack floating ip set --port <load_balancer_vip_port_id> <floating_ip_id>

Load Balancer à terminaison HTTPS

Scénario

  • Les serveurs backend 192.0.2.10 et 192.0.2.11 exécutent une application HTTP sur le port TCP 80.
  • Un certificat TLS (server.crt), une clé privée (server.key) et un certificat CA (ca-chain.crt) pour le domaine www.example.com ont été fournis.
  • La clé privée ne doit pas être chiffrée par mot de passe.
  • Le Load Balancer termine le TLS et transmet les requêtes non chiffrées aux serveurs backend.
  • Les certificats sont stockés de manière sécurisée dans OpenStack Barbican Key Management.

Étapes

  1. Créez un fichier PKCS12 contenant le certificat, la clé et la chaîne CA.
  2. Stockez-le en tant que secret Barbican (tls_secret1).
  3. Créez le Load Balancer lb2 dans private-subnet.
  4. Créez un Listener listener2 avec le protocole TERMINATED_HTTPS, en utilisant tls_secret1.
  5. Créez un Pool pool2 comme pool par défaut pour listener2.
  6. Ajoutez les membres backend à pool2.
  7. Créez et associez une Floating IP.

Commandes CLI

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

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

# Create the Load Balancer
openstack loadbalancer create --name lb2 --vip-subnet-id private-subnet
# Re-run until lb2 shows ACTIVE and ONLINE:
openstack loadbalancer show lb2

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

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

# Add members
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

# Create and assign a Floating IP
openstack floating ip create public
openstack floating ip set --port <load_balancer_vip_port_id> <floating_ip_id>

Note

Pour SNI (plusieurs domaines ou un certificat wildcard), consultez le Octavia Basic Cookbook : HTTPS avec terminaison TLS et SNI.