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)
}
}