From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 38A231FF15C for <inbox@lore.proxmox.com>; Fri, 4 Apr 2025 18:33:59 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 16A0A76A; Fri, 4 Apr 2025 18:30:23 +0200 (CEST) From: Gabriel Goller <g.goller@proxmox.com> To: pve-devel@lists.proxmox.com Date: Fri, 4 Apr 2025 18:29:08 +0200 Message-Id: <20250404162908.563060-58-g.goller@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250404162908.563060-1-g.goller@proxmox.com> References: <20250404162908.563060-1-g.goller@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.022 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH pve-docs v2 1/1] fabrics: add initial documentation for sdn fabrics X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> Add initial documentation for the openfabric and ospf options. Signed-off-by: Gabriel Goller <g.goller@proxmox.com> --- pvesdn.adoc | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) diff --git a/pvesdn.adoc b/pvesdn.adoc index 5d5d27bfbc1f..414f39c5109e 100644 --- a/pvesdn.adoc +++ b/pvesdn.adoc @@ -517,6 +517,212 @@ Loopback:: Use a loopback or dummy interface as the source of the EVPN network (for multipath). +[[pvesdn_config_fabrics]] +Fabrics +------- + +[thumbnail="screenshot/gui-datacenter-fabrics-overview.png"] + +Fabrics in {pve} SDN provide automated routing between nodes in a cluster. They +simplify the configuration of underlay networks between nodes to form the +foundation for SDN deployments. + +They automatically configure routing protocols on your physical network +interfaces to establish connectivity between nodes in the cluster. This creates +a resilient, auto-configuring network fabric that adapts to changes in network +topology. These fabrics can be used as a full-mesh network for Ceph +footnote:[Full Mesh Network for Ceph{webwiki-url}Full_Mesh_Network_for_Ceph_Server] +(Note that currently you need to add the fabrics prefix to Ceph manually, so: +`pveceph init --network 192.0.2.0/24`) or as an underlay network for EVPN +deployments. + +Installation +~~~~~~~~~~~~ + +The FRR implementations of OpenFabric and OSPF are used, so first the `frr` and +`frr-pythontools` packages must be installed: + +---- +apt update +apt install frr frr-pythontools +---- + +Configuration +~~~~~~~~~~~~~ + +To create a Fabric, head over to Datacenter->SDN->Fabrics and click "Add +Fabric". After selecting the preferred protocol, the fabric is created. With +the "+" button you can select the nodes which you want to add to the fabric, +you also have to select the interfaces used to communicate with the other nodes. + +Router-ID Selection +^^^^^^^^^^^^^^^^^^^ + +Each node in a fabric needs a unique router-ID, which is an IPv4 address in +dotted decimal notation (e.g., 192.0.2.1). In OpenFabric this can also be an +IPv6 address in the typical hexadecimal representation separated by colons +(e.g., 2001:db8::1428:57ab). A dummy interface with the router-ID as address +will automatically be created and will act as a loopback interface for the +fabric (it's also passive by default). + +Loopback Prefix +^^^^^^^^^^^^^^^ + +You can specify a CIDR network range (e.g., 192.0.2.0/24) as a loopback prefix for the fabric. +When configured, the system will automatically verify that all router-IDs are contained within +this prefix. This ensures consistency in your addressing scheme and helps prevent addressing +conflicts or errors. + +[[pvesdn_openfabric]] +OpenFabric +~~~~~~~~~~ + +OpenFabric is a routing protocol specifically designed for data center fabrics. +It's based on IS-IS and optimized for the spine-leaf topology common in data +centers. + +[thumbnail="screenshot/gui-datacenter-create-fabric-openfabric.png"] + +Configuration options: + +[[pvesdn_openfabric_fabric]] +On the Fabric +^^^^^^^^^^^^^ + +Name:: This is the name of the OpenFabric fabric and can be at most 8 characters long. + +Loopback Prefix:: CIDR (IPv4 or IPv6) network range (e.g., 192.0.2.0/24) used to verify that +all router-IDs in the fabric are contained within this prefix. + +Hello Interval:: Controls how frequently (in seconds) hello packets are sent to +discover and maintain connections with neighboring nodes. Lower values detect +failures faster but increase network traffic. This option is global on the +fabric, meaning every interface on every node in this fabric will inherit this +hello-interval property. The default value is 3 seconds. + +[[pvesdn_openfabric_node]] +On the Node +^^^^^^^^^^^ + +[thumbnail="screenshot/gui-datacenter-create-node-openfabric.png"] + +Options that are available on every node that is part of a fabric: + +Node:: Select the node which will be added to the fabric. Only nodes that +currently are in the cluster will be shown. + + +Router-ID:: A unique IPv4 or IPv6 address used to generate the OpenFabric +Network Entity Title (NET). Each node in the same fabric must have a different +Router-ID, while a single node must use the same NET address across all fabrics +(this consistency is automatically managed by {pve}). + +WARNING: When using IPv6 addresses, the last 3 segments are used to generate +the NET. Ensure these segments differ between nodes. + +Interfaces:: Specify the interfaces used to establish peering connections with +other OpenFabric nodes. Preferably select interfaces without pre-assigned IP +addresses, then configure addresses in the IPv4/IPv6 column if needed. A dummy +"loopback" interface with the router-id is automatically created. +Interface-specific settings override the global fabric settings. + +On The Interface +^^^^^^^^^^^^^^^^ + +The following optional parameters can be configured per interface when enabling +the additional columns: + +IP::: A IPv4 that should get automatically configured on this interface. Must +include the netmask (e.g. /31) + +IPv6::: A IPv6 that should get automatically configured on this interface. Must +include the netmask (e.g. /127). + +Passive::: When enabled, the interface will not form OpenFabric adjacencies but +its networks will still be advertised. + +Hello Interval::: Controls how frequently (in seconds) hello packets are sent +on this specific interface. Lower values detect failures faster but increase +network traffic. The default value is 3 seconds. + +CSNP Interval::: Sets how frequently (in seconds) the node synchronizes its +routing database with neighbors. Lower values keep the network topology information +more quickly in sync but increase network traffic. The default value is 10 seconds. + +Hello Multiplier::: Defines how many missed hello packets constitute a failed +connection. Higher values make the connection more resilient to packet loss but +slow down failure detection. The default value is 10. + +WARNING: When you remove an interface with an entry in `/etc/network/interfaces` +that has `manual` set, then the IP will not get removed on applying the SDN +configuration. + +[[pvesdn_ospf]] +OSPF +~~~~ + +OSPF (Open Shortest Path First) is a widely-used link-state routing protocol +that efficiently calculates the shortest path for routing traffic through IP +networks. + +[thumbnail="screenshot/gui-datacenter-create-fabric-ospf.png"] + +Configuration options: + +[[pvesdn_ospf_fabric]] +On the Fabric +^^^^^^^^^^^^^ + +Area:: This specifies the OSPF area identifier, which can be either a 32-bit +signed integer or an IP address. Areas are a way to organize and structure OSPF +networks hierarchically, with Area 0 (or 0.0.0.0) serving as the backbone area. + +Loopback Prefix:: CIDR (only IPv4) network range (e.g., 192.0.2.0/24) used to +verify that all router-IDs in the fabric are contained within this prefix. + +Area:: This specifies the OSPF area identifier, which can be either an 32-bit +signed integer or an IP address. Areas are a way to organize and structure OSPF +networks hierarchically, with Area 0 (or 0.0.0.0) serving as the backbone area. + +[[pvesdn_ospf_node]] +On the Node +^^^^^^^^^^^ + +[thumbnail="screenshot/gui-datacenter-create-node-ospf.png"] + +Options that are available on every node that is part of a fabric: + +Node:: Select the node which will be added to the fabric. Only nodes that +are currently in the cluster will be shown. + +Router-ID:: A unique IPv4 address used to identify this router within the OSPF +network. Each node in the same fabric must have a different Router-ID. + +Interfaces:: Specify the interfaces used to establish peering connections with +other OSPF nodes. Preferably select interfaces without pre-assigned IP +addresses, then configure addresses in the IPv4 column if needed. A dummy +"loopback" interface with the router-id is automatically created. + +On The Interface +^^^^^^^^^^^^^^^^ +The following optional parameter can be configured per interface when enabling +the additional columns: + +IP::: A IPv4 that should get automatically configured on this interface. Must +include the netmask (e.g. /31) + +Passive::: When enabled, the interface will not form OSPF adjacencies but +its networks will still be advertised. + +Unnumbered::: When enabled, sets the OSPF network type to point-to-point, +allowing adjacencies to form over interfaces without explicitly assigned IP +addresses. This *must* be enabled for interfaces where there is no address +configured in the IPv4 column. + +WARNING: When you remove an interface with an entry in `/etc/network/interfaces` +that has `manual` set, then the IP will not get removed on applying the SDN +configuration. + [[pvesdn_config_ipam]] IPAM ---- -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel