diff --git a/services/apiserver.go b/services/apiserver.go
index 81afb46473ea22a49e74d111f70308fa6f9d0cce..c71fbef42e5c64b6d3356995aa1fb6110b70a737 100644
--- a/services/apiserver.go
+++ b/services/apiserver.go
@@ -124,7 +124,7 @@ func buildConfig(c *Cluster) (config *server.Config, clients *Clients, err error
 		return
 	}
 	config.LoopbackClientConfig = loopback
-	clients, err = newClientsForKC(config.LoopbackClientConfig, "apiserver")
+	clients, err = newClientsForKC(config.LoopbackClientConfig)
 	if err != nil {
 		err = fmt.Errorf("could not setup loopback clients: %w", err)
 		return
diff --git a/services/k8s.go b/services/k8s.go
index 3764b51d3e05583b9964acb5b322706609cb3cf4..57a558949552afc28ee4ca6e2f5a1bea7d97de40 100644
--- a/services/k8s.go
+++ b/services/k8s.go
@@ -27,16 +27,17 @@ var kubeLogger = &Unit{
 }
 
 type Clients struct {
-	KubeConfig  *rest.Config
-	Client      *kubernetes.Clientset
-	DynClient   *dynamic.DynamicClient
-	EventClient *kubernetes.Clientset
-	Broadcaster events.EventBroadcasterAdapter
-	Informer    informers.SharedInformerFactory
-	DynInformer dynamicinformer.DynamicSharedInformerFactory
+	KubeConfig    *rest.Config
+	Client        *kubernetes.Clientset
+	ClientBuilder func(name string) (*kubernetes.Clientset, error)
+	DynClient     *dynamic.DynamicClient
+	EventClient   *kubernetes.Clientset
+	Broadcaster   events.EventBroadcasterAdapter
+	Informer      informers.SharedInformerFactory
+	DynInformer   dynamicinformer.DynamicSharedInformerFactory
 }
 
-func newClients(c *Cluster, ua string, masterIP net.IP, cert *pekahi.Certificate) (*Clients, error) {
+func newClients(c *Cluster, masterIP net.IP, cert *pekahi.Certificate) (*Clients, error) {
 	kc := &rest.Config{
 		Host: fmt.Sprintf("https://[%s]:%d", masterIP.String(), apiserverPort),
 		TLSClientConfig: rest.TLSClientConfig{
@@ -45,15 +46,18 @@ func newClients(c *Cluster, ua string, masterIP net.IP, cert *pekahi.Certificate
 			KeyFile:  cert.KeyPath(),
 		},
 	}
-	return newClientsForKC(kc, ua)
+	return newClientsForKC(kc)
 }
 
-func newClientsForKC(kc *rest.Config, ua string) (*Clients, error) {
-	client, err := kubernetes.NewForConfig(rest.AddUserAgent(kc, ua))
+func newClientsForKC(kc *rest.Config) (*Clients, error) {
+	clientBuilder := func(name string) (*kubernetes.Clientset, error) {
+		return kubernetes.NewForConfig(rest.AddUserAgent(kc, name))
+	}
+	baseClient, err := clientBuilder("informers")
 	if err != nil {
 		return nil, err
 	}
-	eventsClient, err := kubernetes.NewForConfig(kc)
+	eventsClient, err := clientBuilder("events")
 	if err != nil {
 		return nil, err
 	}
@@ -62,16 +66,17 @@ func newClientsForKC(kc *rest.Config, ua string) (*Clients, error) {
 		return nil, err
 	}
 	broadcaster := events.NewEventBroadcasterAdapter(eventsClient)
-	informers := informers.NewSharedInformerFactory(client, 0)
+	informers := informers.NewSharedInformerFactory(baseClient, 0)
 	dynInformers := dynamicinformer.NewFilteredDynamicSharedInformerFactory(dynClient, 0, core.NamespaceAll, nil)
 	return &Clients{
-		KubeConfig:  kc,
-		Client:      client,
-		DynClient:   dynClient,
-		EventClient: eventsClient,
-		Broadcaster: broadcaster,
-		Informer:    informers,
-		DynInformer: dynInformers,
+		KubeConfig:    kc,
+		ClientBuilder: clientBuilder,
+		Client:        baseClient,
+		DynClient:     dynClient,
+		EventClient:   eventsClient,
+		Broadcaster:   broadcaster,
+		Informer:      informers,
+		DynInformer:   dynInformers,
 	}, nil
 }
 
diff --git a/services/kubelet.go b/services/kubelet.go
index eba5dba5e3f46d653c411825f9edb3efe455e8be..a1b43b06651ccf40839262cf2734f296d1902ad8 100644
--- a/services/kubelet.go
+++ b/services/kubelet.go
@@ -44,7 +44,7 @@ var kubeKubelet = &Unit{
 		// (very difficult to check otherwise)
 		time.Sleep(10 * time.Second)
 		kubeletRoot := path.Join(c.settings.DataDir, "kubelet")
-		clients, err := newClients(c, "kubelet", c.masterNode.VpnIP, c.certs.API)
+		clients, err := newClients(c, c.masterNode.VpnIP, c.certs.API)
 		if err != nil {
 			return fmt.Errorf("could not create clients: %w", err)
 		}
diff --git a/services/scheduler.go b/services/scheduler.go
index 5b0aaf7fc96cfd3d79205fdcddfbdc3b578c8e02..b5b34a38d3b33d7cd8b58e711868594b86d55cd3 100644
--- a/services/scheduler.go
+++ b/services/scheduler.go
@@ -10,7 +10,7 @@ var kubeScheduler = &Unit{
 	Name:         "kube-scheduler",
 	Dependencies: []*Unit{kubeApiserver, pkiCA, pkiMaster, kubeLogger},
 	Run: func(u *Unit, c *Cluster, ctx context.Context) error {
-		clients, err := newClients(c, "scheduler", c.networking.NodeAddress.IP, c.masterCerts.SchedulerAPI)
+		clients, err := newClients(c, c.networking.NodeAddress.IP, c.masterCerts.SchedulerAPI)
 		if err != nil {
 			return err
 		}