Skip to content

Commit 778ff1c

Browse files
committed
fixup! fixup! fixup! fixup! Network: gateway routes
1 parent 5ea4ee5 commit 778ff1c

File tree

3 files changed

+34
-27
lines changed
  • cmd
  • pkg/liqo-controller-manager/internal-network/route

3 files changed

+34
-27
lines changed

cmd/gateway/main.go

-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"k8s.io/client-go/tools/leaderelection/resourcelock"
2828
"k8s.io/klog/v2"
2929
ctrl "sigs.k8s.io/controller-runtime"
30-
"sigs.k8s.io/controller-runtime/pkg/cache"
3130
"sigs.k8s.io/controller-runtime/pkg/client/config"
3231
"sigs.k8s.io/controller-runtime/pkg/log"
3332
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
@@ -110,11 +109,6 @@ func run(cmd *cobra.Command, _ []string) error {
110109
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
111110
MapperProvider: mapper.LiqoMapperProvider(scheme),
112111
Scheme: scheme,
113-
Cache: cache.Options{
114-
DefaultNamespaces: map[string]cache.Config{
115-
connoptions.GwOptions.Namespace: {},
116-
},
117-
},
118112
Metrics: server.Options{
119113
BindAddress: "0", // Metrics are exposed by "connection" container.
120114
},

cmd/liqo-controller-manager/main.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -678,16 +678,16 @@ func main() {
678678
os.Exit(1)
679679
}
680680

681-
intcfgr := configurationcontroller.NewConfigurationReconciler(mgr.GetClient(), mgr.GetScheme(),
681+
intCfg := configurationcontroller.NewConfigurationReconciler(mgr.GetClient(), mgr.GetScheme(),
682682
mgr.GetEventRecorderFor("internal.-configuration-controller"))
683-
if err = intcfgr.SetupWithManager(mgr); err != nil {
683+
if err = intCfg.SetupWithManager(mgr); err != nil {
684684
klog.Errorf("unable to create controller ConfigurationReconciler: %s", err)
685685
os.Exit(1)
686686
}
687687

688-
extcfg := externalnetworkroute.NewConfigurationReconciler(mgr.GetClient(), mgr.GetScheme(),
688+
extCfg := externalnetworkroute.NewConfigurationReconciler(mgr.GetClient(), mgr.GetScheme(),
689689
mgr.GetEventRecorderFor("external-configuration-controller"))
690-
if err = extcfg.SetupWithManager(mgr); err != nil {
690+
if err = extCfg.SetupWithManager(mgr); err != nil {
691691
klog.Errorf("unable to create controller ExternalConfigurationReconciler: %s", err)
692692
os.Exit(1)
693693
}
@@ -708,9 +708,9 @@ func main() {
708708
os.Exit(1)
709709
}
710710

711-
intpod := internalnetworkroute.NewPodReconciler(allPodsManager.GetClient(), allPodsManager.GetScheme(),
711+
intPod := internalnetworkroute.NewPodReconciler(allPodsManager.GetClient(), allPodsManager.GetScheme(),
712712
allPodsManager.GetEventRecorderFor("internal-pod-controller"), &internalnetworkroute.Options{Namespace: *liqoNamespace})
713-
if err = intpod.SetupWithManager(allPodsManager); err != nil {
713+
if err = intPod.SetupWithManager(allPodsManager); err != nil {
714714
klog.Errorf("unable to create controller InternalPodReconciler: %s", err)
715715
os.Exit(1)
716716
}

pkg/liqo-controller-manager/internal-network/route/k8s.go

+28-15
Original file line numberDiff line numberDiff line change
@@ -48,44 +48,57 @@ func enforeRoutePodPresence(ctx context.Context, cl client.Client, scheme *runti
4848
ObjectMeta: metav1.ObjectMeta{Name: fmt.Sprintf("%s-gw-node", pod.Spec.NodeName), Namespace: opts.Namespace},
4949
}
5050

51-
_, err := controllerutil.CreateOrUpdate(ctx, cl, routecfg, func() error {
51+
_, err := controllerutil.CreateOrUpdate(ctx, cl, routecfg, forgeRoutePodMutateFunction(internalnode, routecfg, pod, scheme))
52+
return err
53+
}
54+
55+
func forgeRoutePodMutateFunction(internalnode *networkingv1alpha1.InternalNode, routecfg *networkingv1alpha1.RouteConfiguration,
56+
pod *corev1.Pod, scheme *runtime.Scheme) controllerutil.MutateFn {
57+
return func() error {
5258
if err := controllerutil.SetOwnerReference(internalnode, routecfg, scheme); err != nil {
5359
return err
5460
}
5561

5662
routecfg.SetLabels(geneve.ForgeRouteInternalTargetLabels())
5763

58-
routecfg.Spec.Table.Name = fmt.Sprintf("%s-gw-node", pod.Spec.NodeName)
64+
routecfg.Spec.Table.Name = pod.Spec.NodeName
5965

6066
if routecfg.Spec.Table.Rules == nil || len(routecfg.Spec.Table.Rules) == 0 {
6167
routecfg.Spec.Table.Rules = make([]networkingv1alpha1.Rule, 1)
6268
}
6369

64-
if routeContainsPod(pod, &routecfg.Spec.Table.Rules[0]) {
65-
return nil
70+
if existingroute, exists := routeContainsPod(pod, &routecfg.Spec.Table.Rules[0]); exists {
71+
updatePodToRoute(pod, internalnode, existingroute)
72+
} else {
73+
addPodToRoute(pod, internalnode, &routecfg.Spec.Table.Rules[0])
6674
}
6775

68-
addPodToRoute(pod, internalnode, &routecfg.Spec.Table.Rules[0])
6976
return nil
70-
})
71-
return err
77+
}
7278
}
7379

74-
func routeContainsPod(pod *corev1.Pod, rule *networkingv1alpha1.Rule) bool {
80+
func routeContainsPod(pod *corev1.Pod, rule *networkingv1alpha1.Rule) (*networkingv1alpha1.Route, bool) {
7581
for i := range rule.Routes {
76-
route := rule.Routes[i]
77-
if string(*route.Dst) == fmt.Sprintf("%s/32", pod.Status.PodIP) {
78-
return true
82+
if string(*rule.Routes[i].Dst) == fmt.Sprintf("%s/32", pod.Status.PodIP) {
83+
return &rule.Routes[i], true
7984
}
8085
}
81-
return false
86+
return nil, false
8287
}
8388

8489
func addPodToRoute(pod *corev1.Pod, internalnode *networkingv1alpha1.InternalNode, rule *networkingv1alpha1.Rule) {
8590
route := networkingv1alpha1.Route{
86-
Dst: ptr.To(networkingv1alpha1.CIDR(fmt.Sprintf("%s/32", pod.Status.PodIP))),
87-
Dev: &internalnode.Spec.Interface.Gateway.Name,
88-
Gw: ptr.To(networkingv1alpha1.IP(fabric.GeneveNodeInterfaceIP)),
91+
Dst: ptr.To(networkingv1alpha1.CIDR(fmt.Sprintf("%s/32", pod.Status.PodIP))),
92+
Dev: &internalnode.Spec.Interface.Gateway.Name,
93+
Gw: ptr.To(networkingv1alpha1.IP(fabric.GeneveNodeInterfaceIP)),
94+
Onlink: ptr.To(true),
8995
}
9096
rule.Routes = append(rule.Routes, route)
9197
}
98+
99+
func updatePodToRoute(pod *corev1.Pod, internalnode *networkingv1alpha1.InternalNode, route *networkingv1alpha1.Route) {
100+
route.Dst = ptr.To(networkingv1alpha1.CIDR(fmt.Sprintf("%s/32", pod.Status.PodIP)))
101+
route.Dev = &internalnode.Spec.Interface.Gateway.Name
102+
route.Gw = ptr.To(networkingv1alpha1.IP(fabric.GeneveNodeInterfaceIP))
103+
route.Onlink = ptr.To(true)
104+
}

0 commit comments

Comments
 (0)