Load Balancer
Questa guida descrive come configurare un Load Balancer (LB) con l'OpenStack CLI utilizzando una Floating IP. Il servizio Load Balancer si basa su Octavia.
Prerequisiti
- Una rete privata con una subnet (vedere Configurazione della rete).
- Server backend con la Sua applicazione in esecuzione.
- Application Credentials (
cloud.yaml) configurate per l'accesso CLI (vedere Strumenti).
Utilizzare una Floating IP per il VIP del Load Balancer Le garantisce di mantenere il controllo dell'indirizzo IP nel caso in cui il Load Balancer debba essere distrutto, spostato o ricreato.
Note
Il load balancing con IPv6 non è possibile con questo metodo, poiché le Floating IP non funzionano con IPv6.
Load Balancer HTTP
Scenario
- I server backend 192.0.2.10 e 192.0.2.11 in private-subnet eseguono un'applicazione HTTP sulla porta TCP 80.
- Un health check è configurato sul percorso URL
/healthcheck. - La rete Neutron public è la rete esterna condivisa accessibile via Internet.
Passaggi
- Crei il Load Balancer lb1 in private-subnet.
- Crei un Listener listener1 (HTTP, porta 80).
- Crei un Pool pool1 come pool predefinito per listener1.
- Crei un Health Monitor su pool1 che verifica il percorso
/healthcheck. - Aggiunga i membri 192.0.2.10 e 192.0.2.11 a pool1.
- Crei una Floating IP in public.
- Associ la Floating IP alla porta VIP di lb1.
Comandi 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 con terminazione HTTPS
Scenario
- I server backend 192.0.2.10 e 192.0.2.11 eseguono un'applicazione HTTP sulla porta TCP 80.
- Sono stati forniti un certificato TLS (
server.crt), una chiave privata (server.key) e un certificato CA (ca-chain.crt) per il dominiowww.example.com. - La chiave privata non deve essere cifrata con password.
- Il Load Balancer termina il TLS e inoltra le richieste non cifrate ai server backend.
- I certificati sono archiviati in modo sicuro in OpenStack Barbican Key Management.
Passaggi
- Crei un file PKCS12 contenente il certificato, la chiave e la catena CA.
- Lo memorizzi come secret Barbican (
tls_secret1). - Crei il Load Balancer lb2 in private-subnet.
- Crei un Listener listener2 con il protocollo
TERMINATED_HTTPS, utilizzandotls_secret1. - Crei un Pool pool2 come pool predefinito per listener2.
- Aggiunga i membri backend a pool2.
- Crei e associ una Floating IP.
Comandi 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
Per SNI (più domini o un certificato wildcard), consulti il Octavia Basic Cookbook: HTTPS con terminazione TLS e SNI.