Deploy OpenShift on bare metal with OVS bond in balance-slb mode - no switch configuration required.
This repository provides manifests and documentation for deploying OpenShift clusters using Open vSwitch (OVS) with balance-slb bonding mode. This approach enables NIC redundancy and load balancing without requiring LACP or any physical switch configuration.
Ideal for:
- Bare metal clusters
- OpenShift Virtualization (CNV) workloads
- Disconnected or constrained environments
- Labs and PoCs
For convenience, there’s also a more detailed guide here, and a rendered version with diagrams and screenshots available here. The Git repo remains the canonical source.
| OpenShift | Ignition | Status |
|---|---|---|
| 4.18.x | 3.2.0 | Working (requires adjustments) |
| 4.19.x | 3.4.0 | Working |
| 4.20.x | 3.4.0 | Working |
- 2+ physical NICs per node
- Assisted Installer access
- Static IP planning
-
Create cluster in Assisted Installer with:
- Include custom manifests
- Static network configuration
-
Configure temporary bootstrap network using a simple static IP (single NIC or active-backup bond)
-
Note discovered hostnames - filenames must match exactly
-
Upload MachineConfigs to
openshift/folder:openshift/05-nmstate-configuration-master.yml openshift/05-nmstate-configuration-worker.yml openshift/10-br-ex-master-mc.yml openshift/10-br-ex-worker-mc.yml -
Install cluster
Critical: NMState filenames must match hostnames exactly, or installation fails silently at ~53%.
.
├── README.md
├── docs/
│ └── detailed-guide.md # Full step-by-step guide
├── manifests/
│ ├── 05-nmstate-configuration-master.yml
│ ├── 05-nmstate-configuration-worker.yml
│ └── examples/
│ ├── nmstate-node-example.yml
│ ├── 10-br-ex-master-mc.yml
│ └── 10-br-ex-worker-mc.yml
└── scripts/
└── generate-machineconfig.sh
| Concept | Description |
|---|---|
| balance-slb | OVS bonding mode using MAC+VLAN hash. No switch support needed. |
| br-ex | External bridge where the node IP is configured (ovs-interface). |
| br-phy | Physical uplink bridge containing the OVS bond. |
| Patch ports | Connect br-ex ↔ br-phy internally. |
- Pod traffic (OVN-Kubernetes) uses same MAC/VLAN - not load balanced
- Best suited for VM workloads with diverse MAC addresses
- Linux kernel does not support balance-slb natively - OVS handles it
# Check OVS topology
oc debug node/<node> -- chroot /host ovs-vsctl show
# Check NMState
oc debug node/<node> -- chroot /host nmstatectl show
# Check NetworkManager connections
oc debug node/<node> -- chroot /host nmcli con showsh-5.1# systemctl status nmstate-configuration.service
○ nmstate-configuration.service - Applies per-node NMState network configuration
Loaded: loaded (/etc/systemd/system/nmstate-configuration.service; enabled; preset: disabled)
Active: inactive (dead) since Sat 2026-01-10 21:15:53 UTC; 14min ago
Main PID: 2145 (code=exited, status=0/SUCCESS)
CPU: 15ms
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com systemd[1]: Finished Applies per-node NMState network configuration.
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: + hostname=ocp-dualstack-1
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: + host_file=ocp-dualstack-1.yml
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: + cluster_file=cluster.yml
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: + config_file=
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: + '[' -s /etc/nmstate/openshift/ocp-dualstack-1.yml ']'
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: + '[' -s /etc/nmstate/openshift/cluster.yml ']'
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: + echo 'No configuration found at /etc/nmstate/openshift/ocp-dualstack-1.yml or /etc/nmstate/openshift/cluster.yml'
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: No configuration found at /etc/nmstate/openshift/ocp-dualstack-1.yml or /etc/nmstate/openshift/cluster.yml
Jan 10 21:15:53 ocp-dualstack-1.baremetalbr.com nmstate-configuration.sh[2145]: + exit 0
