Skip to content

Commit a55db01

Browse files
authored
update policy route when change from ecmp to active-standby (#2717)
1 parent ba63982 commit a55db01

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

pkg/controller/node.go

+22-2
Original file line numberDiff line numberDiff line change
@@ -1112,17 +1112,37 @@ func (c *Controller) getPolicyRouteParas(cidr string, priority int32) ([]string,
11121112
}
11131113

11141114
func (c *Controller) checkPolicyRouteExistForNode(nodeName, cidr, nexthop string, priority int32) (bool, error) {
1115-
_, nameIpMap, err := c.getPolicyRouteParas(cidr, priority)
1115+
nextHops, _, err := c.getPolicyRouteParas(cidr, priority)
11161116
if err != nil {
11171117
klog.Errorf("failed to get policy route paras, %v", err)
11181118
return false, err
11191119
}
1120-
if nodeIp, ok := nameIpMap[nodeName]; ok && nodeIp == nexthop {
1120+
1121+
if util.ContainsString(nextHops, nexthop) {
11211122
return true, nil
11221123
}
11231124
return false, nil
11241125
}
11251126

1127+
func (c *Controller) checkPolicyRouteConsistent(nodeName, cidr, nexthop string, priority int32) (bool, error) {
1128+
nextHops, _, err := c.getPolicyRouteParas(cidr, priority)
1129+
if err != nil {
1130+
klog.Errorf("failed to get policy route paras, %v", err)
1131+
return false, err
1132+
}
1133+
1134+
if c.config.EnableEcmp {
1135+
if util.ContainsString(nextHops, nexthop) {
1136+
return true, nil
1137+
}
1138+
} else {
1139+
if len(nextHops) == 1 && nextHops[0] == nexthop {
1140+
return true, nil
1141+
}
1142+
}
1143+
return false, nil
1144+
}
1145+
11261146
func (c *Controller) deletePolicyRouteForNode(nodeName string) error {
11271147
subnets, err := c.subnetsLister.List(labels.Everything())
11281148
if err != nil {

pkg/controller/subnet.go

+14-3
Original file line numberDiff line numberDiff line change
@@ -1365,6 +1365,17 @@ func (c *Controller) reconcileOvnRoute(subnet *kubeovnv1.Subnet) error {
13651365
node, err := c.nodesLister.Get(subnet.Status.ActivateGateway)
13661366
if err == nil && nodeReady(node) {
13671367
klog.Infof("subnet %s uses the old activate gw %s", subnet.Name, node.Name)
1368+
1369+
nodeTunlIPAddr, err := getNodeTunlIP(node)
1370+
if err != nil {
1371+
klog.Errorf("failed to get gatewayNode tunnel ip for subnet %s", subnet.Name)
1372+
return err
1373+
}
1374+
nextHop := getNextHopByTunnelIP(nodeTunlIPAddr)
1375+
if err = c.addPolicyRouteForCentralizedSubnet(subnet, subnet.Status.ActivateGateway, nil, strings.Split(nextHop, ",")); err != nil {
1376+
klog.Errorf("failed to add active-backup policy route for centralized subnet %s: %v", subnet.Name, err)
1377+
return err
1378+
}
13681379
return nil
13691380
}
13701381
}
@@ -1898,12 +1909,12 @@ func (c *Controller) addPolicyRouteForCentralizedSubnet(subnet *kubeovnv1.Subnet
18981909
if util.CheckProtocol(cidrBlock) != util.CheckProtocol(nodeIP) {
18991910
continue
19001911
}
1901-
exist, err := c.checkPolicyRouteExistForNode(nodeName, cidrBlock, nodeIP, util.GatewayRouterPolicyPriority)
1912+
consistent, err := c.checkPolicyRouteConsistent(nodeName, cidrBlock, nodeIP, util.GatewayRouterPolicyPriority)
19021913
if err != nil {
1903-
klog.Errorf("check ecmp policy route exist for subnet %v, error %v", subnet.Name, err)
1914+
klog.Errorf("failed to check policy route for subnet %v, error %v", subnet.Name, err)
19041915
continue
19051916
}
1906-
if exist {
1917+
if consistent {
19071918
continue
19081919
}
19091920
var nextHops []string

0 commit comments

Comments
 (0)