Guide: Load Balancers: Difference between revisions
No edit summary |
No edit summary |
||
| Line 14: | Line 14: | ||
== Create a subnet of the private network== | == Create a subnet of the private network== | ||
<pre> | <pre> | ||
openstack subnet create | openstack subnet create myNet_v4 --network myNet --subnet-range 192.168.100.0/24 | ||
</pre> | </pre> | ||
| Line 20: | Line 20: | ||
<pre> | <pre> | ||
openstack router create myRouter | openstack router create myRouter | ||
openstack router add subnet myRouter | openstack router add subnet myRouter myNet_v4 | ||
openstack router set myRouter --external-gateway provider_net | openstack router set myRouter --external-gateway provider_net | ||
</pre> | </pre> | ||
| Line 52: | Line 52: | ||
sudo apt -y install apache2 && \ | sudo apt -y install apache2 && \ | ||
sudo systemctl enable --now apache2 && \ | sudo systemctl enable --now apache2 && \ | ||
echo | echo $(hostname) | sudo tee /var/www/html/index.html | ||
</pre>Add security rules to allow HTTP access on port 80 as described in the section [[Security#Example: Opening Port 443 for HTTPS Access|Security Rules.]] | </pre>Add security rules to allow HTTP access on port 80 as described in the section on [[Security#Example: Opening Port 443 for HTTPS Access|Security Rules.]] | ||
Test the web servers:<pre>curl $FIP1 | Test the web servers:<pre>curl $FIP1 | ||
| Line 65: | Line 64: | ||
openstack loadbalancer create \ | openstack loadbalancer create \ | ||
--name myLB \ | --name myLB \ | ||
--vip-subnet-id | --vip-subnet-id myNet_v4 \ | ||
--provider ovn | --provider ovn | ||
</pre> | </pre> | ||
Revision as of 00:38, 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 of the private network
openstack subnet create myNet_v4 --network myNet --subnet-range 192.168.100.0/24
Create a router and connect it to a public network
openstack router create myRouter openstack router add subnet myRouter myNet_v4 openstack router set myRouter --external-gateway provider_net
Creating Backend Instances for Load Balancing
As an example, we create two identical web server instances that will serve as backend nodes for the load balancer.
Create two identical VMs
openstack server create \ --image ubuntu-24.04 \ --flavor m1.small \ --network myNet \ --key-name myKey \ --min 2 --max 2 \ webserver
Associate (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 basic web servers on the VMs
SSH into each VM and run:
sudo apt update && \ sudo apt -y install apache2 && \ sudo systemctl enable --now apache2 && \ echo $(hostname) | sudo tee /var/www/html/index.html
Add security rules to allow HTTP access on port 80 as described in the section on Security Rules. Test the web servers:
curl $FIP1 # Expected output: webserver-1
Load Balancer Setup and Backend Integration
Create the load balancer
openstack loadbalancer create \ --name myLB \ --vip-subnet-id myNet_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 (private) 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 \ myPoolopenstack 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