Skip to content

Commit cb5375b

Browse files
Merge pull request #2729 from openshift/d/s-merge-08-20-2025
OCPBUGS-55962: DownStream Merge [08-20-2025]
2 parents b9dab27 + e0dd341 commit cb5375b

File tree

71 files changed

+5712
-385
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+5712
-385
lines changed

.github/workflows/test.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -483,14 +483,15 @@ jobs:
483483
- {"target": "network-segmentation", "ha": "noHA", "gateway-mode": "shared", "ipfamily": "ipv6", "disable-snat-multiple-gws": "noSnatGW", "second-bridge": "1br", "ic": "ic-single-node-zones"}
484484
- {"target": "bgp", "ha": "noHA", "gateway-mode": "local", "ipfamily": "dualstack", "disable-snat-multiple-gws": "snatGW", "second-bridge": "1br", "ic": "ic-single-node-zones", "routeadvertisements": "advertise-default", "network-segmentation": "enable-network-segmentation", "dns-name-resolver": "enable-dns-name-resolver"}
485485
- {"target": "bgp", "ha": "noHA", "gateway-mode": "shared", "ipfamily": "dualstack", "disable-snat-multiple-gws": "noSnatGW", "second-bridge": "1br", "ic": "ic-single-node-zones", "routeadvertisements": "advertise-default", "network-segmentation": "enable-network-segmentation", "dns-name-resolver": "enable-dns-name-resolver"}
486+
- {"target": "bgp-loose-isolation", "ha": "noHA", "gateway-mode": "shared", "ipfamily": "dualstack", "disable-snat-multiple-gws": "snatGW", "second-bridge": "1br", "ic": "ic-single-node-zones", "routeadvertisements": "advertise-default", "network-segmentation": "enable-network-segmentation", "advertised-udn-isolation-mode": "loose"}
486487
- {"target": "traffic-flow-test-only","ha": "noHA", "gateway-mode": "shared", "ipfamily": "ipv4", "disable-snat-multiple-gws": "noSnatGW", "second-bridge": "1br", "ic": "ic-single-node-zones", "traffic-flow-tests": "1-24", "network-segmentation": "enable-network-segmentation"}
487488
- {"target": "tools", "ha": "noHA", "gateway-mode": "local", "ipfamily": "dualstack", "disable-snat-multiple-gws": "SnatGW", "second-bridge": "1br", "ic": "ic-single-node-zones", "network-segmentation": "enable-network-segmentation"}
488489
needs: [ build-pr ]
489490
env:
490491
JOB_NAME: "${{ matrix.target }}-${{ matrix.ha }}-${{ matrix.gateway-mode }}-${{ matrix.ipfamily }}-${{ matrix.disable-snat-multiple-gws }}-${{ matrix.second-bridge }}-${{ matrix.ic }}"
491492
OVN_HYBRID_OVERLAY_ENABLE: ${{ (matrix.target == 'control-plane' || matrix.target == 'control-plane-helm') && (matrix.ipfamily == 'ipv4' || matrix.ipfamily == 'dualstack' ) }}
492-
OVN_MULTICAST_ENABLE: "${{ matrix.target == 'control-plane' || matrix.target == 'control-plane-helm' || matrix.target == 'network-segmentation' || matrix.target == 'bgp' }}"
493-
OVN_EMPTY_LB_EVENTS: "${{ matrix.target == 'control-plane' || matrix.target == 'control-plane-helm' || matrix.target == 'bgp' }}"
493+
OVN_MULTICAST_ENABLE: "${{ matrix.target == 'control-plane' || matrix.target == 'control-plane-helm' || matrix.target == 'network-segmentation' || matrix.target == 'bgp' || matrix.target == 'bgp-loose-isolation' }}"
494+
OVN_EMPTY_LB_EVENTS: "${{ matrix.target == 'control-plane' || matrix.target == 'control-plane-helm' || matrix.target == 'bgp' || matrix.target == 'bgp-loose-isolation' }}"
494495
OVN_HA: "${{ matrix.ha == 'HA' }}"
495496
OVN_DISABLE_SNAT_MULTIPLE_GWS: "${{ matrix.disable-snat-multiple-gws == 'noSnatGW' }}"
496497
KIND_INSTALL_METALLB: "${{ matrix.target == 'control-plane' || matrix.target == 'control-plane-helm' || matrix.target == 'network-segmentation' }}"
@@ -514,6 +515,7 @@ jobs:
514515
ENABLE_ROUTE_ADVERTISEMENTS: "${{ matrix.routeadvertisements != '' }}"
515516
ADVERTISE_DEFAULT_NETWORK: "${{ matrix.routeadvertisements == 'advertise-default' }}"
516517
ENABLE_PRE_CONF_UDN_ADDR: "${{ matrix.ic == 'ic-single-node-zones' && (matrix.target == 'network-segmentation' || matrix.network-segmentation == 'enable-network-segmentation') }}"
518+
ADVERTISED_UDN_ISOLATION_MODE: "${{ matrix.advertised-udn-isolation-mode }}"
517519
steps:
518520

519521
- name: Install VRF kernel module
@@ -647,7 +649,7 @@ jobs:
647649
# set 3 hours for control-plane tests as these might take a while
648650
# give 10m extra to give ginkgo chance to timeout before github so that we
649651
# get its output
650-
timeout-minutes: ${{ matrix.target == 'bgp' && 190 || matrix.target == 'control-plane' && 190 || matrix.target == 'control-plane-helm' && 190 || matrix.target == 'external-gateway' && 190 || 130 }}
652+
timeout-minutes: ${{ matrix.target == 'bgp-loose-isolation' && 190 || matrix.target == 'bgp' && 190 || matrix.target == 'control-plane' && 190 || matrix.target == 'control-plane-helm' && 190 || matrix.target == 'external-gateway' && 190 || 130 }}
651653
run: |
652654
# used by e2e diagnostics package
653655
export OVN_IMAGE="ovn-daemonset-fedora:pr"
@@ -671,7 +673,7 @@ jobs:
671673
fi
672674
elif [ "${{ matrix.target }}" == "network-segmentation" ]; then
673675
make -C test control-plane WHAT="Network Segmentation"
674-
elif [ "${{ matrix.target }}" == "bgp" ]; then
676+
elif [ "${{ matrix.target }}" == "bgp" ] || [ "${{ matrix.target }}" == "bgp-loose-isolation" ]; then
675677
make -C test control-plane
676678
elif [ "${{ matrix.target }}" == "tools" ]; then
677679
make -C go-controller build

contrib/kind-common

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -758,22 +758,52 @@ deploy_bgp_external_server() {
758758
$OCI_BIN run --cap-add NET_ADMIN --user 0 -d --network bgpnet --rm --name bgpserver -p 8080:8080 registry.k8s.io/e2e-test-images/agnhost:2.45 netexec
759759
# let's make the bgp external server have its default route towards FRR router so that we don't need to add routes during tests back to the pods in the
760760
# cluster for return traffic
761-
local bgp_network_frr_v4 bgp_network_frr_v6
761+
local bgp_network_frr_v4 bgp_network_frr_v6 kind_network_frr_v4 kind_network_frr_v6
762762
bgp_network_frr_v4=$($OCI_BIN inspect -f '{{.NetworkSettings.Networks.bgpnet.IPAddress}}' frr)
763-
echo "FRR kind network IPv4: ${bgp_network_frr_v4}"
763+
echo "FRR bgp network IPv4: ${bgp_network_frr_v4}"
764764
$OCI_BIN exec bgpserver ip route replace default via "$bgp_network_frr_v4"
765765
if [ "$PLATFORM_IPV6_SUPPORT" == true ] ; then
766766
bgp_network_frr_v6=$($OCI_BIN inspect -f '{{.NetworkSettings.Networks.bgpnet.GlobalIPv6Address}}' frr)
767-
echo "FRR kind network IPv6: ${bgp_network_frr_v6}"
767+
echo "FRR bgp network IPv6: ${bgp_network_frr_v6}"
768768
$OCI_BIN exec bgpserver ip -6 route replace default via "$bgp_network_frr_v6"
769769
fi
770-
# disable the default route to make sure the container only routes accross
771-
# directly connected or learnt networks (doing this at the very end since
772-
# docker changes the routing table when a new network is connected)
773-
$OCI_BIN exec frr ip route delete default
774-
$OCI_BIN exec frr ip route
775-
$OCI_BIN exec frr ip -6 route delete default
776-
$OCI_BIN exec frr ip -6 route
770+
if [ "$ADVERTISED_UDN_ISOLATION_MODE" == "loose" ]; then
771+
kind_network_frr_v4=$($OCI_BIN inspect -f '{{.NetworkSettings.Networks.kind.IPAddress}}' frr)
772+
echo "FRR kind network IPv4: ${kind_network_frr_v4}"
773+
# If UDN isolation is in loose disabled, we need to set the default gateway for the nodes in the cluster
774+
# to the FRR router so that cross-UDN traffic can be routed back to the pods in the cluster in the loose mode.
775+
echo "Setting default gateway for nodes in the cluster to FRR router IPv4: ${kind_network_frr_v4}"
776+
set_nodes_default_gw "$kind_network_frr_v4"
777+
if [ "$PLATFORM_IPV6_SUPPORT" == true ] ; then
778+
kind_network_frr_v6=$($OCI_BIN inspect -f '{{.NetworkSettings.Networks.kind.GlobalIPv6Address}}' frr)
779+
echo "FRR kind network IPv6: ${kind_network_frr_v6}"
780+
set_nodes_default_gw "$kind_network_frr_v6"
781+
fi
782+
else
783+
# disable the default route to make sure the container only routes accross
784+
# directly connected or learnt networks (doing this at the very end since
785+
# docker changes the routing table when a new network is connected)
786+
$OCI_BIN exec frr ip route delete default
787+
$OCI_BIN exec frr ip route
788+
$OCI_BIN exec frr ip -6 route delete default
789+
$OCI_BIN exec frr ip -6 route
790+
fi
791+
}
792+
793+
set_nodes_default_gw() {
794+
local gw="$1"
795+
local ip_cmd="ip"
796+
local route_cmd="route replace default via"
797+
798+
# Check if $gw is IPv6 (contains ':')
799+
if [[ "$gw" == *:* ]]; then
800+
ip_cmd="ip -6"
801+
fi
802+
803+
KIND_NODES=$(kind_get_nodes)
804+
for node in $KIND_NODES; do
805+
$OCI_BIN exec "$node" $ip_cmd $route_cmd "$gw"
806+
done
777807
}
778808

779809
destroy_bgp() {

contrib/kind.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ usage() {
5353
echo " [-ic | --enable-interconnect]"
5454
echo " [-uae | --preconfigured-udn-addresses-enable]"
5555
echo " [-rae | --enable-route-advertisements]"
56+
echo " [-rud | --routed-udn-isolation-disable]"
5657
echo " [-adv | --advertise-default-network]"
5758
echo " [-nqe | --network-qos-enable]"
5859
echo " [--isolated]"
@@ -127,6 +128,7 @@ echo "-obs | --observability Enable OVN Observability fea
127128
echo "-uae | --preconfigured-udn-addresses-enable Enable connecting workloads with preconfigured network to user-defined networks"
128129
echo "-rae | --enable-route-advertisements Enable route advertisements"
129130
echo "-adv | --advertise-default-network Applies a RouteAdvertisements configuration to advertise the default network on all nodes"
131+
echo "-rud | --routed-udn-isolation-disable Disable isolation across BGP-advertised UDNs (sets advertised-udn-isolation-mode=loose). DEFAULT: strict."
130132
echo ""
131133
}
132134

@@ -316,6 +318,8 @@ parse_args() {
316318
;;
317319
-adv | --advertise-default-network) ADVERTISE_DEFAULT_NETWORK=true
318320
;;
321+
-rud | --routed-udn-isolation-disable) ADVERTISED_UDN_ISOLATION_MODE=loose
322+
;;
319323
-ce | --enable-central ) OVN_ENABLE_INTERCONNECT=false
320324
CENTRAL_ARG_PROVIDED=true
321325
;;
@@ -417,6 +421,7 @@ print_params() {
417421
echo "ENABLE_MULTI_NET = $ENABLE_MULTI_NET"
418422
echo "ENABLE_NETWORK_SEGMENTATION= $ENABLE_NETWORK_SEGMENTATION"
419423
echo "ENABLE_ROUTE_ADVERTISEMENTS= $ENABLE_ROUTE_ADVERTISEMENTS"
424+
echo "ADVERTISED_UDN_ISOLATION_MODE= $ADVERTISED_UDN_ISOLATION_MODE"
420425
echo "ADVERTISE_DEFAULT_NETWORK = $ADVERTISE_DEFAULT_NETWORK"
421426
echo "ENABLE_PRE_CONF_UDN_ADDR = $ENABLE_PRE_CONF_UDN_ADDR"
422427
echo "OVN_ENABLE_INTERCONNECT = $OVN_ENABLE_INTERCONNECT"
@@ -663,6 +668,7 @@ set_default_params() {
663668
echo "Preconfigured UDN addresses requires interconnect to be enabled (-ic)"
664669
exit 1
665670
fi
671+
ADVERTISED_UDN_ISOLATION_MODE=${ADVERTISED_UDN_ISOLATION_MODE:-strict}
666672
ADVERTISE_DEFAULT_NETWORK=${ADVERTISE_DEFAULT_NETWORK:-false}
667673
OVN_COMPACT_MODE=${OVN_COMPACT_MODE:-false}
668674
if [ "$OVN_COMPACT_MODE" == true ]; then
@@ -916,6 +922,7 @@ create_ovn_kube_manifests() {
916922
--preconfigured-udn-addresses-enable="${ENABLE_PRE_CONF_UDN_ADDR}" \
917923
--route-advertisements-enable="${ENABLE_ROUTE_ADVERTISEMENTS}" \
918924
--advertise-default-network="${ADVERTISE_DEFAULT_NETWORK}" \
925+
--advertised-udn-isolation-mode="${ADVERTISED_UDN_ISOLATION_MODE}" \
919926
--ovnkube-metrics-scale-enable="${OVN_METRICS_SCALE_ENABLE}" \
920927
--compact-mode="${OVN_COMPACT_MODE}" \
921928
--enable-interconnect="${OVN_ENABLE_INTERCONNECT}" \

dist/images/daemonset.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ OVN_NETWORK_SEGMENTATION_ENABLE=
7474
OVN_PRE_CONF_UDN_ADDR_ENABLE=
7575
OVN_ROUTE_ADVERTISEMENTS_ENABLE=
7676
OVN_ADVERTISE_DEFAULT_NETWORK=
77+
OVN_ADVERTISED_UDN_ISOLATION_MODE=
7778
OVN_V4_JOIN_SUBNET=""
7879
OVN_V6_JOIN_SUBNET=""
7980
OVN_V4_MASQUERADE_SUBNET=""
@@ -283,6 +284,9 @@ while [ "$1" != "" ]; do
283284
--advertise-default-network)
284285
OVN_ADVERTISE_DEFAULT_NETWORK=$VALUE
285286
;;
287+
--advertised-udn-isolation-mode)
288+
OVN_ADVERTISED_UDN_ISOLATION_MODE=$VALUE
289+
;;
286290
--egress-service-enable)
287291
OVN_EGRESSSERVICE_ENABLE=$VALUE
288292
;;
@@ -478,6 +482,8 @@ ovn_route_advertisements_enable=${OVN_ROUTE_ADVERTISEMENTS_ENABLE}
478482
echo "ovn_route_advertisements_enable: ${ovn_route_advertisements_enable}"
479483
ovn_advertise_default_network=${OVN_ADVERTISE_DEFAULT_NETWORK}
480484
echo "ovn_advertise_default_network: ${ovn_advertise_default_network}"
485+
ovn_advertised_udn_isolation_mode=${OVN_ADVERTISED_UDN_ISOLATION_MODE}
486+
echo "ovn_advertised_udn_isolation_mode: ${ovn_advertised_udn_isolation_mode}"
481487
ovn_hybrid_overlay_net_cidr=${OVN_HYBRID_OVERLAY_NET_CIDR}
482488
echo "ovn_hybrid_overlay_net_cidr: ${ovn_hybrid_overlay_net_cidr}"
483489
ovn_disable_snat_multiple_gws=${OVN_DISABLE_SNAT_MULTIPLE_GWS}
@@ -620,6 +626,7 @@ ovn_image=${ovnkube_image} \
620626
ovn_network_segmentation_enable=${ovn_network_segmentation_enable} \
621627
ovn_pre_conf_udn_addr_enable=${ovn_pre_conf_udn_addr_enable} \
622628
ovn_route_advertisements_enable=${ovn_route_advertisements_enable} \
629+
ovn_advertised_udn_isolation_mode=${ovn_advertised_udn_isolation_mode} \
623630
ovn_egress_service_enable=${ovn_egress_service_enable} \
624631
ovn_ssl_en=${ovn_ssl_en} \
625632
ovn_remote_probe_interval=${ovn_remote_probe_interval} \
@@ -674,6 +681,7 @@ ovn_image=${ovnkube_image} \
674681
ovn_multi_network_enable=${ovn_multi_network_enable} \
675682
ovn_network_segmentation_enable=${ovn_network_segmentation_enable} \
676683
ovn_route_advertisements_enable=${ovn_route_advertisements_enable} \
684+
ovn_advertised_udn_isolation_mode=${ovn_advertised_udn_isolation_mode} \
677685
ovn_egress_service_enable=${ovn_egress_service_enable} \
678686
ovn_ssl_en=${ovn_ssl_en} \
679687
ovn_remote_probe_interval=${ovn_remote_probe_interval} \
@@ -773,6 +781,7 @@ ovn_image=${ovnkube_image} \
773781
ovn_multi_network_enable=${ovn_multi_network_enable} \
774782
ovn_network_segmentation_enable=${ovn_network_segmentation_enable} \
775783
ovn_route_advertisements_enable=${ovn_route_advertisements_enable} \
784+
ovn_advertised_udn_isolation_mode=${ovn_advertised_udn_isolation_mode} \
776785
ovn_egress_service_enable=${ovn_egress_service_enable} \
777786
ovn_ssl_en=${ovn_ssl_en} \
778787
ovn_master_count=${ovn_master_count} \
@@ -823,6 +832,7 @@ ovn_image=${ovnkube_image} \
823832
ovn_network_segmentation_enable=${ovn_network_segmentation_enable} \
824833
ovn_pre_conf_udn_addr_enable=${ovn_pre_conf_udn_addr_enable} \
825834
ovn_route_advertisements_enable=${ovn_route_advertisements_enable} \
835+
ovn_advertised_udn_isolation_mode=${ovn_advertised_udn_isolation_mode} \
826836
ovn_egress_service_enable=${ovn_egress_service_enable} \
827837
ovn_ssl_en=${ovn_ssl_en} \
828838
ovn_master_count=${ovn_master_count} \
@@ -904,6 +914,7 @@ ovn_image=${ovnkube_image} \
904914
ovn_network_segmentation_enable=${ovn_network_segmentation_enable} \
905915
ovn_pre_conf_udn_addr_enable=${ovn_pre_conf_udn_addr_enable} \
906916
ovn_route_advertisements_enable=${ovn_route_advertisements_enable} \
917+
ovn_advertised_udn_isolation_mode=${ovn_advertised_udn_isolation_mode} \
907918
ovn_egress_service_enable=${ovn_egress_service_enable} \
908919
ovn_ssl_en=${ovn_ssl_en} \
909920
ovn_remote_probe_interval=${ovn_remote_probe_interval} \
@@ -972,6 +983,7 @@ ovn_image=${ovnkube_image} \
972983
ovn_network_segmentation_enable=${ovn_network_segmentation_enable} \
973984
ovn_pre_conf_udn_addr_enable=${ovn_pre_conf_udn_addr_enable} \
974985
ovn_route_advertisements_enable=${ovn_route_advertisements_enable} \
986+
ovn_advertised_udn_isolation_mode=${ovn_advertised_udn_isolation_mode} \
975987
ovn_ssl_en=${ovn_ssl_en} \
976988
ovn_remote_probe_interval=${ovn_remote_probe_interval} \
977989
ovn_monitor_all=${ovn_monitor_all} \
@@ -1070,12 +1082,14 @@ ovn_network_segmentation_enable=${ovn_network_segmentation_enable} \
10701082
ovn_pre_conf_udn_addr_enable=${ovn_pre_conf_udn_addr_enable} \
10711083
ovn_enable_dnsnameresolver=${ovn_enable_dnsnameresolver} \
10721084
ovn_route_advertisements_enable=${ovn_route_advertisements_enable} \
1085+
ovn_advertised_udn_isolation_mode=${ovn_advertised_udn_isolation_mode} \
10731086
jinjanate ../templates/rbac-ovnkube-cluster-manager.yaml.j2 -o ${output_dir}/rbac-ovnkube-cluster-manager.yaml
10741087

10751088
ovn_network_segmentation_enable=${ovn_network_segmentation_enable} \
10761089
ovn_enable_dnsnameresolver=${ovn_enable_dnsnameresolver} \
10771090
ovn_route_advertisements_enable=${ovn_route_advertisements_enable} \
10781091
ovn_pre_conf_udn_addr_enable=${ovn_pre_conf_udn_addr_enable} \
1092+
ovn_advertised_udn_isolation_mode=${ovn_advertised_udn_isolation_mode} \
10791093
jinjanate ../templates/rbac-ovnkube-master.yaml.j2 -o ${output_dir}/rbac-ovnkube-master.yaml
10801094

10811095
cp ../templates/rbac-ovnkube-identity.yaml.j2 ${output_dir}/rbac-ovnkube-identity.yaml

0 commit comments

Comments
 (0)