Kubernetes

如何在 Kubernetes 集群中配置 Redis 集群以供外部應用程序訪問

  • April 26, 2021

我無法將 Kubernetes 上的 Redis 集群暴露給外部應用程序。使用 Kubernetes 負載均衡器服務,我能夠為 Redis 分配一個外部 IP,它提供初始連接。問題是,每當客戶端收到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

你如何解決這個問題?我讀過的所有教程/指南都沒有說明將集群暴露給外部服務。大多數人都關心在 K8s 中設置 Redis 集群。

對於仍在尋找答案的任何人,我發現的最佳選擇是使用(現在是官方的)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 或更高版本。

引用自:https://serverfault.com/questions/985714