diff --git a/go-controller/pkg/node/gateway_init.go b/go-controller/pkg/node/gateway_init.go index 29db09ae152..5ff142b828c 100644 --- a/go-controller/pkg/node/gateway_init.go +++ b/go-controller/pkg/node/gateway_init.go @@ -167,12 +167,17 @@ func (n *OvnNode) initGateway(subnets []*net.IPNet, nodeAnnotator kube.Annotator return err } - v4IfAddr, v6IfAddr, err := getDefaultIfAddr(gatewayIntf) - if err == nil { - if err := util.SetNodePrimaryIfAddr(nodeAnnotator, v4IfAddr, v6IfAddr); err != nil { - klog.Errorf("Unable to set primary IP net label on node, err: %v", err) - } + ifAddrs, err := getNetworkInterfaceIPAddresses(gatewayIntf) + if err != nil { + return err } + + v4IfAddr, _ := util.MatchIPNetFamily(false, ifAddrs) + v6IfAddr, _ := util.MatchIPNetFamily(true, ifAddrs) + if err := util.SetNodePrimaryIfAddr(nodeAnnotator, v4IfAddr, v6IfAddr); err != nil { + klog.Errorf("Unable to set primary IP net label on node, err: %v", err) + } + var loadBalancerHealthChecker *loadBalancerHealthChecker var portClaimWatcher *portClaimWatcher diff --git a/go-controller/pkg/node/helper_linux.go b/go-controller/pkg/node/helper_linux.go index f21044da19d..53545befe2d 100644 --- a/go-controller/pkg/node/helper_linux.go +++ b/go-controller/pkg/node/helper_linux.go @@ -12,7 +12,6 @@ import ( "github.com/vishvananda/netlink" kapi "k8s.io/api/core/v1" "k8s.io/klog/v2" - utilnet "k8s.io/utils/net" ) // getDefaultGatewayInterfaceDetails returns the interface name on @@ -71,6 +70,7 @@ func getDefaultGatewayInterfaceByFamily(family int) (string, net.IP, error) { klog.Warningf("Failed to get gateway for route %v : %v", r, err) continue } + netlink.AddrList(intfLink, family) klog.Infof("Found default gateway interface %s %s", intfLink.Attrs().Name, r.Gw.String()) return intfLink.Attrs().Name, r.Gw, nil } @@ -95,28 +95,6 @@ func getDefaultGatewayInterfaceByFamily(family int) (string, net.IP, error) { return "", net.IP{}, fmt.Errorf("failed to get default gateway interface") } -func getDefaultIfAddr(defaultGatewayIntf string) (*net.IPNet, *net.IPNet, error) { - var v4IfAddr, v6IfAddr *net.IPNet - primaryLink, err := netlink.LinkByName(defaultGatewayIntf) - if err != nil { - return nil, nil, fmt.Errorf("error: unable to get link for default interface: %s, err: %v", defaultGatewayIntf, err) - } - addrs, err := netlink.AddrList(primaryLink, netlink.FAMILY_ALL) - if err != nil { - return nil, nil, fmt.Errorf("error: unable to list addresses for default interface, err: %v", err) - } - for _, addr := range addrs { - if addr.IP.IsGlobalUnicast() { - if utilnet.IsIPv6(addr.IP) { - v6IfAddr = addr.IPNet - } else { - v4IfAddr = addr.IPNet - } - } - } - return v4IfAddr, v6IfAddr, nil -} - func getIntfName(gatewayIntf string) (string, error) { // The given (or autodetected) interface is an OVS bridge and this could be // created by us using util.NicToBridge() or it was pre-created by the user.