如何将 Kubernetes 集群内的 Redis 集群配置为可供外部应用程序访问

shr*_*umm 5 redis kubernetes google-kubernetes-engine

我在将 Kubernetes 上的 Redis 集群暴露给外部应用程序时遇到问题。使用 Kubernetes 负载均衡器服务,我可以将外部 IP 分配给 Redis,以提供初始连接。问题是,每当客户端收到MOVED命令时,IP 地址都是 Kubernetes 内部 POD IP,集群外部的 Redis 客户端无法访问该 IP 地址。

redis-cli以下是演示的示例会话:

10.150.0.5:7000> set test value
-> Redirected to slot [6918] located at 10.28.1.9:6379
Could not connect to Redis at 10.28.1.9:6379: Operation timed out
Run Code Online (Sandbox Code Playgroud)

你如何解决这个问题?我读过的教程/指南都没有对将集群暴露给外部服务提供太多说明。大多数人关心的是在 K8s 中设置 Redis 集群。

shr*_*umm 3

对于仍在寻找答案的人来说,我发现的最佳选择是使用(现已官方)Redis 代理https://github.com/RedisLabs/redis-cluster-proxy

注意:正如 Yogesh 在他的评论中提到的 - 这是 alpha 代码 - 所以请避免在生产工作负载中这样做,直到代码稳定/你知道你在做什么。

  1. 在 K8 中设置 Redis 集群
  2. 部署 redis-cluster-proxy 并将其设置为连接到您的 redis 集群
  3. 创建 K8 的外部服务以指向 redis-cluster-proxy 实例,而不是实际的 redis 集群实例
  4. 您的应用程序应该使用此服务连接到 Redis

说明 代理基本上“假装”为单个 Redis 实例,因此连接到它的客户端不需要了解集群。

您应该使用最新版本的 Redis,最好是 v6 或更高版本。