diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/objectmeta_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/objectmeta_test.go index 1ef3bd788a6..a5e0f2a6729 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/objectmeta_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/objectmeta_test.go @@ -21,9 +21,11 @@ import ( "reflect" "strings" "testing" + "time" "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/pkg/transport" + "google.golang.org/grpc" "sigs.k8s.io/yaml" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" @@ -147,8 +149,12 @@ func TestInvalidObjectMetaInStorage(t *testing.T) { t.Fatal(err) } etcdConfig := clientv3.Config{ - Endpoints: restOptions.StorageConfig.Transport.ServerList, - TLS: tlsConfig, + Endpoints: restOptions.StorageConfig.Transport.ServerList, + DialTimeout: 20 * time.Second, + DialOptions: []grpc.DialOption{ + grpc.WithBlock(), // block until the underlying connection is up + }, + TLS: tlsConfig, } etcdclient, err := clientv3.New(etcdConfig) if err != nil { diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/pruning_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/pruning_test.go index 5cfacd77758..a33e2b0a81a 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/pruning_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/pruning_test.go @@ -21,9 +21,11 @@ import ( "reflect" "strings" "testing" + "time" "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/pkg/transport" + "google.golang.org/grpc" "sigs.k8s.io/yaml" @@ -331,8 +333,12 @@ func TestPruningFromStorage(t *testing.T) { t.Fatal(err) } etcdConfig := clientv3.Config{ - Endpoints: restOptions.StorageConfig.Transport.ServerList, - TLS: tlsConfig, + Endpoints: restOptions.StorageConfig.Transport.ServerList, + DialTimeout: 20 * time.Second, + DialOptions: []grpc.DialOption{ + grpc.WithBlock(), // block until the underlying connection is up + }, + TLS: tlsConfig, } etcdclient, err := clientv3.New(etcdConfig) if err != nil { diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/storage/objectreader.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/storage/objectreader.go index 6be1bb28b85..e8449c0d904 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/storage/objectreader.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/storage/objectreader.go @@ -25,6 +25,7 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/pkg/transport" + "google.golang.org/grpc" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apiserver/pkg/registry/generic" @@ -112,8 +113,12 @@ func GetEtcdClients(config storagebackend.TransportConfig) (*clientv3.Client, cl } cfg := clientv3.Config{ - Endpoints: config.ServerList, - TLS: tlsConfig, + Endpoints: config.ServerList, + DialTimeout: 20 * time.Second, + DialOptions: []grpc.DialOption{ + grpc.WithBlock(), // block until the underlying connection is up + }, + TLS: tlsConfig, } c, err := clientv3.New(cfg) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go index f2e7452f4d2..627e547d035 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go @@ -111,6 +111,7 @@ func newETCD3Client(c storagebackend.TransportConfig) (*clientv3.Client, error) DialKeepAliveTime: keepaliveTime, DialKeepAliveTimeout: keepaliveTimeout, DialOptions: []grpc.DialOption{ + grpc.WithBlock(), // block until the underlying connection is up grpc.WithUnaryInterceptor(grpcprom.UnaryClientInterceptor), grpc.WithStreamInterceptor(grpcprom.StreamClientInterceptor), },