Guide: Load Balancers: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 7: | Line 7: | ||
= Network Setup = | = Network Setup = | ||
== Create a private network | == Create a private network == | ||
<pre> | <pre> | ||
openstack network create myNet | openstack network create myNet | ||
</pre> | </pre> | ||
== Create a subnet | == Create a subnet == | ||
<pre> | <pre> | ||
openstack subnet create mySubNet_v4 --network myNet --subnet-range 192.168.100.0/24 | openstack subnet create mySubNet_v4 --network myNet --subnet-range 192.168.100.0/24 | ||
</pre> | </pre> | ||
== Create a router and connect it to the public network | == Create a router and connect it to the public network == | ||
<pre> | <pre> | ||
openstack router create myRouter | openstack router create myRouter | ||
| Line 26: | Line 26: | ||
= Example: Two Webserver as Backend for the Load Balancer = | = Example: Two Webserver as Backend for the Load Balancer = | ||
== Create 2 identical VMs as web servers | == Create 2 identical VMs as web servers == | ||
<pre> | <pre> | ||
openstack server create \ | openstack server create \ | ||
| Line 37: | Line 37: | ||
</pre> | </pre> | ||
== Assign temporary floating IPs to make the VMs accessible | == Assign (temporary) floating IPs to make the VMs accessible == | ||
<pre> | <pre> | ||
FIP1=$(openstack floating ip create provider_net -f value -c floating_ip_address) | FIP1=$(openstack floating ip create provider_net -f value -c floating_ip_address) | ||
| Line 47: | Line 47: | ||
== Install a basic web server on the VMs == | == Install a basic web server on the VMs == | ||
=== SSH into each VM and run: === | |||
<pre> | <pre> | ||
sudo apt update && \ | sudo apt update && \ | ||
| Line 56: | Line 56: | ||
</pre> | </pre> | ||
=== Add security rules to allow HTTP access on port 80 as described in the Security section. === | |||
=== Test the web servers: === | |||
<pre> | <pre> | ||
curl $FIP1 | curl $FIP1 | ||
| Line 68: | Line 67: | ||
== Create a Load Balancer == | == Create a Load Balancer == | ||
=== Create the load balancer: === | |||
<pre> | <pre> | ||
openstack loadbalancer create \ | openstack loadbalancer create \ | ||
| Line 77: | Line 76: | ||
</pre> | </pre> | ||
=== Create a listener on port 80: === | |||
<pre> | <pre> | ||
openstack loadbalancer listener create \ | openstack loadbalancer listener create \ | ||
| Line 87: | Line 85: | ||
</pre> | </pre> | ||
=== Create a pool for the listener: === | |||
<pre> | <pre> | ||
openstack loadbalancer pool create \ | openstack loadbalancer pool create \ | ||
| Line 98: | Line 95: | ||
== Add Web Servers to the Pool == | == Add Web Servers to the Pool == | ||
=== Get the subnet ID and VM IPs: === | |||
<pre> | <pre> | ||
SUBNET_ID=$(openstack subnet list --network myNet -f value -c ID) | SUBNET_ID=$(openstack subnet list --network myNet -f value -c ID) | ||
| Line 106: | Line 103: | ||
</pre> | </pre> | ||
=== Add each VM to the pool: === | |||
<pre> | <pre> | ||
openstack loadbalancer member create \ | openstack loadbalancer member create \ | ||
| Line 123: | Line 119: | ||
== Assign a Floating IP to the Load Balancer == | == Assign a Floating IP to the Load Balancer == | ||
=== Create a floating IP and associate it with the VIP of the load balancer: === | |||
<pre> | <pre> | ||
FIP=$(openstack floating ip create provider_net -f value -c floating_ip_address) | FIP=$(openstack floating ip create provider_net -f value -c floating_ip_address) | ||
| Line 131: | Line 127: | ||
</pre> | </pre> | ||
=== Test the load balancer: === | |||
<pre> | <pre> | ||
curl $FIP | curl $FIP | ||
# Expected output (may alternate between VMs): webserver-1 / webserver-2 | # Expected output (may alternate between VMs): webserver-1 / webserver-2 | ||
</pre> | </pre> | ||
Revision as of 00:05, 26 January 2026
This guide walks through creating a private network, two web server VMs, and exposing them via an OpenStack load balancer. It covers network creation, VM provisioning, floating IP assignment, basic web server setup, and load balancer configuration and testing.
Network Setup
Create a private network
openstack network create myNet
Create a subnet
openstack subnet create mySubNet_v4 --network myNet --subnet-range 192.168.100.0/24
Create a router and connect it to the public network
openstack router create myRouter openstack router add subnet myRouter mySubNet_v4 openstack router set myRouter --external-gateway provider_net
Example: Two Webserver as Backend for the Load Balancer
Create 2 identical VMs as web servers
openstack server create \ --image ubuntu-24.04 \ --flavor m1.small \ --network myNet \ --key-name myKey \ --min 2 --max 2 \ webserver
Assign (temporary) floating IPs to make the VMs accessible
FIP1=$(openstack floating ip create provider_net -f value -c floating_ip_address) FIP2=$(openstack floating ip create provider_net -f value -c floating_ip_address) openstack server add floating ip webserver-1 $FIP1 openstack server add floating ip webserver-2 $FIP2
Install a basic web server on the VMs
SSH into each VM and run:
sudo apt update && \ sudo apt -y install apache2 && \ sudo systemctl enable --now apache2 && \ echo webserver-1 | sudo tee /var/www/html/index.html
Add security rules to allow HTTP access on port 80 as described in the Security section.
Test the web servers:
curl $FIP1 # Expected output: webserver-1
Integrate the Web Servers with a Load Balancer
Create a Load Balancer
Create the load balancer:
openstack loadbalancer create \ --name myLB \ --vip-subnet-id mySubNet_v4 \ --provider ovn
Create a listener on port 80:
openstack loadbalancer listener create \
--name myListener \
--protocol TCP \
--protocol-port 80 \
myLB
Create a pool for the listener:
openstack loadbalancer pool create \
--name myPool \
--listener myListener \
--protocol TCP \
--lb-algorithm SOURCE_IP_PORT
Add Web Servers to the Pool
Get the subnet ID and VM IPs:
SUBNET_ID=$(openstack subnet list --network myNet -f value -c ID) WEB1_IP=$(openstack server show webserver-1 -f value -c addresses | grep -o '192\.168\.100\.[0-9]\+') WEB2_IP=$(openstack server show webserver-2 -f value -c addresses | grep -o '192\.168\.100\.[0-9]\+')
Add each VM to the pool:
openstack loadbalancer member create \
--subnet-id $SUBNET_ID \
--address $WEB1_IP \
--protocol-port 80 \
myPool
openstack loadbalancer member create \
--subnet-id $SUBNET_ID \
--address $WEB2_IP \
--protocol-port 80 \
myPool
Assign a Floating IP to the Load Balancer
Create a floating IP and associate it with the VIP of the load balancer:
FIP=$(openstack floating ip create provider_net -f value -c floating_ip_address) VIPPORT=$(openstack loadbalancer show myLB -f value -c vip_port_id) openstack floating ip set --port $VIPPORT $FIP
Test the load balancer:
curl $FIP # Expected output (may alternate between VMs): webserver-1 / webserver-2