Skip to content

Commit 2aa9134

Browse files
authored
disable keepalive for all kubernetes clients (#4375)
* disable keepalive for all kubernetes clients Signed-off-by: Min Min <[email protected]> * fix tranport from config conflict with keepalive settings Signed-off-by: Min Min <[email protected]> --------- Signed-off-by: Min Min <[email protected]>
1 parent b41c744 commit 2aa9134

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

pkg/tool/clientmanager/kube.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ func (cm *KubeClientManager) GetKubernetesClientSet(clusterID string) (*kubernet
112112
if err != nil {
113113
return nil, err
114114
}
115+
disableKeepAlive(cfg)
115116
cli, err := kubernetes.NewForConfig(cfg)
116117
if err == nil {
117118
cm.kubernetesClientSetMap.Store(clusterID, cli)
@@ -145,6 +146,7 @@ func (cm *KubeClientManager) GetKubernetesClientSet(clusterID string) (*kubernet
145146
return nil, fmt.Errorf("failed to create kubeclient: unknown cluster type: %s", clusterInfo.Type)
146147
}
147148

149+
disableKeepAlive(cfg)
148150
cli, err := kubernetes.NewForConfig(cfg)
149151
if err == nil {
150152
cm.kubernetesClientSetMap.Store(clusterID, cli)
@@ -166,6 +168,7 @@ func (cm *KubeClientManager) GetKruiseClient(clusterID string) (kruiseclientset.
166168
if err != nil {
167169
return nil, err
168170
}
171+
disableKeepAlive(cfg)
169172
cli, err := kruiseclientset.NewForConfig(cfg)
170173
if err == nil {
171174
cm.kruiseClientMap.Store(clusterID, cli)
@@ -198,6 +201,7 @@ func (cm *KubeClientManager) GetKruiseClient(clusterID string) (kruiseclientset.
198201
return nil, fmt.Errorf("failed to create kruise client: unknown cluster type: %s", clusterInfo.Type)
199202
}
200203

204+
disableKeepAlive(cfg)
201205
cli, err := kruiseclientset.NewForConfig(cfg)
202206
if err == nil {
203207
cm.kruiseClientMap.Store(clusterID, cli)
@@ -219,6 +223,7 @@ func (cm *KubeClientManager) GetKubernetesMetricsClient(clusterID string) (*metr
219223
if err != nil {
220224
return nil, err
221225
}
226+
disableKeepAlive(cfg)
222227
cli, err := metricsV1Beta1.NewForConfig(cfg)
223228
if err == nil {
224229
cm.metricsClientMap.Store(clusterID, cli)
@@ -252,6 +257,7 @@ func (cm *KubeClientManager) GetKubernetesMetricsClient(clusterID string) (*metr
252257
return nil, fmt.Errorf("failed to create kubeclient: unknown cluster type: %s", clusterInfo.Type)
253258
}
254259

260+
disableKeepAlive(cfg)
255261
cli, err := metricsV1Beta1.NewForConfig(cfg)
256262
if err == nil {
257263
cm.metricsClientMap.Store(clusterID, cli)
@@ -273,6 +279,7 @@ func (cm *KubeClientManager) GetIstioClientSet(clusterID string) (*istioClient.C
273279
if err != nil {
274280
return nil, err
275281
}
282+
disableKeepAlive(cfg)
276283
cli, err := istioClient.NewForConfig(cfg)
277284
if err == nil {
278285
cm.istioClientSetMap.Store(clusterID, cli)
@@ -306,6 +313,7 @@ func (cm *KubeClientManager) GetIstioClientSet(clusterID string) (*istioClient.C
306313
return nil, fmt.Errorf("failed to create kubeclient: unknown cluster type: %s", clusterInfo.Type)
307314
}
308315

316+
disableKeepAlive(cfg)
309317
cli, err := istioClient.NewForConfig(cfg)
310318
if err == nil {
311319
cm.istioClientSetMap.Store(clusterID, cli)
@@ -428,6 +436,7 @@ func (cm *KubeClientManager) GetSPDYExecutor(clusterID string, URL *url.URL) (re
428436
return nil, err
429437
}
430438

439+
disableKeepAlive(cfg)
431440
return remotecommand.NewSPDYExecutor(cfg, http.MethodPost, URL)
432441
}
433442

@@ -436,7 +445,12 @@ func (cm *KubeClientManager) GetRestConfig(clusterID string) (*rest.Config, erro
436445
clusterID = handleClusterID(clusterID)
437446

438447
if clusterID == setting.LocalClusterID {
439-
return rest.InClusterConfig()
448+
cfg, err := rest.InClusterConfig()
449+
if err != nil {
450+
return nil, err
451+
}
452+
disableKeepAlive(cfg)
453+
return cfg, nil
440454
}
441455

442456
clusterInfo, err := aslanClient.New(config.AslanServiceAddress()).GetClusterInfo(clusterID)
@@ -461,6 +475,7 @@ func (cm *KubeClientManager) GetRestConfig(clusterID string) (*rest.Config, erro
461475
return nil, fmt.Errorf("failed to create kubeclient: unknown cluster type: %s", clusterInfo.Type)
462476
}
463477

478+
disableKeepAlive(cfg)
464479
return cfg, err
465480
}
466481

@@ -503,7 +518,9 @@ func (cm *KubeClientManager) getControllerRuntimeCluster(clusterID string) (cont
503518
}
504519

505520
if clusterID == setting.LocalClusterID {
506-
controllerClient, err := createControllerRuntimeCluster(ctrl.GetConfigOrDie())
521+
cfg := ctrl.GetConfigOrDie()
522+
disableKeepAlive(cfg)
523+
controllerClient, err := createControllerRuntimeCluster(cfg)
507524
if err == nil {
508525
go func() {
509526
if err := controllerClient.Start(stopContext); err != nil {
@@ -544,6 +561,7 @@ func (cm *KubeClientManager) getControllerRuntimeCluster(clusterID string) (cont
544561
return nil, fmt.Errorf("failed to create kubeclient: unknown cluster type: %s", clusterInfo.Type)
545562
}
546563

564+
disableKeepAlive(cfg)
547565
controllerClient, err := createControllerRuntimeCluster(cfg)
548566
if err == nil {
549567
go func() {
@@ -615,3 +633,14 @@ func createControllerRuntimeCluster(restConfig *rest.Config) (controllerRuntimeC
615633
func generateInformerKey(clusterID, namespace string) string {
616634
return fmt.Sprintf(setting.InformerNamingConvention, clusterID, namespace)
617635
}
636+
637+
// disableKeepAlive configures REST config to not keep connections alive
638+
func disableKeepAlive(cfg *rest.Config) {
639+
// Use WrapTransport instead of directly setting Transport to avoid conflicts with TLS configuration
640+
cfg.WrapTransport = func(rt http.RoundTripper) http.RoundTripper {
641+
if transport, ok := rt.(*http.Transport); ok {
642+
transport.DisableKeepAlives = true
643+
}
644+
return rt
645+
}
646+
}

0 commit comments

Comments
 (0)