From 6cd471633c882b853bf48da2fd5950d3088c87a9 Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Wed, 17 Jul 2024 10:07:07 +0800 Subject: [PATCH] fix: always add static routes for metadata server (#20808) Co-authored-by: Qiu Jian --- pkg/hostman/guestfs/fsdriver/linux.go | 6 ++++-- pkg/hostman/guestfs/fsdriver/netplan.go | 12 ++++++++---- pkg/hostman/guestfs/fsdriver/netplan_test.go | 10 ++++++++-- pkg/hostman/guestfs/fsdriver/suse.go | 4 +++- pkg/hostman/hostinfo/hostdhcp/dhcpserver.go | 2 +- pkg/util/netutils2/netutils.go | 5 +++++ pkg/vpcagent/ovn/keeper.go | 2 +- 7 files changed, 30 insertions(+), 11 deletions(-) diff --git a/pkg/hostman/guestfs/fsdriver/linux.go b/pkg/hostman/guestfs/fsdriver/linux.go index 8bb5e8b12e..baaeb9dc12 100644 --- a/pkg/hostman/guestfs/fsdriver/linux.go +++ b/pkg/hostman/guestfs/fsdriver/linux.go @@ -906,6 +906,7 @@ func (d *sDebianLikeRootFs) DeployNetworkingScripts(rootFs IDiskPartition, nics // ToServerNics(nics) allNics, bondNics := convertNicConfigs(nics) + nicCnt := len(allNics) - len(bondNics) mainNic := getMainNic(allNics) var mainIp string @@ -953,7 +954,7 @@ func (d *sDebianLikeRootFs) DeployNetworkingScripts(rootFs IDiskPartition, nics cmds.WriteString(fmt.Sprintf(" mtu %d\n", nicDesc.Mtu)) } var routes = make([][]string, 0) - routes = netutils2.AddNicRoutes(routes, nicDesc, mainIp, len(nics)) + routes = netutils2.AddNicRoutes(routes, nicDesc, mainIp, nicCnt) for _, r := range routes { cmds.WriteString(fmt.Sprintf(" up route add -net %s gw %s || true\n", r[0], r[1])) cmds.WriteString(fmt.Sprintf(" down route del -net %s gw %s || true\n", r[0], r[1])) @@ -1348,6 +1349,7 @@ func (r *sRedhatLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics return errors.Wrap(err, "enableBondingModule") } } + nicCnt := len(allNics) - len(bondNics) mainNic := getMainNic(allNics) var mainIp string @@ -1416,7 +1418,7 @@ func (r *sRedhatLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics cmds.WriteString("\n") } var routes = make([][]string, 0) - routes = netutils2.AddNicRoutes(routes, nicDesc, mainIp, len(nics)) + routes = netutils2.AddNicRoutes(routes, nicDesc, mainIp, nicCnt) var rtbl strings.Builder for _, r := range routes { rtbl.WriteString(r[0]) diff --git a/pkg/hostman/guestfs/fsdriver/netplan.go b/pkg/hostman/guestfs/fsdriver/netplan.go index 74b17ecede..6f34079905 100644 --- a/pkg/hostman/guestfs/fsdriver/netplan.go +++ b/pkg/hostman/guestfs/fsdriver/netplan.go @@ -32,8 +32,9 @@ func NewNetplanConfig(allNics []*types.SServerNic, bondNics []*types.SServerNic, func newNetplanNetwork(allNics []*types.SServerNic, bondNics []*types.SServerNic, mainIp string) *netplan.Network { network := netplan.NewNetwork() + nicCnt := len(allNics) - len(bondNics) for _, nic := range allNics { - nicConf := getNetplanEthernetConfig(nic, false, mainIp) + nicConf := getNetplanEthernetConfig(nic, false, mainIp, nicCnt) if nicConf == nil { continue @@ -69,7 +70,7 @@ func newNetplanNetwork(allNics []*types.SServerNic, bondNics []*types.SServerNic network.AddEthernet(sn.Name, nicConf) } - netConf := getNetplanEthernetConfig(bondNic, true, mainIp) + netConf := getNetplanEthernetConfig(bondNic, true, mainIp, nicCnt) if netConf.Mtu == 0 { netConf.Mtu = defaultMtu @@ -84,7 +85,7 @@ func newNetplanNetwork(allNics []*types.SServerNic, bondNics []*types.SServerNic return network } -func getNetplanEthernetConfig(nic *types.SServerNic, isBond bool, mainIp string) *netplan.EthernetConfig { +func getNetplanEthernetConfig(nic *types.SServerNic, isBond bool, mainIp string, nicCnt int) *netplan.EthernetConfig { var nicConf *netplan.EthernetConfig if !isBond && (nic.TeamingMaster != nil || nic.TeamingSlaves != nil) { @@ -107,9 +108,12 @@ func getNetplanEthernetConfig(nic *types.SServerNic, isBond bool, mainIp string) } } + var routeArrs = make([][]string, 0) + routeArrs = netutils2.AddNicRoutes(routeArrs, nic, mainIp, nicCnt) + var routes []*netplan.Route - for _, route := range nic.Routes { + for _, route := range routeArrs { routes = append(routes, &netplan.Route{ To: route[0], Via: route[1], diff --git a/pkg/hostman/guestfs/fsdriver/netplan_test.go b/pkg/hostman/guestfs/fsdriver/netplan_test.go index b68f5f18e1..681ae1c517 100644 --- a/pkg/hostman/guestfs/fsdriver/netplan_test.go +++ b/pkg/hostman/guestfs/fsdriver/netplan_test.go @@ -123,6 +123,12 @@ func TestNewNetplanConfig(t *testing.T) { }, }, Mtu: 1500, + Routes: []*netplan.Route{ + &netplan.Route{ + To: "169.254.169.254/32", + Via: "0.0.0.0", + }, + }, }, Interfaces: []string{ "eth0", @@ -249,11 +255,11 @@ func TestNewNetplanConfig(t *testing.T) { }, }, } - for _, c := range cases { + for i, c := range cases { allNics, bondNics := convertNicConfigs(c.nics) netplanConfig := NewNetplanConfig(allNics, bondNics, c.mainIp) if jsonutils.Marshal(netplanConfig).String() != jsonutils.Marshal(c.want).String() { - t.Errorf("nics: %s want: %s got: %s", jsonutils.Marshal(c.nics), jsonutils.Marshal(c.want).PrettyString(), jsonutils.Marshal(netplanConfig).PrettyString()) + t.Errorf("nics %d: %s want: %s got: %s", i, jsonutils.Marshal(c.nics), jsonutils.Marshal(c.want).PrettyString(), jsonutils.Marshal(netplanConfig).PrettyString()) } } } diff --git a/pkg/hostman/guestfs/fsdriver/suse.go b/pkg/hostman/guestfs/fsdriver/suse.go index e860443b78..f9af10cfba 100644 --- a/pkg/hostman/guestfs/fsdriver/suse.go +++ b/pkg/hostman/guestfs/fsdriver/suse.go @@ -99,6 +99,8 @@ func (r *sSuseLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics [] } } + nicCnt := len(allNics) - len(bondNics) + var dnsSrv []string mainNic := getMainNic(allNics) var mainIp string @@ -144,7 +146,7 @@ func (r *sSuseLikeRootFs) deployNetworkingScripts(rootFs IDiskPartition, nics [] } var routes = make([][]string, 0) - routes = netutils2.AddNicRoutes(routes, nicDesc, mainIp, len(nics)) + routes = netutils2.AddNicRoutes(routes, nicDesc, mainIp, nicCnt) if len(nicDesc.Gateway) > 0 && nicDesc.Ip == mainIp { routes = append(routes, []string{ "default", diff --git a/pkg/hostman/hostinfo/hostdhcp/dhcpserver.go b/pkg/hostman/hostinfo/hostdhcp/dhcpserver.go index ba169f8601..da1c0c3c98 100644 --- a/pkg/hostman/hostinfo/hostdhcp/dhcpserver.go +++ b/pkg/hostman/hostinfo/hostdhcp/dhcpserver.go @@ -185,7 +185,7 @@ func (s *SGuestDHCPServer) getGuestConfig( if !strings.HasPrefix(strings.ToLower(osName), "win") { route = append(route, []string{"0.0.0.0/0", nicdesc.Gateway}) } - route = append(route, []string{"169.254.169.254/32", nicdesc.Gateway}) + route = append(route, []string{"169.254.169.254/32", "0.0.0.0"}) } route = netutils2.AddNicRoutes(route, nicdesc, mainIp, len(guestNics)) conf.Routes = route diff --git a/pkg/util/netutils2/netutils.go b/pkg/util/netutils2/netutils.go index 00f884f545..5b5aa5e853 100644 --- a/pkg/util/netutils2/netutils.go +++ b/pkg/util/netutils2/netutils.go @@ -171,6 +171,11 @@ func AddNicRoutes(routes [][]string, nicDesc *types.SServerNic, mainIp string, n } } } + + if nicDesc.Ip == mainIp { + // always add 169.254.169.254 for default NIC + routes = addRoute(routes, "169.254.169.254/32", "0.0.0.0") + } return routes } diff --git a/pkg/vpcagent/ovn/keeper.go b/pkg/vpcagent/ovn/keeper.go index c5be675cb3..7a373ee8ab 100644 --- a/pkg/vpcagent/ovn/keeper.go +++ b/pkg/vpcagent/ovn/keeper.go @@ -456,7 +456,7 @@ func generateDhcpOptions(ctx context.Context, guestnetwork *agentmodels.Guestnet var ( network = guestnetwork.Network dhcpMac = mac.HashSubnetDhcpMac(network.Id) - mdIp = "169.254.169.254" + mdIp = "169.254.169.254/32" ocDhcpRef = fmt.Sprintf("dhcp/%s/%s", guestnetwork.GuestId, guestnetwork.Ifname) )