Overview
Octavia is one of the most valuable and powerful projects in the OpenStack ecosystem — it delivers production-grade Load Balancer as a Service (LBaaS). While implementing it manually can be quite challenging and time-consuming, Kolla-Ansible dramatically simplifies the entire process. With just a few configuration parameters, you can deploy and start using a fully functional Octavia environment in minutes.
However, there is one common point of confusion that prevents the module from working correctly for many deployers: the controller nodes’ access to the lb-mgt-net (Octavia management network). In this article, I explain exactly why this issue occurs, and I provide clear, tested solutions for both staging and production environments.
Environment-Specific Requirements
For Production Environments:
- Use separate Controller and Compute nodes (All-in-One deployment is not recommended for production).
- Use VLAN as the network type for the Octavia management network (lb-mgt-net).
- Switch uplink ports must be configured as trunk ports to carry VLAN traffic.
- Neutron ML2 must have VLAN enabled:
- type_drivers must include vlan
- tenant_network_types must include vlan
For Staging / Test Environments:
- You can use provider networks with tenant network type (vxlan or geneve).
- Kolla-Ansible will automatically create a virtual interface on the host for bridge mapping, providing the required Layer 2 connectivity.
- A single-node or combined control/compute setup is acceptable for testing.
Important Note:The most critical factor in any Octavia deployment is proper Layer 2/3 connectivity between the Controller nodes and the lb-mgt-net. This is the most common cause of deployment failures.
Purpose of This Document
This guide provides a practical, step-by-step approach to deploying Octavia with the Amphora provider using Kolla-Ansible. It covers the complete process from enabling the service to resolving the most common networking challenges, particularly around the lb-mgt-net (Octavia management network).
The guide includes separate instructions for Production (VLAN provider network) and Staging/Test environments.
Step 1: Networking Configuration for Octavia Management Network (lb-mgt-net)
Proper networking setup for the Octavia management network is the most critical and error-prone part of the deployment.
Production Environment – VLAN Provider Network
1. Create VLAN interface on Controller nodes
Make this configuration persistent using your OS network configuration method (netplan, ifcfg, etc.).
Important: This VLAN interface must exist only on Controller nodes. Compute nodes should not have this interface configured.
2. Update globals.yml
enable_neutron_provider_networks: true
octavia_network_interface: "bond0.208"
3. Create custom ML2 configuration
mkdir -p /etc/kolla/config/neutron/
cat << 'EOF' > /etc/kolla/config/neutron/ml2_conf.ini
[ml2_type_geneve]
vni_ranges = 1:65536
[ml2_type_vlan]
network_vlan_ranges = physnet1:1:4094
[ml2_type_vxlan]
vni_ranges = 1:65536
EOF
4. Configure Octavia parameters in globals.yml
enable_octavia: "yes"
octavia_network_type: "provider"
octavia_network_interface: "bond0.208"
octavia_amp_flavor:
name: "amphora"
is_public: no
vcpus: 2
ram: 2048
disk: 5
octavia_amp_network:
name: lb-mgmt-net
provider_network_type: vlan
provider_segmentation_id: 208
provider_physical_network: physnet1
external: false
shared: false
subnet:
name: lb-mgmt-subnet
cidr: "172.26.12.0/23"
allocation_pool_start: "172.26.12.20"
allocation_pool_end: "172.26.12.253"
enable_dhcp: yes
Staging / Test Environment – Tenant Network
For staging environments, you can use the simpler tenant network type (octavia_network_type: “tenant”).
Important Note about dhclient: dhclient is deprecated and removed from default repositories in newer distributions (Rocky Linux 9/10, CentOS Stream 10, etc.).
Recommended Solution:
Before running the deployment, update the Kolla-Ansible template to use dhcpcd instead of dhclient.
Edit the following file:
Bash
# Path inside your Kolla-Ansible source
share/kolla-ansible/ansible/roles/octavia/templates/octavia-interface.service.j2
Replace the service file content with these lines:
ExecStartPre=/sbin/ip link set dev {{ octavia_network_interface }} address {{ port_info.port.mac_address }}ExecStart=/sbin/dhcpcd --oneshot -f /etc/dhcp/octavia-dhcpcd.conf {{ octavia_network_interface }}ExecStop=/sbin/dhcpcd -k {{ octavia_network_interface }}#ExecStart=/sbin/dhclient -v {{ octavia_network_interface }} -cf /etc/dhcp/octavia-dhclient.conf#ExecStop=/sbin/dhclient -r {{ octavia_network_interface }}
Then update your globals.yml:
enable_octavia: trueoctavia_network_type: "tenant"
Step 2: Deploy Octavia
Run the following commands:
# Generate certificates
kolla-ansible octavia-certificates -i <inventory>
# Deploy Octavia (and related services)
kolla-ansible deploy -i <inventory> --tags common,horizon,octavia
# Post deploy to generate octavia-openrc
kolla-ansible post-deploy -i <inventory>
Step 3: Verification
After the deployment completes successfully, verify that Octavia is working correctly.
# Load admin credentials
source /etc/kolla/admin-openrc.sh
# Create a test load balancer
openstack loadbalancer create --name test-lb --vip-subnet-id <your-subnet-id>
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| admin_state_up | True |
| availability_zone | None |
| created_at | 2026-05-05T09:31:20 |
| description | |
| flavor_id | None |
| id | 40eba02e-1008-40a0-9f3b-d42e87c715dc |
| listeners | None |
| name | |
| operating_status | OFFLINE |
| pools | None |
| project_id | 633e4085ce0c4815bdf1f1d38cec670a |
| provider | amphora |
| provisioning_status | PENDING_CREATE |
| updated_at | None |
| vip_address | 10.0.0.24 |
| vip_network_id | 4afffbc7-7f1b-486a-818a-1e5e9107ed06 |
| vip_port_id | d12f97f4-8f5c-4aba-9b26-add8cea8a313 |
| vip_qos_policy_id | None |
| vip_subnet_id | 8b6c19db-200a-4d24-9cee-45f2fed663f6 |
| vip_vnic_type | normal |
| vip_sg_ids | [] |
| tags | None |
| additional_vips | [] |
+---------------------+--------------------------------------+
# Check load balancer status
openstack loadbalancer list
+--------------------------------------+------+----------------------------------+-------------+---------------------+------------------+----------+
| id | name | project_id | vip_address | provisioning_status | operating_status | provider |
+--------------------------------------+------+----------------------------------+-------------+---------------------+------------------+----------+
| 40eba02e-1008-40a0-9f3b-d42e87c715dc | | 633e4085ce0c4815bdf1f1d38cec670a | 10.0.0.24 | ACTIVE | ONLINE | amphora |
+--------------------------------------+------+----------------------------------+-------------+---------------------+------------------+----------+
# Check Amphora instances (Octavia VMs)
openstack server list --project service
+--------------------------------------+----------------------------------------------+--------+---------------------------------------------+---------------------------+---------+----------------------------------+
| ID | Name | Status | Networks | Image | Flavor | Project ID |
+--------------------------------------+----------------------------------------------+--------+---------------------------------------------+---------------------------+---------+----------------------------------+
| c3e0a1f0-6a87-4471-b3f7-89477a2d3454 | amphora-1b529fe7-6bd3-44c6-8943-e459af72aa23 | ACTIVE | demo-net=10.0.0.173; lb-mgmt-net=10.1.0.145 | amphora-x64-haproxy.qcow2 | amphora | 09151466dd674d7293f37dafd8242559 |
+--------------------------------------+----------------------------------------------+--------+---------------------------------------------+---------------------------+---------+----------------------------------+
Expected Results:
- The load balancer should appear in the list and eventually reach ACTIVE status.
- You should see one or more Amphora instances running under the service project.
- In Horizon dashboard, you should now see the Load Balancers menu under Project → Network.
Conclusion
By following this guide, you should now have a working Load Balancer as a Service (LBaaS) in your OpenStack environment.
Feel free to reach out in the comments if you face any issues during deployment.
Happy load balancing!