go-redis icon indicating copy to clipboard operation
go-redis copied to clipboard

Unable to connect to Redis cluster client using kubectl port-forward

Open jppade opened this issue 8 months ago • 1 comments

What do we want to do? Connect to a Redis cluster (consisting of 3 masters and 3 slaves) running in Kubernetes using kubectl port-forward to localhost:6379. The client looks as follows:

func GetRedisClient() *redis.ClusterClient {
	var redisClusterClient *redis.ClusterClient
	password := utils.Getenv("REDISPASSWORD", "")
	addresses := strings.Split(utils.Getenv("REDIS_ADDRS", "localhost:6379"), ",")
	redisClusterClient = redis.NewClusterClient(&redis.ClusterOptions{
		Password:    password,
		Addrs:       addresses,
	})
	pong, err := redisClusterClient.Ping(context.Background()).Result()
	if err != nil {
		log.Error("NewDataStore redis: ", err)
	}
	log.Debug("redisFailoverClient", pong)
	return redisClusterClient
}

Connection from localhost works fine with redis-cli -c -p 6379 -a redis_password using the port-forward.

Expected Behavior

Connect to remote redis cluster.

Current Behavior

The following error: dial tcp remote_ip:6379: connect: no route to host Where remote_ip is the ip address of a master node in the cluster, i.e. the first master obtained by cluster slots. It looks as if the cluster client library reroutes localhost:6379 to a cluster node and tries to reconnect, which obviously fails.

Possible Solution

Not a solution, but we tried adding

TLSConfig: &tls.Config{
	ServerName: "you domain",
},

to redis.Options in the cluster client such as proposed in https://github.com/redis/go-redis/issues/1698. This did not work though.

jppade avatar Jun 14 '24 09:06 jppade