Skip to content

Commit 02430e1

Browse files
committed
OSDOCS-14356-New: Added bond best practices info to networking docs
1 parent 97e3011 commit 02430e1

13 files changed

+90
-39
lines changed

_topic_maps/_topic_map.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1739,6 +1739,8 @@ Topics:
17391739
File: verifying-connectivity-endpoint
17401740
- Name: Changing the cluster network MTU
17411741
File: changing-cluster-network-mtu
1742+
- Name: Network bonding consideration
1743+
File: network-bonding-considerations
17421744
- Name: Using Stream Control Transmission Protocol
17431745
File: using-sctp
17441746
- Name: Associating secondary interfaces metrics to network attachments

installing/installing_bare_metal/bare-metal-postinstallation-configuration.adoc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ include::modules/creating-manifest-file-customized-br-ex-bridge.adoc[leveloffset
3434
3535
* xref:../../installing/installing_bare_metal/bare-metal-expanding-the-cluster.adoc#bare-metal-expanding-the-cluster[Expanding the cluster]
3636
37-
// Enabling OVS balance-slb mode for your cluster
38-
include::modules/enabling-OVS-balance-slb-mode.adoc[leveloffset=+1]
39-
4037
// Services for a user-managed load balancer
4138
include::modules/nw-osp-services-external-load-balancer.adoc[leveloffset=+1]
4239

installing/installing_bare_metal/ipi/ipi-install-installation-workflow.adoc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ include::modules/creating-manifest-file-customized-br-ex-bridge.adoc[leveloffset
3838
// Scale each machine set to compute nodes
3939
include::modules/creating-scaling-machine-sets-compute-nodes-networking.adoc[leveloffset=+2]
4040

41-
// Enabling OVS balance-slb mode for your cluster
42-
include::modules/enabling-OVS-balance-slb-mode.adoc[leveloffset=+1]
43-
4441
// Establishing communication between subnets
4542
include::modules/ipi-install-establishing-communication-between-subnets.adoc[leveloffset=+1]
4643

installing/installing_bare_metal/upi/installing-bare-metal-network-customizations.adoc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,6 @@ include::modules/creating-manifest-file-customized-br-ex-bridge.adoc[leveloffset
7979
// Scale each machine set to compute nodes
8080
include::modules/creating-scaling-machine-sets-compute-nodes-networking.adoc[leveloffset=+2]
8181

82-
// Enabling OVS balance-slb mode for your cluster
83-
include::modules/enabling-OVS-balance-slb-mode.adoc[leveloffset=+1]
84-
8582
include::modules/installation-infrastructure-user-infra.adoc[leveloffset=+1]
8683

8784
[role="_additional-resources"]

installing/installing_bare_metal/upi/installing-bare-metal.adoc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,6 @@ include::modules/creating-manifest-file-customized-br-ex-bridge.adoc[leveloffset
100100
// Scale each machine set to compute nodes
101101
include::modules/creating-scaling-machine-sets-compute-nodes-networking.adoc[leveloffset=+2]
102102

103-
// Enabling OVS balance-slb mode for your cluster
104-
include::modules/enabling-OVS-balance-slb-mode.adoc[leveloffset=+1]
105-
106103
include::modules/installation-infrastructure-user-infra.adoc[leveloffset=+1]
107104

108105
[role="_additional-resources"]

installing/installing_bare_metal/upi/installing-restricted-networks-bare-metal.adoc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,6 @@ include::modules/creating-manifest-file-customized-br-ex-bridge.adoc[leveloffset
9494
// Scale each machine set to compute nodes
9595
include::modules/creating-scaling-machine-sets-compute-nodes-networking.adoc[leveloffset=+2]
9696

97-
// Enabling OVS balance-slb mode for your cluster
98-
include::modules/enabling-OVS-balance-slb-mode.adoc[leveloffset=+1]
99-
10097
include::modules/installation-infrastructure-user-infra.adoc[leveloffset=+1]
10198

10299
[role="_additional-resources"]

modules/enabling-OVS-balance-slb-mode.adoc

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
// Module included in the following assemblies:
22
//
3-
// IPI
4-
// * installing/installing_bare_metal/ipi/ipi-install-installation-workflow.adoc
5-
// * installing/installing_bare_metal/ipi/bare-metal-postinstallation-configuration.adoc
6-
// UPI
7-
// * installing/installing_bare_metal/upi/installing-bare-metal-network-customizations.adoc
8-
// * installing/installing_bare_metal/upi/installing-restricted-networks-bare-metal.adoc
9-
// * installing/installing_bare_metal/upi/installing-bare-metal.adoc
3+
// * networking/advanced_networking/network-bonding-considerations.adoc
104

115
:_mod-docs-content-type: PROCEDURE
126
[id="enabling-OVS-balance-slb-mode_{context}"]
137
= Enabling OVS balance-slb mode for your cluster
148

159
You can enable the Open vSwitch (OVS) `balance-slb` mode on infrastructure where your cluster runs so that two or more physical interfaces can share their network traffic. A `balance-slb` mode interface provides source load balancing (SLB) capabilities for a cluster that runs virtualization workloads, where the interface can act independently without needing to communicate with a network switch.
1610

17-
Currently, source load balancing works by assigning a Media Access Control (MAC) address and a virtual local area network (vLAN), if required, to a bond interface, such as `br-phy`. Because of the shared MAC address and vLAN between interfaces, using `balance-slb` mode to share pod traffic has no benefit.
11+
Currently, source load balancing works by assigning a Media Access Control (MAC) address and a virtual local area network (VLAN), if required, to a bond interface, such as `br-phy`. Because of the shared MAC address and VLAN between interfaces, using `balance-slb` mode to share pod traffic has no benefit.
1812

1913
The following diagram shows `balance-slb` mode on a simple cluster infrastructure layout. Virtual machines (VMs) connect to specific localnet `NetworkAttachmentDefinition` (NAD) custom resource definition (CRDs), `NAD 0` or `NAD 1`. Each NAD provides VMs with access to network traffic, such as VLAN ID tags. A `br-ex` OVS bridge receives traffic from VMs and passes the traffic to the next OVS bridge, `br-phy`. The `br-phy` bridge functions as the controller for the SLB bond. The SLB bond balances traffic from different VM ports over the physical interface links, such as `eno0` and `eno1`. Additionally, ingress traffic from either physical interface can pass through the set of OVS bridges to reach the VMs.
2014

2115
.OVS `balance-slb` mode ` operating on a localnet with two NADs
2216
image::552_OpenShift_slb_mode_0625.png[OVS `balance-slb` mode ` operating on a localnet with two NADs]
2317

18+
[NOTE]
19+
====
20+
Consider that an OVS bond with `balance-slb` mode enabled might experience issues if the bond forwards unknown unicast traffic from one physical network interface controller (NIC) into the phsycial network through another NIC. This situation can result in an Layer 2 loop, or _bridge loop_, that in turn causes _MAC flapping_.
21+
22+
MAC flapping causes the same MAC address to exist in many network locations for a period of time. For example, a remote switch does not learn the MAC address for the destination of a unicast packet and this causes the packet to exist on all links available on the SLB bond configuration. As a workaround for this issue, you can set the bond to `active-backup` mode during MAC address assignment and then switch the bond to use `balance-slb` mode.
23+
====
24+
2425
You can integrate the `balance-slb` mode interface into primary or secondary network types by using OVS bonding. Note the following points about OVS bonding:
2526

2627
* Supports the OVN-Kubernetes CNI plugin and easily integrates with the plugin.
@@ -67,13 +68,13 @@ networkConfig:
6768
enabled: false
6869
# ...
6970
----
70-
<1> The interface for the provisioned network interface card (NIC).
71+
<1> The interface for the provisioned network interface controller (NIC).
7172
<2> The first bonded interface that pulls in the Ignition config file for the bond interface.
7273
<3> The second bonded interface is part of a minimal configuration that pulls ignition during cluster installation.
7374

7475
. Define each network interface in a `MachineConfig` manifest file:
7576
+
76-
.Example `MachineConfig` manifest file that defines multiple network interfaces
77+
.Example `MachineConfig` manifest file that defines many network interfaces
7778
[source,yaml]
7879
----
7980
# ...

modules/installation-network-user-infra.adoc

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,23 @@ endif::ibm-z[]
8787
ifndef::ibm-z[]
8888
During the initial boot, the machines require an IP address configuration that is set either through a DHCP server or statically by providing the required boot options. After a network connection is established, the machines download their Ignition config files from an HTTP or HTTPS server. The Ignition config files are then used to set the exact state of each machine. The Machine Config Operator completes more changes to the machines, such as the application of new certificates or keys, after installation.
8989

90+
Use a DHCP server for the long-term management of the machines for your cluster. Ensure that the DHCP server is configured to provide persistent IP addresses, DNS server information, and hostnames to the cluster machines. As a cluster administrator, ensure that you reserve the following IP addresses components that interact with the DHCP server:
91+
92+
* Two unique virtual IP (VIP) addresses. One VIP address for the API endpoint and one VIP address for the wildcard ingress endpoint.
93+
* One IP address for the provisioner node.
94+
* An IP address for each control plane node.
95+
* An IP address for each compute node.
96+
If you have multiple network interfaces that interact with a bonded interface, reserve the same IP addresses for these multiple network interfaces so to ensure better load balancing, fault tolerance, and bandwidth capabilites for your cluster network infrastructure.
97+
9098
[NOTE]
9199
====
92-
* It is recommended to use a DHCP server for long-term management of the cluster machines. Ensure that the DHCP server is configured to provide persistent IP addresses, DNS server information, and hostnames to the cluster machines.
100+
* Consider using a DHCP server for long-term management of the cluster machines. Ensure that the DHCP server is configured to provide persistent IP addresses, DNS server information, and hostnames to the cluster machines.
93101
94102
* If a DHCP service is not available for your user-provisioned infrastructure, you can instead provide the IP networking configuration and the address of the DNS server to the nodes at {op-system} install time. These can be passed as boot arguments if you are installing from an ISO image. See the _Installing {op-system} and starting the {product-title} bootstrap process_ section for more information about static IP provisioning and advanced networking options.
95103
====
96104
endif::ibm-z[]
97105

98-
The Kubernetes API server must be able to resolve the node names of the cluster
99-
machines. If the API servers and worker nodes are in different zones, you can
100-
configure a default DNS search zone to allow the API server to resolve the
101-
node names. Another supported approach is to always refer to hosts by their
102-
fully-qualified domain names in both the node objects and all DNS requests.
106+
The Kubernetes API server must be able to resolve the node names of the cluster machines. If the API servers and worker nodes are in different zones, you can configure a default DNS search zone to allow the API server to resolve the node names. Another supported approach is to always refer to hosts by their fully-qualified domain names in both the node objects and all DNS requests.
103107
endif::azure,gcp[]
104108

105109
ifndef::ibm-z,azure[]
@@ -114,9 +118,7 @@ endif::ibm-z,azure[]
114118
[id="installation-network-connectivity-user-infra_{context}"]
115119
== Network connectivity requirements
116120

117-
You must configure the network connectivity between machines to allow {product-title} cluster
118-
components to communicate. Each machine must be able to resolve the hostnames
119-
of all other machines in the cluster.
121+
You must configure the network connectivity between machines to allow {product-title} cluster components to communicate. Each machine must be able to resolve the hostnames of all other machines in the cluster.
120122

121123
This section provides details about the ports that are required.
122124

modules/installation-user-infra-machines-static-network.adoc

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,9 @@ ifndef::ibm-z-kvm[]
220220
[discrete]
221221
=== Bonding multiple network interfaces to a single interface
222222

223-
Optional: You can bond multiple network interfaces to a single interface by using the `bond=` option. Refer to the following examples:
223+
As an optional configuration, you can bond multiple network interfaces to a single interface by using the `bond=` option. To apply this configuration to your cluster, complete the procedure steps for each node that runs on your cluster.
224+
225+
.Procedure
224226

225227
* The syntax for configuring a bonded interface is: `bond=<name>[:<network_interfaces>][:options]`
226228
+
@@ -287,9 +289,9 @@ ifndef::ibm-z[]
287289
[discrete]
288290
=== Bonding multiple SR-IOV network interfaces to a dual port NIC interface
289291

290-
Optional: You can bond multiple SR-IOV network interfaces to a dual port NIC interface by using the `bond=` option.
292+
As an optional configuration, you can bond multiple SR-IOV network interfaces to a dual port NIC interface by using the `bond=` option.
291293

292-
On each node, you must perform the following tasks:
294+
.Procedure
293295

294296
ifndef::installing-ibm-power[]
295297
. Create the SR-IOV virtual functions (VFs) following the guidance in link:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_and_managing_virtualization/managing-virtual-devices_configuring-and-managing-virtualization#managing-sr-iov-devices_managing-virtual-devices[Managing SR-IOV devices]. Follow the procedure in the "Attaching SR-IOV networking devices to virtual machines" section.
@@ -308,13 +310,19 @@ The following examples illustrate the syntax you must use:
308310

309311
* When you create a bonded interface using `bond=`, you must specify how the IP address is assigned and other information for the bonded interface.
310312

311-
** To configure the bonded interface to use DHCP, set the bond's IP address to `dhcp`. For example:
313+
** To configure the bonded interface to use DHCP, set the `ip` parameter to `dhcp` as demonstrated in the following example:
312314
+
313315
[source,terminal]
314316
----
315317
bond=bond0:eno1f0,eno2f0:mode=active-backup
316318
ip=bond0:dhcp
319+
fail_over_mac=0
317320
----
321+
+
322+
[NOTE]
323+
====
324+
The `fail_over_mac=0` default setting ensures that all secondary interfaces for a bond use the MAC address of that bond. Do not specify `1`, `active`, or `2`, follow`, because Red{nbsp}Hat does not support these configuration values.
325+
====
318326

319327
** To configure the bonded interface to use a static IP address, enter the specific IP address you want and related information. For example:
320328
+

modules/nw-ovs-bonding.adoc

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Module included in the following assemblies:
2+
//
3+
// * networking/advanced_networking/network-bonding-considerations.adoc
4+
5+
:_mod-docs-content-type: CONCEPT
6+
[id="nw-ovs-bonding_{context}"]
7+
= Open vSwitch (OVS) bonding
8+
9+
With an OVS bonding configuration on your network, each physical interface acts as a port and connects to a specific bond. A bond then connects to a virtual switch or an OVS bridge. This connection layout provides increased bandwidth and fault tolerance capabilities for traffic that runs on your network.
10+
11+
Consider the following architectural layout for OVS bridges that interact with OVS interfaces:
12+
13+
* A network interface uses a bridge MAC address for managing protocol-level traffic and other administrative tasks, such as IP address assignment.
14+
* The physical MAC addresses of physical interfaces do not handle traffic.
15+
* OVS handles all MAC address management at the OVS bridge level.
16+
17+
This layout simplies bond interface management as bonds acts as data paths where centralized MAC address managements happens at the OVS bridge level.
18+
19+
You can select the following OVS bonding modes for your network:
20+
21+
* `active-backup` mode provides link aggregation capabilities for your network, where one physical interface acts as the active port while other physical interfaces act as standby ports. This mode provides fault tolerance connections for your network.
22+
* `kernel-bonding` mode is a built-in Linux kernel function where link aggregation can exist among many Ethernet interfaces to create a single logical physical interface. This mode does not give the same level of customization as supported OVS mode, such as `balance-slb` mode.
23+
* `balance-slb` mode, where an interface provides source load balancing (SLB) capabilities for a cluster that runs virtualization workloads. The interface can act independently without needing to communicate with a network switch.
24+
25+
For `kernel-bonding` mode, the bond interfaces exist outside, which means they are not in the data path, of the bridge interface. Network traffic in this mode is not sent or received on the bond interface port but instead requires additional bridging capabilities for MAC address assignment at the kernel level. For `active-backup` and `balance-slb` modes, the bond interfaces exist in the same data path as the OVS bridge interface, so the OVS bridge can manage bonding logic instead of the physcial interfaces manages traffic.
26+

0 commit comments

Comments
 (0)