From 388952e8f1dad50143b1a43067fb28539aa58e17 Mon Sep 17 00:00:00 2001 From: Alexander Yastrebov Date: Thu, 8 Feb 2024 19:13:23 +0100 Subject: [PATCH] skipper: use kubernetes cluster client to discover redis shards Fixes #2476 Signed-off-by: Alexander Yastrebov --- skipper.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/skipper.go b/skipper.go index 85b33bf52e..6f7925e9a6 100644 --- a/skipper.go +++ b/skipper.go @@ -1684,24 +1684,33 @@ func run(o Options, sig chan os.Signal, idleConnsCH chan struct{}) error { kdc := findKubernetesDataclient(dataClients) if kdc != nil { redisOptions.AddrUpdater = getRedisUpdaterFunc(o.KubernetesRedisServiceNamespace, o.KubernetesRedisServiceName, kdc) - _, err = redisOptions.AddrUpdater() + } else { + clusterClient, err := kubernetes.NewClusterClient(o.KubernetesDataClientOptions()) if err != nil { - log.Errorf("Failed to update redis address %v", err) + log.Errorf("Failed to create kubernetes cluster client: %v", err) return err } - } else { - log.Errorf("Failed to find kubernetes dataclient, but redis shards should be get by kubernetes svc %s/%s", o.KubernetesRedisServiceNamespace, o.KubernetesRedisServiceName) + redisOptions.AddrUpdater = func() ([]string, error) { + a, err := clusterClient.LoadEndpointAddresses(o.KubernetesRedisServiceNamespace, o.KubernetesRedisServiceName) + log.Debugf("LoadEndpointAddresses found %d redis endpoints, err: %v", len(a), err) + return a, err + } + } + + _, err = redisOptions.AddrUpdater() + if err != nil { + log.Errorf("Failed to update redis addresses: %v", err) + return err } } else if redisOptions != nil && o.SwarmRedisEndpointsRemoteURL != "" { log.Infof("Use remote address %s to fetch updates redis shards", o.SwarmRedisEndpointsRemoteURL) redisOptions.AddrUpdater = updateEndpointsFromURL(o.SwarmRedisEndpointsRemoteURL) _, err = redisOptions.AddrUpdater() if err != nil { - log.Errorf("Failed to update redis endpoints from URL %v", err) + log.Errorf("Failed to update redis endpoints from URL: %v", err) return err } } - } var ratelimitRegistry *ratelimit.Registry