Skip to content

Commit 1fba888

Browse files
authored
Merge pull request kubernetes#78016 from gaorong/fix-closeAllConns
kubelet: fix fail to close kubelet->API connections on heartbeat failure
2 parents b533613 + 1d07d30 commit 1fba888

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

cmd/kubelet/app/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ go_library(
135135
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
136136
"//staging/src/k8s.io/client-go/util/cert:go_default_library",
137137
"//staging/src/k8s.io/client-go/util/certificate:go_default_library",
138+
"//staging/src/k8s.io/client-go/util/connrotation:go_default_library",
138139
"//staging/src/k8s.io/client-go/util/keyutil:go_default_library",
139140
"//staging/src/k8s.io/cloud-provider:go_default_library",
140141
"//staging/src/k8s.io/component-base/cli/flag:go_default_library",

cmd/kubelet/app/server.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import (
5757
"k8s.io/client-go/tools/record"
5858
certutil "k8s.io/client-go/util/cert"
5959
"k8s.io/client-go/util/certificate"
60+
"k8s.io/client-go/util/connrotation"
6061
"k8s.io/client-go/util/keyutil"
6162
cloudprovider "k8s.io/cloud-provider"
6263
cliflag "k8s.io/component-base/cli/flag"
@@ -567,6 +568,9 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, stopCh <-chan
567568
if err != nil {
568569
return err
569570
}
571+
if closeAllConns == nil {
572+
return errors.New("closeAllConns must be a valid function other than nil")
573+
}
570574
kubeDeps.OnHeartbeatFailure = closeAllConns
571575

572576
kubeDeps.KubeClient, err = clientset.NewForConfig(clientConfig)
@@ -806,8 +810,21 @@ func buildKubeletClientConfig(s *options.KubeletServer, nodeName types.NodeName)
806810
}
807811

808812
kubeClientConfigOverrides(s, clientConfig)
813+
closeAllConns, err := updateDialer(clientConfig)
814+
if err != nil {
815+
return nil, nil, err
816+
}
817+
return clientConfig, closeAllConns, nil
818+
}
809819

810-
return clientConfig, nil, nil
820+
// updateDialer instruments a restconfig with a dial. the returned function allows forcefully closing all active connections.
821+
func updateDialer(clientConfig *restclient.Config) (func(), error) {
822+
if clientConfig.Transport != nil || clientConfig.Dial != nil {
823+
return nil, fmt.Errorf("there is already a transport or dialer configured")
824+
}
825+
d := connrotation.NewDialer((&net.Dialer{Timeout: 30 * time.Second, KeepAlive: 30 * time.Second}).DialContext)
826+
clientConfig.Dial = d.DialContext
827+
return d.CloseAll, nil
811828
}
812829

813830
// buildClientCertificateManager creates a certificate manager that will use certConfig to request a client certificate

0 commit comments

Comments
 (0)