OVN Ironic setup
OVN Annotations for Ironic-Enabled Deployment
This guide configures OVN annotations for deploying Ironic bare metal provisioning alongside OpenStack standard deployment (non-ironic). Ironic requires additional bridge, VLAN, and network mappings beyond standard OVN deployments.
Overview of OVN Annotations
key |
type | value |
notes |
|---|---|---|---|
| ovn.openstack.org/int_bridge | str | br-int |
The name of the integration bridge that will be used. |
| ovn.openstack.org/bridges | str | br-ex,br-pxe |
Required for Ironic: Include br-pxe bridge for PXE provisioning network. |
| ovn.openstack.org/ports | str | br-ex:bond0,br-pxe:vlan126 |
Required for Ironic: Map each bridge to physical interface or VLAN (format: bridge:interface). |
| ovn.openstack.org/vlans | str | vlan126:bond0:126:1500 |
Required for Ironic: Create VLAN interface for PXE (format: name:parent:vlan_id:mtu). |
| ovn.openstack.org/mappings | str | physnet1:br-ex,physnet2:br-pxe |
Required for Ironic: Map Neutron provider networks to bridges. |
| ovn.openstack.org/availability_zones | str | az1 |
Colon-separated list of Availability Zones. |
| ovn.openstack.org/gateway | str | enabled |
Mark node as an OVN gateway for external traffic. |
Applying Ironic Annotations
When deploying Ironic for bare metal provisioning, apply the key annotations (bridges, ports, vlans, mappings) shown in the overview table above to required controller and network nodes if not already exists.
Set ovn.openstack.org/int_bridge
Set the name of the OVS integration bridge we'll use. In general, this should be br-int, and while this setting is implicitly configured we're explicitly defining what the bridge will be on these nodes. This step mirrors standard deployments and can be skipped if already configured."
kubectl annotate \
nodes \
-l openstack-control-plane=enabled -l openstack-network-node=enabled \
ovn.openstack.org/int_bridge='br-int'
Set ovn.openstack.org/bridges
Set the name of the OVS bridges we'll use. These are the bridges you will use on your hosts within OVS. The option is a string and comma separated. You can define as many OVS type bridges you need or want for your environment.
Note
The Ironic functional example here annotates all nodes; however, not all nodes have to have the same setup. If the ovn.openstack.org/bridges is already configured, use --overwrite when annotating the nodes.
# First, set the required bridges including br-pxe
kubectl annotate \
nodes \
-l openstack-control-plane=enabled -l openstack-network-node=enabled \
ovn.openstack.org/bridges='br-ex,br-pxe'
Set ovn.openstack.org/ports
Set the port mapping for OVS interfaces to a local physical interface on a given machine. This option uses a colon between the OVS bridge and the physical interface, OVS_BRIDGE:PHYSICAL_INTERFACE_NAME. Multiple bridge mappings can be defined by separating values with a comma.
Note
For setting up Ironic, the port mapping should reference the provisioning vlan interface (e.g., br-ex:bond0,br-pxe:vlanXYZ) rather than to a physical interface. If the ovn.openstack.org/ports is already configured, use --overwrite when annotating the nodes.
# Update vlanXYZ with your interface name for provisioning network
kubectl annotate \
nodes \
-l openstack-control-plane=enabled -l openstack-network-node=enabled \
ovn.openstack.org/ports='br-ex:bond0,br-pxe:vlanXYZ'
Set ovn.openstack.org/vlans (Optional)
Create Linux VLAN subinterfaces on the host before OVN attaches them to an OVS bridge. This is useful when the host must keep the parent interface while OVN consumes a tagged child interface such as bond0.XYZ.
# Create the provisioning VLAN interface
kubectl annotate \
nodes \
-l openstack-control-plane=enabled -l openstack-network-node=enabled \
ovn.openstack.org/vlans='vlanXYZ:bond0:XYZ:1500'
Set ovn.openstack.org/mappings
Set the Neutron bridge mapping. This maps the Neutron interfaces to the ovs bridge names. These are colon delimitated between NEUTRON_INTERFACE:OVS_BRIDGE. Multiple bridge mappings can be defined here and are separated by commas.
Note
Set the Neutron bridge mapping for Ironic provisioning network. Neutron interfaces are string value and can be anything you want. The NEUTRON_INTERFACE value defined will be used when you create provider type networks after the cloud is online. If the ovn.openstack.org/mappings is already configured, use --overwrite when annotating the nodes.
# Map to Neutron provider networks
kubectl annotate \
nodes \
-l openstack-control-plane=enabled -l openstack-network-node=enabled \
ovn.openstack.org/mappings='physnet1:br-ex,physnet2:br-pxe'
Set ovn.openstack.org/availability_zones
Set the OVN availability zones which inturn creates neutron availability zones. Multiple network availability zones can be defined and are colon separated which allows us to define all of the availability zones a node will be able to provide for, nova:az1:az2:az3.
kubectl annotate \
nodes \
-l openstack-control-plane=enabled -l openstack-network-node=enabled \
ovn.openstack.org/availability_zones='az1'
Set ovn.openstack.org/gateway
Define where the gateways nodes will reside. There are many ways to run this, some like every compute node to be a gateway, some like dedicated gateway hardware. Either way you will need at least one gateway node within your environment. NOTE: In the following example, we will apply the 'ovn.openstack.org/gateway' to dedicated network nodes. You will want to change the node filter to the specific nodes you wish to use as ovn gateway nodes.
kubectl annotate \
nodes \
$(kubectl get nodes | awk '/network/ {print $1}') \
ovn.openstack.org/gateway='enabled'
Run the OVN integration
With all of the annotations defined, we can now apply the network policy with the following command.
After running the setup, nodes will have the label ovn.openstack.org/configured with a date stamp when it was configured.
If there's ever a need to reconfigure a node, simply remove the label and the DaemonSet will take care of it automatically.
Key Differences from Standard OVN
- Provisioning Bridge (
br-pxe): Ironic requires a dedicated bridge for PXE boot traffic - Provisioning VLAN: The provisioning network must be isolated on a specific VLAN interface
- Provider Network Mapping: The provisioning network must be explicitly mapped to Neutron