From 2f8b9e4dbc00338d2e3474d888198543c878c2e8 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Mon, 14 Jun 2021 18:02:59 -0400 Subject: [PATCH] Fix etcd egress dialer addr parsing Kubernetes-commit: a26c392de176494f2c425f712bc49fc399e9ce6d --- pkg/storage/storagebackend/factory/etcd3.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/storage/storagebackend/factory/etcd3.go b/pkg/storage/storagebackend/factory/etcd3.go index de61bfcab..2d2643496 100644 --- a/pkg/storage/storagebackend/factory/etcd3.go +++ b/pkg/storage/storagebackend/factory/etcd3.go @@ -22,6 +22,7 @@ import ( "net" "net/url" "path" + "strings" "sync" "sync/atomic" "time" @@ -137,11 +138,15 @@ func newETCD3Client(c storagebackend.TransportConfig) (*clientv3.Client, error) } if egressDialer != nil { dialer := func(ctx context.Context, addr string) (net.Conn, error) { - u, err := url.Parse(addr) - if err != nil { - return nil, err + if strings.Contains(addr, "//") { + // etcd client prior to 3.5 passed URLs to dialer, normalize to address + u, err := url.Parse(addr) + if err != nil { + return nil, err + } + addr = u.Host } - return egressDialer(ctx, "tcp", u.Host) + return egressDialer(ctx, "tcp", addr) } dialOptions = append(dialOptions, grpc.WithContextDialer(dialer)) }