func startControllers()

in cmd/kube-egress-gateway-daemon/cmd/root.go [95:169]


func startControllers(cmd *cobra.Command, args []string) {

	ctrl.SetLogger(zap.New(zap.UseFlagOptions(&zapOpts)))

	mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
		Cache: cache.Options{
			// we only watch secrets in the namespace where the kube-egress-gateway pods are running
			ByObject: map[client.Object]cache.ByObject{
				&corev1.Secret{}: {
					Field: client.InNamespace(secretNamespace).AsSelector(),
				},
			},
		},
		Scheme: scheme,
		Metrics: metricsserver.Options{
			BindAddress: ":" + strconv.Itoa(metricsPort),
		},
		WebhookServer:          webhook.NewServer(webhook.Options{Port: 9443}),
		HealthProbeBindAddress: ":" + strconv.Itoa(probePort),
		LeaderElection:         false, // daemonSet on each gateway node
	})
	if err != nil {
		setupLog.Error(err, "unable to start manager")
		os.Exit(1)
	}

	if err := controllers.InitNodeMetadata(); err != nil {
		setupLog.Error(err, "unable to retrieve node metadata")
		os.Exit(1)
	}

	lbProbeServer := healthprobe.NewLBProbeServer(gatewayLBProbePort)
	if err := mgr.Add(manager.RunnableFunc(lbProbeServer.Start)); err != nil {
		setupLog.Error(err, "unbaled to set up gateway health probe server")
		os.Exit(1)
	}

	gwCleanupEvents := make(chan event.GenericEvent)
	if err = (&controllers.StaticGatewayConfigurationReconciler{
		Client:        mgr.GetClient(),
		TickerEvents:  gwCleanupEvents,
		LBProbeServer: lbProbeServer,
	}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "StaticGatewayConfiguration")
		os.Exit(1)
	}

	peerCleanupEvents := make(chan event.GenericEvent)
	if err = (&controllers.PodEndpointReconciler{
		Client:       mgr.GetClient(),
		TickerEvents: peerCleanupEvents,
	}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "PodEndpoint")
		os.Exit(1)
	}
	//+kubebuilder:scaffold:builder

	if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
		setupLog.Error(err, "unable to set up health check")
		os.Exit(1)
	}
	if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
		setupLog.Error(err, "unable to set up ready check")
		os.Exit(1)
	}

	setupLog.Info("starting manager")
	ctx := ctrl.SetupSignalHandler()
	startCleanupTicker(ctx, gwCleanupEvents, 1*time.Minute)   // clean up gwConfig network namespace every 1 min
	startCleanupTicker(ctx, peerCleanupEvents, 1*time.Minute) // clean up wireguard peer configurations every 1 min
	if err := mgr.Start(ctx); err != nil {
		setupLog.Error(err, "problem running manager")
		os.Exit(1)
	}
}