From e27348e6b72b327370132a229b01ff7e8f13452a Mon Sep 17 00:00:00 2001 From: Jason Boxman Date: Wed, 21 Aug 2024 22:22:01 -0400 Subject: [PATCH] OSDOCS-10810: Add additional routing capabilities - https://issues.redhat.com/browse/OSDOCS-10810 --- _topic_maps/_topic_map.yml | 11 + .../524-openshift-bgp-ovn-k8s-no-vpn-0325.png | Bin 0 -> 73571 bytes ...24-openshift-bgp-ovn-k8s-vrf-lite-0325.png | Bin 0 -> 93139 bytes modules/nw-operator-cr.adoc | 8 + modules/nw-route-advertisements-disable.adoc | 32 ++ modules/nw-route-advertisements-enable.adoc | 33 ++ modules/nw-routeadvertisements-about.adoc | 106 ++++ modules/nw-routeadvertisements-example.adoc | 323 ++++++++++++ modules/nw-routeadvertisements-object.adoc | 42 ++ modules/nw-routeadvertisements-setup.adoc | 491 ++++++++++++++++++ .../route_advertisements/_attributes | 1 + .../about-route-advertisements.adoc | 23 + .../disabling-route-advertisements.adoc | 11 + .../enabling-route-advertisements.adoc | 11 + .../example-route-advertisement-setup.adoc | 11 + .../route_advertisements/images | 1 + .../route_advertisements/modules | 1 + .../route_advertisements/snippets | 1 + 18 files changed, 1106 insertions(+) create mode 100644 images/524-openshift-bgp-ovn-k8s-no-vpn-0325.png create mode 100644 images/524-openshift-bgp-ovn-k8s-vrf-lite-0325.png create mode 100644 modules/nw-route-advertisements-disable.adoc create mode 100644 modules/nw-route-advertisements-enable.adoc create mode 100644 modules/nw-routeadvertisements-about.adoc create mode 100644 modules/nw-routeadvertisements-example.adoc create mode 100644 modules/nw-routeadvertisements-object.adoc create mode 100644 modules/nw-routeadvertisements-setup.adoc create mode 120000 networking/advanced_networking/route_advertisements/_attributes create mode 100644 networking/advanced_networking/route_advertisements/about-route-advertisements.adoc create mode 100644 networking/advanced_networking/route_advertisements/disabling-route-advertisements.adoc create mode 100644 networking/advanced_networking/route_advertisements/enabling-route-advertisements.adoc create mode 100644 networking/advanced_networking/route_advertisements/example-route-advertisement-setup.adoc create mode 120000 networking/advanced_networking/route_advertisements/images create mode 120000 networking/advanced_networking/route_advertisements/modules create mode 120000 networking/advanced_networking/route_advertisements/snippets diff --git a/_topic_maps/_topic_map.yml b/_topic_maps/_topic_map.yml index b95978b98b..ea846bfc1e 100644 --- a/_topic_maps/_topic_map.yml +++ b/_topic_maps/_topic_map.yml @@ -1753,6 +1753,17 @@ Topics: File: disabling-bgp-routing - Name: Migrating FRR-K8s custom resources File: migrating-frr-k8s-resources + - Name: Route advertisements + Dir: route_advertisements + Topics: + - Name: About route advertisements + File: about-route-advertisements + - Name: Enabling route advertisements + File: enabling-route-advertisements + - Name: Disabling route advertisements + File: disabling-route-advertisements + - Name: Example route advertisements setup + File: example-route-advertisement-setup - Name: Using PTP hardware Dir: ptp Distros: openshift-enterprise,openshift-origin diff --git a/images/524-openshift-bgp-ovn-k8s-no-vpn-0325.png b/images/524-openshift-bgp-ovn-k8s-no-vpn-0325.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9798fe55ab229573c316066fffd477cb9f1280 GIT binary patch literal 73571 zcmd?RXHZpJ*EM*|iXzv9C<+DyK@drTN-&VKBncvtB}-Dt<^+gD5foH%63Iz|C?Ft` zK{A3UL2}MLme>1M_m8gXs;;i?ubO(ETY!gi_FikvImZ}t%>77FUV@rxHx-3Kp_Y;q zRiaSVj8G^m%Ga;OZytQkBLA@As-%W3g|hi0`TvR%t7rrKa+jT$x}CC>k==D&8$-(V z>(`H(Sen`D>s~cHYGq>_JS4cALfJ==5(27i%gdw2OskW&CQY|%hH*(h z*l{pgBQ9clJ#E5hwGv}Q?8z%}R|emxxyNeqJr?(9HoYsUCvm_)@_@|Pe0T5*9r?FM z+&gP3yIpg#+HBg5FAm#k|H^K)tQ;3k%+S`;(|d!9`tx;Du5>i~)PFxw*tc}9`uoG> zJL^YQ{QdsjnbkA@z2@7#mCpZtZ~o5;;s3rr{*c1>-}m&QH);NUf0Oz^!MeZS7p(n% z>Fqbi(7)Bme>*cX!%|C6E~en%ul{~E7M3WMHfsE6aC6K5()ahj_U`;Ya`mI%Za6x| z8kPsds>THrd+Z8xnjVVCSuAqj$>%U;kY?3!$ecT1ky~55jNt3&1jJ_A% zGyV4N^={rPuV%-8iS!M1ZV_-83orJhXF=5RnSWE{&`ed#cU}B3JiHv9L*kx78A<#; z5`OAw+t#gH?dGQ}#3Ur*u6{2p3+5m89rBTTp8g063(F2R70IcoslK6Y zw6u|{)@}aW(V?@G^O9d;Vq&CRaAXjlnbDm6xpU|6QOCqYMJ0V2-fG9`6+Jfj{Vho? zLnp)XrSMGWs-mKz=gpitdGP~{i33@`Ldqx1jGyIPA7*1>68-x1YgwqsvcB75)V*iV zo<+*PG-X!^J}$>+TBkVvvm*3LehBS`4I9SB#(eOhM=!lU?B?c{W>PD@I6v)Hqs{Xr zL`aLr=!+tfL^bW6J?tVPBKPjzjXryiN+H$lvukyAb#uO3zO#!<&#zxBIyySkyLlyt zhK3Zf&HgOLLfqn!l?$IgOD0^()ojVIYOD^E*ultX6>n>AuNtS8P?u(QAuB6OsM=MS zRaaM6GuJUK-Mr}ykMY;Qc19;Br~2sg=dd&V-;%=m>*I`*mOtECH`$jg68ovs_(_GD}uYPI-0p=<7=Z)*Gm(YDAV7!rYc-B@%O|f~a;L zeKDA5J<)qU&SLo|#ci~!Xl}HGk*D>jRr`B3&D7}D*4DZNEq?#Q=L_|M0|V)Dr<%B0MLpheBr+#ADk>^(u0KwqA=E7lOOj^R__ab+nt7m+OqA-`{%F_0~39< zCtc=JX*n;&H7bFL{4XolDA5@~SCD z6$~?z3~Aaq*GvlUZpd~RkF0LUvi&8owX-osx#Ug4wZZ15rIYDQf`S(>yuDajm)_pq zJ~xnF}d&{|x(c8yK( z)y<*y+eYw$?JH21A6P!|=WLD)Pu4XQ zC`d|H-QBQ_*RnNJ_Q7taso&?LjLmakO3I%9Hwy5WVe3y$ZcPgIm~ z`V>M=tiyTS^P;x4p_Nr)LxPsskI&v}8H>L{-DJzxP;IZm8rb*OvChuSM4x-GIdby+ z`SWAr<2;4)57MqwADA5O5UCguPLp|dG)5=iRrB5DGwJV_!v5L5-GFMCG2)qytH#F% zG#5ey9sEvRx6B>?ddjpuwqD<1FiPs;#TQ0j0$=ylMu~Vg(oj?L-J5>yKR2)O_Tq`X zf;SXd6hi#GycB}?e_l5E`Q^DpiFOrz~6JNuW^iy4;Ms&6l9NK>WS;FAYkWYUc)cDsy~vShn0y9P|ZJZ=$m zZMc0=a&9tpmylyBE`sr;u*=B`hs`5yIE*N^qJzz8R~kM8b+r%s(Be?>l*r&3UVQb@X~G1P5I
=N{Wh4U%Yss5~FkoB`waZ@vYjq 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 literal 0 HcmV?d00001 diff --git a/modules/nw-operator-cr.adoc b/modules/nw-operator-cr.adoc index 2a048f922b..00d62dca47 100644 --- a/modules/nw-operator-cr.adoc +++ b/modules/nw-operator-cr.adoc @@ -218,6 +218,14 @@ endif::operator[] |`object` |Specify a configuration object for customizing network policy audit logging. If unset, the defaults audit log settings are used. +|`routeAdvertisements` +|`string` +a|Specifies whether to advertise cluster network routes. The default value is `Disabled`. +-- +- `Enabled`: Import routes to the cluster network and advertise cluster network routes as configured in `RouteAdvertisements` objects. +- `Disabled`: Do not import routes to the cluster network or advertise cluster network routes. +-- + |`gatewayConfig` |`object` |Optional: Specify a configuration object for customizing how egress traffic is sent to the node gateway. Valid values are `Shared` and `Local`. The default value is `Shared`. In the default setting, the Open vSwitch (OVS) outputs traffic directly to the node IP interface. In the `Local` setting, it traverses the host network; consequently, it gets applied to the routing table of the host. diff --git a/modules/nw-route-advertisements-disable.adoc b/modules/nw-route-advertisements-disable.adoc new file mode 100644 index 0000000000..87de6452c2 --- /dev/null +++ b/modules/nw-route-advertisements-disable.adoc @@ -0,0 +1,32 @@ +// Module included in the following assemblies: +// +// * networking/route_advertisements/disabling-route-advertisements.adoc + +:_mod-docs-content-type: PROCEDURE +[id="nw-route-advertisements-disable_{context}"] += Disabling route advertisements + +As a cluster administrator, you can disable additional route advertisements for your cluster. + +.Prerequisites + +* You have installed the {oc-first}. +* You are logged in to the cluster as a user with the `cluster-admin` role. +* The cluster is installed on compatible infrastructure. + +.Procedure + +* To disable additional routing support, enter the following command: ++ +[source,terminal] +---- +$ oc patch network.operator cluster -p '{ + "spec": { + "defaultNetwork": { + "ovnKubernetesConfig": { + "routeAdvertisements": "Disabled" + } + } + } +}' +---- diff --git a/modules/nw-route-advertisements-enable.adoc b/modules/nw-route-advertisements-enable.adoc new file mode 100644 index 0000000000..5d9bf9c2a1 --- /dev/null +++ b/modules/nw-route-advertisements-enable.adoc @@ -0,0 +1,33 @@ +// Module included in the following assemblies: +// +// * networking/route_advertisements/enabling-route-advertisements.adoc + +:_mod-docs-content-type: PROCEDURE +[id="nw-route-advertisements-enable_{context}"] += Enabling route advertisements + +As a cluster administrator, you can enable additional routing support for your cluster. + +.Prerequisites + +* You have installed the {oc-first}. +* You are logged in to the cluster as a user with the `cluster-admin` role. +* The cluster is installed on compatible infrastructure. + +.Procedure + +* To enable a routing provider and additional route advertisements, enter the following command: ++ +[source,terminal] +---- +$ oc patch Network.operator.openshift.io cluster --type=merge \ + -p='{ + "spec": { + "additionalRoutingCapabilities": { + "providers": ["FRR"] + }, + "defaultNetwork": { + "ovnKubernetesConfig": { + "routeAdvertisements": "Enabled" + }}}}' +---- diff --git a/modules/nw-routeadvertisements-about.adoc b/modules/nw-routeadvertisements-about.adoc new file mode 100644 index 0000000000..8790f5fef6 --- /dev/null +++ b/modules/nw-routeadvertisements-about.adoc @@ -0,0 +1,106 @@ +// Module included in the following assemblies: +// +// * networking/route_advertisements/about-route-advertisements.adoc + +//// +Terminology - +Cluster network routes: Both pod network routes and/or EgressIP routes +Pod network routes: Routes to pod IPs +EgressIP routes: Routes to EgressIPs +//// + +:_mod-docs-content-type: CONCEPT +[id="nw-routeadvertisements-about_{context}"] += Advertise cluster network routes with Border Gateway Protocol + +With route advertisements enabled, the OVN-Kubernetes network plugin supports advertising network routes for the default pod network and cluster user-defined (CUDN) networks to the provider network, including EgressIPs, and importing routes from the provider network to the default pod network and CUDNs. From the provider network, IP addresses advertised from the default pod network and CUDNs can be reached directly. + +For example, you can import routes to the default pod network so you no longer need to manually configure routes on each node. Previously, you might have been using local gateway mode (`RoutingViaHost=true`) and manually configuring routes on each node to approximate a similar configuration. With route advertisements you can accomplish this seamlessly and you can use shared gateway mode (`RoutingViaHost=false`) as well. + +Route reflectors on the provider network are supported and can reduce the number of BGP connections required to advertise routes on large networks. + +If you use EgressIPs with route advertisements enabled, the layer 3 provider network is aware of EgressIP failovers. This allows you to locate cluster nodes that host EgressIPs on different layer 2 segments whereas before only the layer 2 provider network was aware so that required all the egress nodes to be on the same layer 2 segment. + +[id="supported-platforms_{context}"] +== Supported platforms + +Advertising routes with border gateway protocol (BGP) is supported on the following infrastructure types: + +- Bare-metal +//- {vmw-full} on-premise + +[id="infrastructure-requirements_{context}"] +== Infrastructure requirements + +To use route advertisements, you must have configured BGP for your network infrastructure. Outages or misconfigurations of your network infrastructure might cause disruptions to your cluster network. + +[id="compatibility-with-other-networking-features_{context}"] +== Compatibility with other networking features + +Route advertisements support the following {product-title} Networking features: + +Multiple external gateways (MEG):: +MEG is not supported with this feature. + +EgressIPs:: +-- +Supports the use and advertisement of EgressIPs. The node where an egress IP address resides advertises the EgressIP. An egress IP address must be on the same layer 2 network subnet as the egress node. The following limitations apply: + +- Advertising EgressIPs from a user-defined network (CUDN) operating in layer 2 mode are not supported. +- Advertising EgressIPs for a network that has both egress IP addresses assigned to the primary network interface and egress IP addresses assigned to additional network interfaces is impractical. All EgressIPs are advertised on all of the BGP sessions of the selected FRRConfiguration instances, regardless of whether these sessions are established over the same interface that the EgressIP is assigned to or not, potentially leading to unwanted advertisements. + +-- + +Services:: +Works with the MetalLB Operator to advertise services to the provider network. + +Egress service:: +Full support. + +Egress firewall:: +Full support. + +Egress QoS:: +Full support. + +Network policies:: +Full support. + +Direct pod ingress:: +Full support for the default cluster network and cluster user-defined (CUDN) networks. + +[id="considerations-for-use-with-the-metallb-operator_{context}"] +== Considerations for use with the MetalLB Operator + +The MetalLB Operator is installed as an add-on to the cluster. Deployment of the MetalLB Operator automatically enables FRR-K8s as an additional routing capability provider. This feature and the MetalLB Operator use the same FRR-K8s deployment. + +[id="considerations-for-naming-cluster-user-defined-networks_{context}"] +== Considerations for naming cluster user-defined networks (CUDNs) + +When referencing a VRF device in a `FRRConfiguration` CR, the VRF name is the same as the CUDN name for VRF names that are less than or equal to 15 characters. It is recommended to use a VRF name no longer than 15 characters so that the VRF name can be inferred from the CUDN name. + +[id="bgp-routing-custom-resources_{context}"] +== BGP routing custom resources + +The following custom resources (CRs) are used to configure route advertisements with BGP: + +`RouteAdvertisements`:: +This CR defines the advertisements for the BGP routing. From this CR, the OVN-Kubernetes controller generates a `FRRConfiguration` object that configures the FRR daemon to advertise cluster network routes. This CR is cluster scoped. + +`FRRConfiguration`:: +This CR is used to define BGP peers and to configure route imports from the provider network into the cluster network. Before applying `RouteAdvertisements` objects, at least one FRRConfiguration object must be initially defined to configure the BGP peers. This CR is namespaced. + +[id="ovn-kubernetes-controller-generation-of-frrconfiguration-objects_{context}"] +== OVN-Kubernetes controller generation of `FRRConfiguration` objects + +An `FRRConfiguration` object is generated for each network and node selected by a `RouteAdvertisements` CR with the appropriate advertised prefixes that apply to each node. The OVN-Kubernetes controller checks whether the `RouteAdvertisements`-CR-selected nodes are a subset of the nodes that are selected by the `RouteAdvertisements`-CR-selected FRR configurations. + +Any filtering or selection of prefixes to receive are not considered in `FRRConfiguration` objects that are generated from the `RouteAdvertisement` CRs. Configure any prefixes to receive on other `FRRConfiguration` objects. OVN-Kubernetes imports routes from the VRF into the appropriate network. + +[id="cluster-network-operator_{context}"] +== Cluster Network Operator configuration + +The Cluster Network Operator (CNO) API exposes several fields to configure route advertisements: + +- `spec.additionalRoutingCapabilities.providers`: Specifies an additional routing provider, which is required to advertise routes. The only supported value is `FRR`, which enables deployment of the FRR-K8S daemon for the cluster. When enabled, the FRR-K8S daemon is deployed on all nodes. +- `spec.defaultNetwork.ovnKubernetesConfig.routeAdvertisements`: Enables route advertisements for the default cluster network and CUDN networks. The `spec.additionalRoutingCapabilities` field must be set to `FRR` to enable this feature. diff --git a/modules/nw-routeadvertisements-example.adoc b/modules/nw-routeadvertisements-example.adoc new file mode 100644 index 0000000000..67a4df3184 --- /dev/null +++ b/modules/nw-routeadvertisements-example.adoc @@ -0,0 +1,323 @@ +// Module included in the following assemblies: +// +// * networking/route_advertisements/about-bgp-routing.adoc + +:_mod-docs-content-type: CONCEPT +[id="nw-bgp-examples_{context}"] += Examples advertising pod IP addresses with BGP + +The following examples describe several configurations for advertising pod IP addresses and EgressIPs with Border Gateway Protocol (BGP). The external network border router has the `172.18.0.5` IP address. These configures assume that you have configured an external route reflector that can relay routes to all nodes on the cluster network. + +//// +A route advertisements object selects existing FRRConfiguration objects, and along with the selected nodes, OVN-Kubernetes controller generates further FRRConfiguration objects with the appropriate advertised prefixes that apply to each node. The OVN-Kubernetes controller checks whether the `RouteAdvertisements`-CR-selected nodes are a subset of the nodes that are selected by the `RouteAdvertisements`-CR-selected FRR configurations. + +The FRRConfiguration objects generated by OVN-Kubernetes controller do not configure routes to be imported from the provider network. Any filtering or selection of prefixes to import are configured by a cluster administrator in different FRRConfiguration objects that those managed by OVN-Kubernetes controller. Imported routes will take effect for a cluster network as long as they are imported to that network VRF or a VRF that the network advertises to as specified by the targetVRF field of a routeAdvertisements object applying to it. +//// + +[id="advertising-the-default-cluster-network_{context}"] +== Advertising the default cluster network + +In this scenario, the default cluster network is exposed to the external network so that pod IP addresses and EgressIPs are advertised to the provider network. + +This scenario relies upon the following `FRRConfiguration` object: + +.`FRRConfiguration` CR +[source,yaml] +---- +apiVersion: k8s.ovn.org/v1 +kind: RouteAdvertisements +metadata: + name: default +spec: + advertisements: + - PodNetwork + - EgressIP + networkSelectors: + - networkSelectionType: DefaultNetwork + frrConfigurationSelector: + matchLabels: + routeAdvertisements: receive-all + nodeSelector: {} +---- + +When the OVN-Kubernetes controller sees this `RouteAdvertisements` CR, it generates further `FRRConfiguration` objects based on the selected ones that configure the FRR daemon to advertise the routes for the default cluster network. + +.An example of a `FRRConfiguration` CR generated by OVN-Kubernetes +[source,yaml] +---- +apiVersion: frrk8s.metallb.io/v1beta1 +kind: FRRConfiguration +metadata: + name: ovnk-generated-abcdef + namespace: openshift-frr-k8s +spec: + bgp: + routers: + - asn: 64512 + neighbors: + - address: 172.18.0.5 + asn: 64512 + toReceive: + allowed: + mode: filtered + toAdvertise: + allowed: + prefixes: + - + prefixes: + - + nodeSelector: + matchLabels: + kubernetes.io/hostname: ovn-worker +---- + +In the example generated `FRRConfiguration` object, `` is the subnet of the default cluster network that is advertised to the provider network. + +[id="advertising-pod-ips-from-a-user-defined-network-over-bgp_{context}"] +== Advertising pod IPs from a cluster user-defined network over BGP + +In this scenario, the blue cluster user-defined network (CUDN) is exposed to the external network so that the network's pod IP addresses and EgressIPs are advertised to the provider network. + +This scenario relies upon the following `FRRConfiguration` object: + +.`FRRConfiguration` CR +[source,yaml] +---- +apiVersion: frrk8s.metallb.io/v1beta1 +kind: FRRConfiguration +metadata: + name: receive-all + namespace: openshift-frr-k8s + labels: + routeAdvertisements: receive-all +spec: + bgp: + routers: + - asn: 64512 + neighbors: + - address: 172.18.0.5 + asn: 64512 + disableMP: true + toReceive: + allowed: + mode: all +---- + +With this `FRRConfiguration` object, routes will be imported from neighbor `172.18.0.5` into the default VRF and are available to the default cluster network. + +The CUDNs are advertised over the default VRF as illustrated in the following diagram: + +image::524-openshift-bgp-ovn-k8s-no-vpn-0325.png[Advertising pod IPs from a cluster user-defined network over BGP] + +Red CUDN:: +- A VRF named `red` associated with a CUDN named `red` +- A subnet of `10.0.0.0/24` + +Blue CUDN:: +- A VRF named `blue` associated with a CUDN named `blue` +- A subnet of `10.0.1.0/24` + +In this configuration, two separate CUDNs are defined. The red network covers the `10.0.0.0/24` subnet and the blue network covers the `10.0.1.0/24` subnet. The red and blue networks are labeled as `export: true`. + +The following `RouteAdvertisements` CR describes the configuration for the red and blue tenants: + +.`RouteAdvertisements` CR for the red and blue tenants +[source,yaml] +---- +apiVersion: k8s.ovn.org/v1 +kind: RouteAdvertisements +metadata: + name: advertise-cudns +spec: + advertisements: + - PodNetwork + - EgressIP + networkSelectors: + - networkSelectionType: ClusterUserDefinedNetworks + clusterUserDefinedNetworkSelector: + networkSelector: + matchLabels: + export: "true" + frrConfigurationSelector: + matchLabels: + routeAdvertisements: receive-all + nodeSelector: {} +---- + +When the OVN-Kubernetes controller sees this `RouteAdvertisements` CR, it generates generates further `FRRConfiguration` objects based on the selected ones that configure the FRR daemon to advertise the routes. The following example is of one such configuration object, with the number of `FRRConfiguration` objects created depending on the node and networks selected. + +.An example of a `FRRConfiguration` CR generated by OVN-Kubernetes +[source,yaml] +---- +apiVersion: frrk8s.metallb.io/v1beta1 +kind: FRRConfiguration +metadata: + name: ovnk-generated-abcdef + namespace: openshift-frr-k8s +spec: + bgp: + routers: + - asn: 64512 + vrf: blue + imports: + - vrf: default + - asn: 64512 + neighbors: + - address: 172.18.0.5 + asn: 64512 + toReceive: + allowed: + mode: filtered + toAdvertise: + allowed: + prefixes: + - 10.0.1.0/24 + prefixes: + - 10.0.1.0/24 + imports: + - vrf: blue + nodeSelector: + matchLabels: + kubernetes.io/hostname: ovn-worker +---- + +The generated `FRRConfiguration` object configures the subnet `10.0.1.0/24`, which belongs to network blue, to be imported into the default VRF and advertised to the `172.18.0.5` neighbor. An `FRRConfiguration` object is generated for each network and nodes selected by a `RouteAdvertisements` CR with the appropriate prefixes that apply to each node. + +When the `targetVRF` field is omitted, the routes are leaked and advertised over the default VRF. Additionally, routes that were imported to the default VRF after the definition of the initial FRRConfiguration object are also imported into the blue VRF. + +[id="advertising-pod-ips-from-a-user-defined-network-over-bgp-with-vpn_{context}"] +== Advertising pod IPs from a cluster user-defined network over BGP with VPN + +In this scenario, a VLAN interface is attached to the VRF device associated with the blue network. This setup provides a _VRF lite_ design, where FRR-K8S is used to advertise the blue network only over the corresponding BGP session on the blue network VRF/VLAN link to the next hop Provide Edge (PE) router. The red tenant uses the same configuration. The blue and red networks are labeled as `export: true`. + +[IMPORTANT] +==== +This scenario does not support the use of EgressIPs. +==== + +The following diagram illustrates this configuration: + +image::524-openshift-bgp-ovn-k8s-vrf-lite-0325.png[Advertising pod IPs from a cluster user-defined network over BGP with VPN] + +Red CUDN:: +- A VRF named `red` associated with a CUDN named `red` +- A VLAN interface attached to the VRF device and connected to the external PE router +- An assigned subnet of `10.0.2.0/24` + +Blue CUDN:: +- A VRF named `blue` associated with a CUDN named `blue` +- A VLAN interface attached to the VRF device and connected to the external PE router +- An assigned subnet of `10.0.1.0/24` + +[NOTE] +==== +This approach is available only when you use OVN-Kubernetes in local gateway mode by setting `routingViaHost=true`. +==== + +In the following configuration, an additional `FRRConfiguration` CR configures peering with the PE router on the blue and red VLANs: + +.`FRRConfiguration` CR manually configured for BGP VPN setup +[source,yaml] +---- +apiVersion: frrk8s.metallb.io/v1beta1 +kind: FRRConfiguration +metadata: + name: vpn-blue-red + namespace: openshift-frr-k8s + labels: + routeAdvertisements: vpn-blue-red +spec: + bgp: + routers: + - asn: 64512 + vrf: blue + neighbors: + - address: 182.18.0.5 + asn: 64512 + toReceive: + allowed: + mode: filtered + - asn: 64512 + vrf: red + neighbors: + - address: 192.18.0.5 + asn: 64512 + toReceive: + allowed: + mode: filtered +---- + +The following `RouteAdvertisements` CR describes the configuration for the blue and red tenants: + +.`RouteAdvertisements` CR for the blue and red tenants +[source,yaml] +---- +apiVersion: k8s.ovn.org/v1 +kind: RouteAdvertisements +metadata: + name: advertise-vrf-lite +spec: + targetVRF: auto + advertisements: + - "PodNetwork" + nodeSelector: {} + frrConfigurationSelector: + matchLabels: + routeAdvertisements: vpn-blue-red + networkSelectors: + - networkSelectionType: ClusterUserDefinedNetworks + clusterUserDefinedNetworkSelector: + networkSelector: + matchLabels: + export: "true" +---- + +In the `RouteAdvertisements` CR, the `targetVRF` is set to `auto` so that advertisements occur within the VRF device that corresponds to the individual networks that are selected. In this scenario, the pod subnet for blue is advertised over the blue VRF device, and the pod subnet for red is advertised over the red VRF device. Additionally, each BGP session imports routes to only the corresponding CUDN VRF as defined by the initial `FRRConfiguration` object. + +When the OVN-Kubernetes controller sees this `RouteAdvertisements` CR, it generates further `FRRConfiguration` objects based on the selected ones that configure the FRR daemon to advertise the routes for the blue and red tenants. + +.`FRRConfiguration` CR generated by OVN-Kubernetes for blue and red tenants +[source,yaml] +---- +apiVersion: frrk8s.metallb.io/v1beta1 +kind: FRRConfiguration +metadata: + name: ovnk-generated-abcde + namespace: openshift-frr-k8s +spec: + bgp: + routers: + - asn: 64512 + neighbors: + - address: 182.18.0.5 + asn: 64512 + toReceive: + allowed: + mode: filtered + toAdvertise: + allowed: + prefixes: + - 10.0.1.0/24 + vrf: blue + prefixes: + - 10.0.1.0/24 + - asn: 64512 + neighbors: + - address: 192.18.0.5 + asn: 64512 + toReceive: + allowed: + mode: filtered + toAdvertise: + allowed: + prefixes: + - 10.0.2.0/24 + vrf: red + prefixes: + - 10.0.2.0/24 + nodeSelector: + matchLabels: + kubernetes.io/hostname: ovn-worker +---- + +In this scenario, any filtering or selection of routes to receive must be done in the `FRRConfiguration` CR that defines peering relationships. diff --git a/modules/nw-routeadvertisements-object.adoc b/modules/nw-routeadvertisements-object.adoc new file mode 100644 index 0000000000..108e010441 --- /dev/null +++ b/modules/nw-routeadvertisements-object.adoc @@ -0,0 +1,42 @@ +// Module included in the following assemblies: +// +// * networking/route_advertisements/about-route-advertisements.adoc + +:_mod-docs-content-type: CONCEPT +[id="nw-bgp-routeadvertisements-object_{context}"] += RouteAdvertisements object configuration + +You can define an `RouteAdvertisements` object, which is cluster scoped, with the following properties. + +The fields for the `RouteAdvertisements` custom resource (CR) are described in the following table: + +.`RouteAdvertisements` object +[cols=".^2,.^2,.^6",options="header"] +|==== +|Field|Type|Description + +|`metadata.name` +|`string` +|Specifies the name of the `RouteAdvertisements` object. + +|`advertisements` +|`array` +|Specifies an array that can contain a list of different types of networks to advertise. Supports only the `"PodNetwork"` and `"EgressIP"` values. + +|`frrConfigurationSelector` +|`object` +|Determines which `FRRConfiguration` CR the OVN-Kubernetes driven `FRRConfiguration` CR is based on. + +|`networkSelector` +|`object` +|Specifies which networks to advertise among default cluster network and cluster user defined networks (CUDNs). + +|`nodeSelector` +|`object` +| +Limits the advertisements to selected nodes. When `advertisements="PodNetwork"` is selected, all nodes must be selected. When `advertisements="EgressIP"` is selected, only the egress IP addresses assigned to the selected nodes are advertised. + +|`targetVRF` +|`string` +|Determines which router to advertise the routes in. Routes are advertised on the routers associated with this virtual routing and forwarding (VRF) target, as specified on the selected `FRRConfiguration` CR. When omitted, the default VRF is used as the target. When specified as `auto`, a VRF with the same name as the network name is used as the target. +|==== diff --git a/modules/nw-routeadvertisements-setup.adoc b/modules/nw-routeadvertisements-setup.adoc new file mode 100644 index 0000000000..c6ad3f60b1 --- /dev/null +++ b/modules/nw-routeadvertisements-setup.adoc @@ -0,0 +1,491 @@ +// Module included in the following assemblies: +// +// * networking/route_advertisements/example-route-advertisement-setup.adoc + +:_mod-docs-content-type: PROCEDURE +[id="nw-route-advertisements-setup_{context}"] += Sample route advertisements setup + +As a cluster administrator, you can enable Border Gateway Protocol (BGP) routing support for your cluster. This configuration is intended as a sample that demonstrates how to configure route advertisements. The configuration uses route reflection rather than a full mesh setup. + +[NOTE] +==== +BGP routing is supported only on bare-metal infrastructure. +==== + +.Prerequisites + +* You installed the {oc-first}. +* You are logged in to the cluster as a user with `cluster-admin` privileges. +* The cluster is installed on bare-metal infrastructure. +* You have a bare-metal system with access to the cluster where you plan to run the FRR daemon container. + +.Procedure + +. Confirm that the `RouteAdvertisements` feature gate is enabled by running the following command: ++ +[source,terminal] +---- +$ oc get featuregate -oyaml | grep -i routeadvertisement +---- ++ +.Example output +[source,yaml] +---- + - name: RouteAdvertisements +---- + +. Configure the Cluster Network Operator (CNO) by running the following command: ++ +[source,terminal] +---- +$ oc patch Network.operator.openshift.io cluster --type=merge \ + -p=' + {"spec":{ + "additionalRoutingCapabilities": { + "providers": ["FRR"]}, + "defaultNetwork":{"ovnKubernetesConfig"{ + "routeAdvertisements":"Enabled" + }}}}' +---- ++ +It might take a few minutes for the CNO to restart all nodes. + +. Get the IP addresses of the nodes by running the following command: ++ +[source,terminal] +---- +$ oc get node -owide +---- ++ +.Example output +[source,text] +---- +NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME +master-0 Ready control-plane,master 27h v1.31.3 192.168.111.20 Red Hat Enterprise Linux CoreOS 418.94.202501062026-0 5.14.0-427.50.1.el9_4.x86_64 cri-o://1.31.4-2.rhaos4.18.git33d7598.el9 +master-1 Ready control-plane,master 27h v1.31.3 192.168.111.21 Red Hat Enterprise Linux CoreOS 418.94.202501062026-0 5.14.0-427.50.1.el9_4.x86_64 cri-o://1.31.4-2.rhaos4.18.git33d7598.el9 +master-2 Ready control-plane,master 27h v1.31.3 192.168.111.22 Red Hat Enterprise Linux CoreOS 418.94.202501062026-0 5.14.0-427.50.1.el9_4.x86_64 cri-o://1.31.4-2.rhaos4.18.git33d7598.el9 +worker-0 Ready worker 27h v1.31.3 192.168.111.23 Red Hat Enterprise Linux CoreOS 418.94.202501062026-0 5.14.0-427.50.1.el9_4.x86_64 cri-o://1.31.4-2.rhaos4.18.git33d7598.el9 +worker-1 Ready worker 27h v1.31.3 192.168.111.24 Red Hat Enterprise Linux CoreOS 418.94.202501062026-0 5.14.0-427.50.1.el9_4.x86_64 cri-o://1.31.4-2.rhaos4.18.git33d7598.el9 +worker-2 Ready worker 27h v1.31.3 192.168.111.25 Red Hat Enterprise Linux CoreOS 418.94.202501062026-0 5.14.0-427.50.1.el9_4.x86_64 cri-o://1.31.4-2.rhaos4.18.git33d7598.el9 +---- + +. Get the default pod network of each node by running the following command: ++ +[source,terminal] +---- +$ oc get node -o=jsonpath={.metadata.annotations.k8s\\.ovn\\.org/node-subnets} +---- ++ +.Example output +[source,text] +---- +{"default":["10.129.0.0/23"],"ns1.udn-network-primary-layer3":["10.150.6.0/24"]} +---- + +. On the bare-metal hypervisor, get the IP address for the external FRR container to use by running the following command: ++ +[source,terminal] +---- +$ ip -j -d route get | jq -r '.[] | .dev' | xargs ip -d -j address show | jq -r '.[] | .addr_info[0].local' +---- + +. Create a `frr.conf` file for FRR that includes each node's IP address, as shown in the following example: ++ +.Example `frr.conf` configuration file +[source,text] +---- +router bgp 64512 + no bgp default ipv4-unicast + no bgp default ipv6-unicast + no bgp network import-check + neighbor 192.168.111.20 remote-as 64512 + neighbor 192.168.111.20 route-reflector-client + neighbor 192.168.111.21 remote-as 64512 + neighbor 192.168.111.21 route-reflector-client + neighbor 192.168.111.22 remote-as 64512 + neighbor 192.168.111.22 route-reflector-client + neighbor 192.168.111.40 remote-as 64512 + neighbor 192.168.111.40 route-reflector-client + neighbor 192.168.111.47 remote-as 64512 + neighbor 192.168.111.47 route-reflector-client + neighbor 192.168.111.23 remote-as 64512 + neighbor 192.168.111.23 route-reflector-client + neighbor 192.168.111.24 remote-as 64512 + neighbor 192.168.111.24 route-reflector-client + neighbor 192.168.111.25 remote-as 64512 + neighbor 192.168.111.25 route-reflector-client + address-family ipv4 unicast + network 192.168.1.0/24 + network 192.169.1.1/32 + exit-address-family + address-family ipv4 unicast + neighbor 192.168.111.20 activate + neighbor 192.168.111.20 next-hop-self + neighbor 192.168.111.21 activate + neighbor 192.168.111.21 next-hop-self + neighbor 192.168.111.22 activate + neighbor 192.168.111.22 next-hop-self + neighbor 192.168.111.40 activate + neighbor 192.168.111.40 next-hop-self + neighbor 192.168.111.47 activate + neighbor 192.168.111.47 next-hop-self + neighbor 192.168.111.23 activate + neighbor 192.168.111.23 next-hop-self + neighbor 192.168.111.24 activate + neighbor 192.168.111.24 next-hop-self + neighbor 192.168.111.25 activate + neighbor 192.168.111.25 next-hop-self + exit-address-family + neighbor remote-as 64512 + neighbor route-reflector-client + address-family ipv6 unicast + network 2001:db8::/128 + exit-address-family + address-family ipv6 unicast + neighbor activate + neighbor next-hop-self + exit-address-family +---- + +. Create a file named `daemons` that includes the following content: ++ +.Example `daemons` configuration file +[source,text] +---- +# This file tells the frr package which daemons to start. +# +# Sample configurations for these daemons can be found in +# /usr/share/doc/frr/examples/. +# +# ATTENTION: +# +# When activating a daemon for the first time, a config file, even if it is +# empty, has to be present *and* be owned by the user and group "frr", else +# the daemon will not be started by /etc/init.d/frr. The permissions should +# be u=rw,g=r,o=. +# When using "vtysh" such a config file is also needed. It should be owned by +# group "frrvty" and set to ug=rw,o= though. Check /etc/pam.d/frr, too. +# +# The watchfrr and zebra daemons are always started. +# +bgpd=yes +ospfd=no +ospf6d=no +ripd=no +ripngd=no +isisd=no +pimd=no +ldpd=no +nhrpd=no +eigrpd=no +babeld=no +sharpd=no +pbrd=no +bfdd=yes +fabricd=no +vrrpd=no + +# +# If this option is set the /etc/init.d/frr script automatically loads +# the config via "vtysh -b" when the servers are started. +# Check /etc/pam.d/frr if you intend to use "vtysh"! +# +vtysh_enable=yes +zebra_options=" -A 127.0.0.1 -s 90000000" +bgpd_options=" -A 127.0.0.1" +ospfd_options=" -A 127.0.0.1" +ospf6d_options=" -A ::1" +ripd_options=" -A 127.0.0.1" +ripngd_options=" -A ::1" +isisd_options=" -A 127.0.0.1" +pimd_options=" -A 127.0.0.1" +ldpd_options=" -A 127.0.0.1" +nhrpd_options=" -A 127.0.0.1" +eigrpd_options=" -A 127.0.0.1" +babeld_options=" -A 127.0.0.1" +sharpd_options=" -A 127.0.0.1" +pbrd_options=" -A 127.0.0.1" +staticd_options="-A 127.0.0.1" +bfdd_options=" -A 127.0.0.1" +fabricd_options="-A 127.0.0.1" +vrrpd_options=" -A 127.0.0.1" + +# configuration profile +# +#frr_profile="traditional" +#frr_profile="datacenter" + +# +# This is the maximum number of FD's that will be available. +# Upon startup this is read by the control files and ulimit +# is called. Uncomment and use a reasonable value for your +# setup if you are expecting a large number of peers in +# say BGP. +#MAX_FDS=1024 + +# The list of daemons to watch is automatically generated by the init script. +#watchfrr_options="" + +# for debugging purposes, you can specify a "wrap" command to start instead +# of starting the daemon directly, e.g. to use valgrind on ospfd: +# ospfd_wrap="/usr/bin/valgrind" +# or you can use "all_wrap" for all daemons, e.g. to use perf record: +# all_wrap="/usr/bin/perf record --call-graph -" +# the normal daemon command is added to this at the end. +---- + +. Save both the `frr.conf` and `daemons` files in the same directory, such as `/tmp/frr`. + +. Create an external FRR container by running the following command: ++ +[source,terminal] +---- +$ sudo podman run -d --privileged --network host --rm --ulimit core=-1 --name frr --volume /tmp/frr:/etc/frr quay.io/frrouting/frr:9.1.0 +---- + +. Create the following `FRRConfiguration` and `RouteAdvertisements` configurations: +.. Create a `receive_all.yaml` file that includes the following content: ++ +.Example `receive_all.yaml` configuration file +[source,yaml] +---- +apiVersion: frrk8s.metallb.io/v1beta1 +kind: FRRConfiguration +metadata: + name: receive-all + namespace: openshift-frr-k8s +spec: + bgp: + routers: + - asn: 64512 + neighbors: + - address: 192.168.111.1 + asn: 64512 + toReceive: + allowed: + mode: all +---- + +.. Create a `ra.yaml` file that includes the following content: ++ +.Example `ra.yaml` configuration file +[source,yaml] +---- +apiVersion: k8s.ovn.org/v1 +kind: RouteAdvertisements +metadata: + name: default +spec: + nodeSelector: {} + frrConfigurationSelector: {} + networkSelectors: + - networkSelectionType: DefaultNetwork + advertisements: + - "PodNetwork" + - "EgressIP" +---- + +. Apply the `receive_all.yaml` and `ra.yaml` files by running the following command: ++ +[source,terminal] +---- +$ for f in receive_all.yaml ra.yaml; do oc apply -f $f; done +---- + +.Verification + +. Verify that the configurations were applied: +.. Verify that the `FRRConfiguration` configurations were created by running the following command: ++ +[source,terminal] +---- +$ oc get frrconfiguration -A +---- ++ +.Example output +[source,text] +---- +NAMESPACE NAME AGE +openshift-frr-k8s ovnk-generated-6lmfb 4h47m +openshift-frr-k8s ovnk-generated-bhmnm 4h47m +openshift-frr-k8s ovnk-generated-d2rf5 4h47m +openshift-frr-k8s ovnk-generated-f958l 4h47m +openshift-frr-k8s ovnk-generated-gmsmw 4h47m +openshift-frr-k8s ovnk-generated-kmnqg 4h47m +openshift-frr-k8s ovnk-generated-wpvgb 4h47m +openshift-frr-k8s ovnk-generated-xq7v6 4h47m +openshift-frr-k8s receive-all 4h47m +---- + +.. Verify that the `RouteAdvertisements` configurations were created by running the following command: ++ +[source,terminal] +---- +$ oc get ra -A +---- ++ +.Example output +[source,text] +---- +NAME STATUS +default Accepted +---- + +. Get the external FRR container ID by running the following command: ++ +[source,terminal] +---- +$ sudo podman ps | grep frr +---- ++ +.Example output +[source,text] +---- +22cfc713890e quay.io/frrouting/frr:9.1.0 /usr/lib/frr/dock... 5 hours ago Up 5 hours ago frr +---- + +. Use the container ID that you obtained in the previous step to check the BGP neighbor and routes in the external FRR container's `vtysh` session. Run the following command: ++ +[source,terminal] +---- +$ sudo podman exec -it vtysh -c "show ip bgp" +---- ++ +.Example output +[source,text] +---- +BGP table version is 10, local router ID is 192.168.111.1, vrf id 0 +Default local pref 100, local AS 64512 +Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, + i internal, r RIB-failure, S Stale, R Removed +Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self +Origin codes: i - IGP, e - EGP, ? - incomplete +RPKI validation codes: V valid, I invalid, N Not found + + Network Next Hop Metric LocPrf Weight Path + *>i10.128.0.0/23 192.168.111.22 0 100 0 i + *>i10.128.2.0/23 192.168.111.23 0 100 0 i + *>i10.129.0.0/23 192.168.111.20 0 100 0 i + *>i10.129.2.0/23 192.168.111.24 0 100 0 i + *>i10.130.0.0/23 192.168.111.21 0 100 0 i + *>i10.130.2.0/23 192.168.111.40 0 100 0 i + *>i10.131.0.0/23 192.168.111.25 0 100 0 i + *>i10.131.2.0/23 192.168.111.47 0 100 0 i + *> 192.168.1.0/24 0.0.0.0 0 32768 i + *> 192.169.1.1/32 0.0.0.0 0 32768 i +---- + +. Find the `frr-k8s` pod for each cluster node by running the following command: ++ +[source,terminal] +---- +$ oc -n openshift-frr-k8s get pod -owide +---- ++ +.Example output +[source,text] +---- +NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES +frr-k8s-86wmq 6/6 Running 0 25h 192.168.111.20 master-0 +frr-k8s-h2wl6 6/6 Running 0 25h 192.168.111.21 master-1 +frr-k8s-jlbgs 6/6 Running 0 25h 192.168.111.40 node1.example.com +frr-k8s-qc6l5 6/6 Running 0 25h 192.168.111.25 worker-2 +frr-k8s-qtxdc 6/6 Running 0 25h 192.168.111.47 node2.example.com +frr-k8s-s5bxh 6/6 Running 0 25h 192.168.111.24 worker-1 +frr-k8s-szgj9 6/6 Running 0 25h 192.168.111.22 master-2 +frr-k8s-webhook-server-6cd8b8d769-kmctw 1/1 Running 0 25h 10.131.2.9 node3.example.com +frr-k8s-zwmgh 6/6 Running 0 25h 192.168.111.23 worker-0 +---- + +. From the {product-title} cluster, check BGP routes on the cluster node's `frr-k8s` pod in the FRR container by running the following command: ++ +[source,terminal] +---- +$ oc -n openshift-frr-k8s -c frr rsh frr-k8s-86wmq +---- + +. Check the IP routes from the cluster node by running the following command: ++ +[source,terminal] +---- +sh-5.1# vtysh +---- ++ +.Example output +[source,text] +---- +Hello, this is FRRouting (version 8.5.3). +Copyright 1996-2005 Kunihiro Ishiguro, et al. +---- + +. Check the IP routes by running the following command: ++ +[source,terminal] +---- +worker-2# show ip bgp +---- ++ +.Example output +[source,text] +---- +BGP table version is 10, local router ID is 192.168.111.25, vrf id 0 +Default local pref 100, local AS 64512 +Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, + i internal, r RIB-failure, S Stale, R Removed +Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self +Origin codes: i - IGP, e - EGP, ? - incomplete +RPKI validation codes: V valid, I invalid, N Not found + + Network Next Hop Metric LocPrf Weight Path + *>i10.128.0.0/23 192.168.111.22 0 100 0 i + *>i10.128.2.0/23 192.168.111.23 0 100 0 i + *>i10.129.0.0/23 192.168.111.20 0 100 0 i + *>i10.129.2.0/23 192.168.111.24 0 100 0 i + *>i10.130.0.0/23 192.168.111.21 0 100 0 i + *>i10.130.2.0/23 192.168.111.40 0 100 0 i + *> 10.131.0.0/23 0.0.0.0 0 32768 i + *>i10.131.2.0/23 192.168.111.47 0 100 0 i + *>i192.168.1.0/24 192.168.111.1 0 100 0 i + *>i192.169.1.1/32 192.168.111.1 0 100 0 i + +Displayed 10 routes and 10 total paths +---- + +. From the {product-title} cluster, debug the node by running the following command: ++ +[source,terminal] +---- +$ oc debug node/ +---- ++ +.Example output +[source,text] +---- +Temporary namespace openshift-debug-lbtgh is created for debugging node... +Starting pod/worker-2-debug-zrg4v ... +To use host binaries, run `chroot /host` +Pod IP: 192.168.111.25 +If you don't see a command prompt, try pressing enter. +---- + +. Confirm that the BGP routes are being advertised by running the following command: ++ +[source,terminal] +---- +sh-5.1# ip route show | grep bgp +---- ++ +.Example output +[source,text] +---- +10.128.0.0/23 nhid 268 via 192.168.111.22 dev br-ex proto bgp metric 20 +10.128.2.0/23 nhid 259 via 192.168.111.23 dev br-ex proto bgp metric 20 +10.129.0.0/23 nhid 260 via 192.168.111.20 dev br-ex proto bgp metric 20 +10.129.2.0/23 nhid 261 via 192.168.111.24 dev br-ex proto bgp metric 20 +10.130.0.0/23 nhid 266 via 192.168.111.21 dev br-ex proto bgp metric 20 +10.130.2.0/23 nhid 262 via 192.168.111.40 dev br-ex proto bgp metric 20 +10.131.2.0/23 nhid 263 via 192.168.111.47 dev br-ex proto bgp metric 20 +192.168.1.0/24 nhid 264 via 192.168.111.1 dev br-ex proto bgp metric 20 +192.169.1.1 nhid 264 via 192.168.111.1 dev br-ex proto bgp metric 20 +---- diff --git a/networking/advanced_networking/route_advertisements/_attributes b/networking/advanced_networking/route_advertisements/_attributes new file mode 120000 index 0000000000..5b32de1e01 --- /dev/null +++ b/networking/advanced_networking/route_advertisements/_attributes @@ -0,0 +1 @@ +../../_attributes \ No newline at end of file diff --git a/networking/advanced_networking/route_advertisements/about-route-advertisements.adoc b/networking/advanced_networking/route_advertisements/about-route-advertisements.adoc new file mode 100644 index 0000000000..af467e6129 --- /dev/null +++ b/networking/advanced_networking/route_advertisements/about-route-advertisements.adoc @@ -0,0 +1,23 @@ +:_mod-docs-content-type: ASSEMBLY +[id="about-route-advertisements"] += About route advertisements +include::_attributes/common-attributes.adoc[] +:context: about-route-advertisements + +toc::[] + +This feature provides route advertisement capabilities for the OVN-Kubernetes network plugin. A Border Gateway Router (BGP) provider is required. For more information, see xref:../../../networking/advanced_networking/bgp_routing/about-bgp-routing.adoc#about-bgp-routing[About BGP routing]. + +include::modules/nw-routeadvertisements-about.adoc[leveloffset=+1] +include::modules/nw-routeadvertisements-object.adoc[leveloffset=+1] +include::modules/nw-routeadvertisements-example.adoc[leveloffset=+1] + +[role="_additional-resources"] +[id="additional-resources_about-route-advertisements"] +== Additional resources + +- xref:../../../networking/ingress_load_balancing/metallb/metallb-frr-k8s.adoc#nw-metallb-frrconfiguration-crd_configure-metallb-frr-k8s[Configuring the FRRConfiguration CRD] + +- link:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/assembly_starting-a-service-within-an-isolated-vrf-network_configuring-and-managing-networking[Starting a service within an isolated VRF network] + +- link:https://docs.frrouting.org/en/latest/bgp.html[FRRouting User Guide: BGP] diff --git a/networking/advanced_networking/route_advertisements/disabling-route-advertisements.adoc b/networking/advanced_networking/route_advertisements/disabling-route-advertisements.adoc new file mode 100644 index 0000000000..e23b766f6c --- /dev/null +++ b/networking/advanced_networking/route_advertisements/disabling-route-advertisements.adoc @@ -0,0 +1,11 @@ +:_mod-docs-content-type: ASSEMBLY +[id="disabling-route-advertisements"] += Disabling route advertisements +include::_attributes/common-attributes.adoc[] +:context: disabling-route-advertisements + +toc::[] + +As a cluster administrator, you can disable additional route advertisements for your cluster. + +include::modules/nw-route-advertisements-disable.adoc[leveloffset=+1] diff --git a/networking/advanced_networking/route_advertisements/enabling-route-advertisements.adoc b/networking/advanced_networking/route_advertisements/enabling-route-advertisements.adoc new file mode 100644 index 0000000000..ca690ce6ed --- /dev/null +++ b/networking/advanced_networking/route_advertisements/enabling-route-advertisements.adoc @@ -0,0 +1,11 @@ +:_mod-docs-content-type: ASSEMBLY +[id="enabling-route-advertisements"] += Enabling route advertisements +include::_attributes/common-attributes.adoc[] +:context: enabling-route-advertisements + +toc::[] + +As a cluster administrator, you can configure additional route advertisements for your cluster. You must use the OVN-Kubernetes network plugin. + +include::modules/nw-route-advertisements-enable.adoc[leveloffset=+1] diff --git a/networking/advanced_networking/route_advertisements/example-route-advertisement-setup.adoc b/networking/advanced_networking/route_advertisements/example-route-advertisement-setup.adoc new file mode 100644 index 0000000000..23bc3d373d --- /dev/null +++ b/networking/advanced_networking/route_advertisements/example-route-advertisement-setup.adoc @@ -0,0 +1,11 @@ +:_mod-docs-content-type: ASSEMBLY +[id="example-route-advertisements-setup"] += Example route advertisements setup +include::_attributes/common-attributes.adoc[] +:context: example-route-advertisements-setup + +toc::[] + +As a cluster administrator, you can configure the following example route advertisements setup for your cluster. This configuration is intended as a sample that demonstrates how to configure route advertisements. + +include::modules/nw-routeadvertisements-setup.adoc[leveloffset=+1] diff --git a/networking/advanced_networking/route_advertisements/images b/networking/advanced_networking/route_advertisements/images new file mode 120000 index 0000000000..5fa6987088 --- /dev/null +++ b/networking/advanced_networking/route_advertisements/images @@ -0,0 +1 @@ +../../images \ No newline at end of file diff --git a/networking/advanced_networking/route_advertisements/modules b/networking/advanced_networking/route_advertisements/modules new file mode 120000 index 0000000000..8b0e854007 --- /dev/null +++ b/networking/advanced_networking/route_advertisements/modules @@ -0,0 +1 @@ +../../modules \ No newline at end of file diff --git a/networking/advanced_networking/route_advertisements/snippets b/networking/advanced_networking/route_advertisements/snippets new file mode 120000 index 0000000000..7bf6da9a51 --- /dev/null +++ b/networking/advanced_networking/route_advertisements/snippets @@ -0,0 +1 @@ +../../snippets \ No newline at end of file