Skip to content

Commit 8f67a32

Browse files
committed
controller: fix apiserver connection timeout on startup (#2545)
1 parent 4b8654d commit 8f67a32

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

pkg/controller/config.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ import (
1212
"k8s.io/client-go/rest"
1313
"k8s.io/client-go/tools/clientcmd"
1414
"k8s.io/klog/v2"
15+
"kubevirt.io/client-go/kubecli"
1516

1617
clientset "github.com/kubeovn/kube-ovn/pkg/client/clientset/versioned"
1718
"github.com/kubeovn/kube-ovn/pkg/util"
18-
"kubevirt.io/client-go/kubecli"
1919
)
2020

2121
// Configuration is the controller conf
@@ -290,6 +290,13 @@ func (config *Configuration) initKubeClient() error {
290290
klog.Errorf("failed to build kubeconfig %v", err)
291291
return err
292292
}
293+
294+
// try to connect to apiserver's tcp port
295+
if err = util.DialApiServer(cfg.Host); err != nil {
296+
klog.Errorf("failed to dial apiserver: %v", err)
297+
return err
298+
}
299+
293300
cfg.QPS = 1000
294301
cfg.Burst = 2000
295302
// use cmd arg to modify timeout later

pkg/daemon/config.go

+7
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,13 @@ func (config *Configuration) initKubeClient() error {
322322
return err
323323
}
324324
}
325+
326+
// try to connect to apiserver's tcp port
327+
if err = util.DialApiServer(cfg.Host); err != nil {
328+
klog.Errorf("failed to dial apiserver: %v", err)
329+
return err
330+
}
331+
325332
cfg.QPS = 1000
326333
cfg.Burst = 2000
327334

pkg/util/k8s.go

+28
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,39 @@
11
package util
22

33
import (
4+
"fmt"
5+
"net"
6+
"net/url"
47
"strings"
8+
"time"
59

610
v1 "k8s.io/api/core/v1"
11+
"k8s.io/klog/v2"
712
)
813

14+
func DialApiServer(host string) error {
15+
u, err := url.Parse(host)
16+
if err != nil {
17+
return fmt.Errorf("failed to parse host %q: %v", host, err)
18+
}
19+
20+
address := net.JoinHostPort(u.Hostname(), u.Port())
21+
timer := time.NewTimer(3 * time.Second)
22+
for i := 0; i < 10; i++ {
23+
conn, err := net.DialTimeout("tcp", address, 3*time.Second)
24+
if err == nil {
25+
klog.Infof("succeeded to dial apiserver %q", address)
26+
_ = conn.Close()
27+
return nil
28+
}
29+
klog.Warningf("failed to dial apiserver %q: %v", address, err)
30+
<-timer.C
31+
timer.Reset(3 * time.Second)
32+
}
33+
34+
return fmt.Errorf("timed out dialing apiserver %q", host)
35+
}
36+
937
func GetNodeInternalIP(node v1.Node) (ipv4, ipv6 string) {
1038
var ips []string
1139
for _, addr := range node.Status.Addresses {

0 commit comments

Comments
 (0)