Octavia with Amphora on Kolla-Ansible: Production and Staging Deployment Guide

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! 

References

Tags:

Comments are closed.