diff --git a/cmd/kubeadm/app/node/discovery.go b/cmd/kubeadm/app/node/discovery.go index 6201a6d3b47..632d121d790 100644 --- a/cmd/kubeadm/app/node/discovery.go +++ b/cmd/kubeadm/app/node/discovery.go @@ -22,11 +22,16 @@ import ( "fmt" "io" "net/http" + "time" jose "github.com/square/go-jose" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + "k8s.io/kubernetes/pkg/util/wait" ) +// the amount of time to wait between each request to the discovery API +const discoveryRetryTimeout = 5 * time.Second + func RetrieveTrustedClusterInfo(s *kubeadmapi.NodeConfiguration) (*kubeadmapi.ClusterInfo, error) { host, port := s.MasterAddresses[0], 9898 requestURL := fmt.Sprintf("http://%s:%d/cluster-info/v1/?token-id=%s", host, port, s.Secrets.TokenID) @@ -37,10 +42,16 @@ func RetrieveTrustedClusterInfo(s *kubeadmapi.NodeConfiguration) (*kubeadmapi.Cl fmt.Printf(" created cluster info discovery client, requesting info from %q\n", requestURL) - res, err := http.DefaultClient.Do(req) - if err != nil { - return nil, fmt.Errorf(" failed to request cluster info [%v]", err) - } + var res *http.Response + wait.PollInfinite(discoveryRetryTimeout, func() (bool, error) { + res, err = http.DefaultClient.Do(req) + if err != nil { + fmt.Printf(" failed to request cluster info, will try again: [%s]\n", err) + return false, nil + } + return true, nil + }) + buf := new(bytes.Buffer) io.Copy(buf, res.Body) res.Body.Close()