Skip to content

Commit 545d64d

Browse files
qiutingjunzbb88888
authored andcommitted
add special handling for the route policy of the default VPC (#3194)
Signed-off-by: 夜微澜 <qiutingjun_yewu@cmss.chinamobile.com>
1 parent 3603584 commit 545d64d

File tree

7 files changed

+562
-182
lines changed

7 files changed

+562
-182
lines changed

pkg/controller/gc.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,13 @@ func (c *Controller) gcStaticRoute() error {
657657
continue
658658
}
659659
klog.Infof("gc static route %s %v %s %s", route.RouteTable, route.Policy, route.IPPrefix, route.Nexthop)
660-
if err = c.ovnNbClient.DeleteLogicalRouterStaticRoute(c.config.ClusterRouter, &route.RouteTable, route.Policy, route.IPPrefix, route.Nexthop); err != nil {
660+
if err = c.deleteStaticRouteFromVpc(
661+
c.config.ClusterRouter,
662+
route.RouteTable,
663+
route.IPPrefix,
664+
route.Nexthop,
665+
reversePolicy(*route.Policy),
666+
); err != nil {
661667
klog.Errorf("failed to delete stale route %s %v %s %s: %v", route.RouteTable, route.Policy, route.IPPrefix, route.Nexthop, err)
662668
}
663669
}

pkg/controller/init.go

+26-10
Original file line numberDiff line numberDiff line change
@@ -712,29 +712,45 @@ func (c *Controller) initSyncCrdVlans() error {
712712
}
713713

714714
func (c *Controller) migrateNodeRoute(af int, node, ip, nexthop string) error {
715-
match := fmt.Sprintf("ip%d.dst == %s", af, ip)
716-
action := ovnnb.LogicalRouterPolicyActionReroute
717-
externalIDs := map[string]string{
718-
"vendor": util.CniTypeName,
719-
"node": node,
720-
}
715+
var (
716+
match = fmt.Sprintf("ip%d.dst == %s", af, ip)
717+
action = kubeovnv1.PolicyRouteActionReroute
718+
externalIDs = map[string]string{
719+
"vendor": util.CniTypeName,
720+
"node": node,
721+
}
722+
)
721723
klog.V(3).Infof("add policy route for router: %s, priority: %d, match %s, action %s, nexthop %s, extrenalID %v",
722724
c.config.ClusterRouter, util.NodeRouterPolicyPriority, match, action, nexthop, externalIDs)
723-
if err := c.ovnNbClient.AddLogicalRouterPolicy(c.config.ClusterRouter, util.NodeRouterPolicyPriority, match, action, []string{nexthop}, externalIDs); err != nil {
725+
if err := c.addPolicyRouteToVpc(
726+
c.config.ClusterRouter,
727+
&kubeovnv1.PolicyRoute{
728+
Priority: util.NodeRouterPolicyPriority,
729+
Match: match,
730+
Action: action,
731+
NextHopIP: nexthop,
732+
},
733+
externalIDs,
734+
); err != nil {
724735
klog.Errorf("failed to add logical router policy for node %s: %v", node, err)
725736
return err
726737
}
727738

728-
routeTable := util.MainRouteTable
729-
if err := c.ovnNbClient.DeleteLogicalRouterStaticRoute(c.config.ClusterRouter, &routeTable, nil, ip, ""); err != nil {
739+
if err := c.deleteStaticRouteFromVpc(
740+
c.config.ClusterRouter,
741+
util.MainRouteTable,
742+
ip,
743+
"",
744+
kubeovnv1.PolicyDst,
745+
); err != nil {
730746
klog.Errorf("failed to delete obsolete static route for node %s: %v", node, err)
731747
return err
732748
}
733749

734750
asName := nodeUnderlayAddressSetName(node, af)
735751
obsoleteMatch := fmt.Sprintf("ip%d.dst == %s && ip%d.src != $%s", af, ip, af, asName)
736752
klog.V(3).Infof("delete policy route for router: %s, priority: %d, match %s", c.config.ClusterRouter, util.NodeRouterPolicyPriority, obsoleteMatch)
737-
if err := c.ovnNbClient.DeleteLogicalRouterPolicy(c.config.ClusterRouter, util.NodeRouterPolicyPriority, obsoleteMatch); err != nil {
753+
if err := c.deletePolicyRouteFromVpc(c.config.ClusterRouter, util.NodeRouterPolicyPriority, obsoleteMatch); err != nil {
738754
klog.Errorf("failed to delete obsolete logical router policy for node %s: %v", node, err)
739755
return err
740756
}

pkg/controller/node.go

+51-22
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222

2323
kubeovnv1 "github.com/kubeovn/kube-ovn/pkg/apis/kubeovn/v1"
2424
"github.com/kubeovn/kube-ovn/pkg/ovs"
25-
"github.com/kubeovn/kube-ovn/pkg/ovsdb/ovnnb"
2625
"github.com/kubeovn/kube-ovn/pkg/util"
2726
)
2827

@@ -271,15 +270,26 @@ func (c *Controller) handleAddNode(key string) error {
271270
nodeIP, af = nodeIPv6, 6
272271
}
273272
if nodeIP != "" {
274-
match := fmt.Sprintf("ip%d.dst == %s", af, nodeIP)
275-
action := ovnnb.LogicalRouterPolicyActionReroute
276-
externalIDs := map[string]string{
277-
"vendor": util.CniTypeName,
278-
"node": node.Name,
279-
"address-family": strconv.Itoa(af),
280-
}
273+
var (
274+
match = fmt.Sprintf("ip%d.dst == %s", af, nodeIP)
275+
action = kubeovnv1.PolicyRouteActionReroute
276+
externalIDs = map[string]string{
277+
"vendor": util.CniTypeName,
278+
"node": node.Name,
279+
"address-family": strconv.Itoa(af),
280+
}
281+
)
281282
klog.Infof("add policy route for router: %s, match %s, action %s, nexthop %s, externalID %v", c.config.ClusterRouter, match, action, ip, externalIDs)
282-
if err = c.ovnNbClient.AddLogicalRouterPolicy(c.config.ClusterRouter, util.NodeRouterPolicyPriority, match, action, []string{ip}, externalIDs); err != nil {
283+
if err = c.addPolicyRouteToVpc(
284+
c.config.ClusterRouter,
285+
&kubeovnv1.PolicyRoute{
286+
Priority: util.NodeRouterPolicyPriority,
287+
Match: match,
288+
Action: action,
289+
NextHopIP: ip,
290+
},
291+
externalIDs,
292+
); err != nil {
283293
klog.Errorf("failed to add logical router policy for node %s: %v", node.Name, err)
284294
return err
285295
}
@@ -1027,7 +1037,16 @@ func (c *Controller) addNodeGwStaticRoute() error {
10271037
if util.CheckProtocol(cidrBlock) != util.CheckProtocol(nextHop) {
10281038
continue
10291039
}
1030-
if err := c.ovnNbClient.AddLogicalRouterStaticRoute(c.config.ClusterRouter, util.MainRouteTable, ovnnb.LogicalRouterStaticRoutePolicyDstIP, cidrBlock, nil, nextHop); err != nil {
1040+
1041+
if err := c.addStaticRouteToVpc(
1042+
c.config.ClusterRouter,
1043+
&kubeovnv1.StaticRoute{
1044+
Policy: kubeovnv1.PolicyDst,
1045+
CIDR: cidrBlock,
1046+
NextHopIP: nextHop,
1047+
RouteTable: util.MainRouteTable,
1048+
},
1049+
); err != nil {
10311050
klog.Errorf("failed to add static route for node gw: %v", err)
10321051
return err
10331052
}
@@ -1198,19 +1217,29 @@ func (c *Controller) addPolicyRouteForCentralizedSubnetOnNode(nodeName, nodeIP s
11981217
return nil
11991218
}
12001219

1201-
func (c *Controller) addPolicyRouteForLocalDnsCacheOnNode(nodePortName, nodeIP, nodeName string, af int) error {
1202-
externalIDs := map[string]string{
1203-
"vendor": util.CniTypeName,
1204-
"node": nodeName,
1205-
"address-family": strconv.Itoa(af),
1206-
"isLocalDnsCache": "true",
1207-
}
1208-
1209-
pgAs := strings.Replace(fmt.Sprintf("%s_ip%d", nodePortName, af), "-", ".", -1)
1210-
match := fmt.Sprintf("ip%d.src == $%s && ip%d.dst == %s", af, pgAs, af, c.config.NodeLocalDnsIP)
1211-
action := ovnnb.LogicalRouterPolicyActionReroute
1220+
func (c *Controller) addPolicyRouteForLocalDNSCacheOnNode(nodePortName, nodeIP, nodeName string, af int) error {
1221+
var (
1222+
externalIDs = map[string]string{
1223+
"vendor": util.CniTypeName,
1224+
"node": nodeName,
1225+
"address-family": strconv.Itoa(af),
1226+
"isLocalDnsCache": "true",
1227+
}
1228+
pgAs = strings.ReplaceAll(fmt.Sprintf("%s_ip%d", nodePortName, af), "-", ".")
1229+
match = fmt.Sprintf("ip%d.src == $%s && ip%d.dst == %s", af, pgAs, af, c.config.NodeLocalDNSIP)
1230+
action = kubeovnv1.PolicyRouteActionReroute
1231+
)
12121232
klog.Infof("add node local dns cache policy route for router: %s, match %s, action %s, nexthop %s, externalID %v", c.config.ClusterRouter, match, action, nodeIP, externalIDs)
1213-
if err := c.ovnNbClient.AddLogicalRouterPolicy(c.config.ClusterRouter, util.NodeLocalDnsPolicyPriority, match, action, []string{nodeIP}, externalIDs); err != nil {
1233+
if err := c.addPolicyRouteToVpc(
1234+
c.config.ClusterRouter,
1235+
&kubeovnv1.PolicyRoute{
1236+
Priority: util.NodeRouterPolicyPriority,
1237+
Match: match,
1238+
Action: action,
1239+
NextHopIP: nodeIP,
1240+
},
1241+
externalIDs,
1242+
); err != nil {
12141243
klog.Errorf("failed to add logical router policy for node %s: %v", nodeName, err)
12151244
return err
12161245
}

pkg/controller/ovn-ic.go

+25-3
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,13 @@ func (c *Controller) delLearnedRoute() error {
376376
return err
377377
}
378378
for _, r := range routeList {
379-
if err = c.ovnNbClient.DeleteLogicalRouterStaticRoute(lr.Name, &r.RouteTable, r.Policy, r.IPPrefix, r.Nexthop); err != nil {
379+
if err = c.deleteStaticRouteFromVpc(
380+
lr.Name,
381+
r.RouteTable,
382+
r.IPPrefix,
383+
r.Nexthop,
384+
reversePolicy(*r.Policy),
385+
); err != nil {
380386
klog.Errorf("failed to delete learned static route %#v on logical router %s: %v", r, lr.Name, err)
381387
return err
382388
}
@@ -489,14 +495,30 @@ func (c *Controller) syncOneRouteToPolicy(key, value string) {
489495
var matchFiled string
490496
if util.CheckProtocol(lrRoute.IPPrefix) == kubeovnv1.ProtocolIPv4 {
491497
matchFiled = util.MatchV4Dst + " == " + lrRoute.IPPrefix
492-
if err := c.ovnNbClient.AddLogicalRouterPolicy(lr.Name, util.OvnICPolicyPriority, matchFiled, ovnnb.LogicalRouterPolicyActionAllow, nil, map[string]string{key: value, "vendor": util.CniTypeName}); err != nil {
498+
if err := c.addPolicyRouteToVpc(
499+
lr.Name,
500+
&kubeovnv1.PolicyRoute{
501+
Priority: util.OvnICPolicyPriority,
502+
Match: matchFiled,
503+
Action: kubeovnv1.PolicyRouteActionAllow,
504+
},
505+
map[string]string{key: value, "vendor": util.CniTypeName},
506+
); err != nil {
493507
klog.Errorf("adding router policy failed %v", err)
494508
}
495509
}
496510

497511
if util.CheckProtocol(lrRoute.IPPrefix) == kubeovnv1.ProtocolIPv6 {
498512
matchFiled = util.MatchV6Dst + " == " + lrRoute.IPPrefix
499-
if err := c.ovnNbClient.AddLogicalRouterPolicy(lr.Name, util.OvnICPolicyPriority, matchFiled, ovnnb.LogicalRouterPolicyActionAllow, nil, map[string]string{key: value, "vendor": util.CniTypeName}); err != nil {
513+
if err := c.addPolicyRouteToVpc(
514+
lr.Name,
515+
&kubeovnv1.PolicyRoute{
516+
Priority: util.OvnICPolicyPriority,
517+
Match: matchFiled,
518+
Action: kubeovnv1.PolicyRouteActionAllow,
519+
},
520+
map[string]string{key: value, "vendor": util.CniTypeName},
521+
); err != nil {
500522
klog.Errorf("adding router policy failed %v", err)
501523
}
502524
}

pkg/controller/pod.go

+29-7
Original file line numberDiff line numberDiff line change
@@ -802,8 +802,14 @@ func (c *Controller) reconcileRouteSubnets(cachedPod, pod *v1.Pod, needRoutePodN
802802
nextHop = strings.Split(nextHop, "/")[0]
803803
}
804804

805-
if err := c.ovnNbClient.AddLogicalRouterStaticRoute(
806-
c.config.ClusterRouter, subnet.Spec.RouteTable, ovnnb.LogicalRouterStaticRoutePolicySrcIP, podIP, nil, nextHop,
805+
if err := c.addStaticRouteToVpc(
806+
c.config.ClusterRouter,
807+
&kubeovnv1.StaticRoute{
808+
Policy: kubeovnv1.PolicySrc,
809+
CIDR: podIP,
810+
NextHopIP: nextHop,
811+
RouteTable: subnet.Spec.RouteTable,
812+
},
807813
); err != nil {
808814
klog.Errorf("failed to add static route, %v", err)
809815
return err
@@ -846,15 +852,25 @@ func (c *Controller) reconcileRouteSubnets(cachedPod, pod *v1.Pod, needRoutePodN
846852
}
847853

848854
if pod.Annotations[util.NorthGatewayAnnotation] != "" {
849-
if err := c.ovnNbClient.AddLogicalRouterStaticRoute(
850-
c.config.ClusterRouter, subnet.Spec.RouteTable, ovnnb.LogicalRouterStaticRoutePolicySrcIP, podIP, nil, pod.Annotations[util.NorthGatewayAnnotation],
855+
if err := c.addStaticRouteToVpc(
856+
subnet.Spec.RouteTable,
857+
&kubeovnv1.StaticRoute{
858+
Policy: kubeovnv1.PolicySrc,
859+
CIDR: podIP,
860+
NextHopIP: pod.Annotations[util.NorthGatewayAnnotation],
861+
RouteTable: subnet.Spec.RouteTable,
862+
},
851863
); err != nil {
852864
klog.Errorf("failed to add static route, %v", err)
853865
return err
854866
}
855867
} else if c.config.EnableEipSnat {
856-
if err = c.ovnNbClient.DeleteLogicalRouterStaticRoute(
857-
c.config.ClusterRouter, &subnet.Spec.RouteTable, nil, podIP, "",
868+
if err = c.deleteStaticRouteFromVpc(
869+
c.config.ClusterRouter,
870+
subnet.Spec.RouteTable,
871+
podIP,
872+
"",
873+
kubeovnv1.PolicyDst,
858874
); err != nil {
859875
return err
860876
}
@@ -955,7 +971,13 @@ func (c *Controller) handleDeletePod(key string) error {
955971
}
956972
// If pod has snat or eip, also need delete staticRoute when delete pod
957973
if vpc.Name == c.config.ClusterRouter {
958-
if err = c.ovnNbClient.DeleteLogicalRouterStaticRoute(vpc.Name, &subnet.Spec.RouteTable, nil, address.Ip, ""); err != nil {
974+
if err = c.deleteStaticRouteFromVpc(
975+
vpc.Name,
976+
subnet.Spec.RouteTable,
977+
address.IP,
978+
"",
979+
kubeovnv1.PolicyDst,
980+
); err != nil {
959981
return err
960982
}
961983
}

0 commit comments

Comments
 (0)