簡體   English   中英

Redis 集群客戶端不適用於 GKE 上的 Redis 集群

[英]Redis Cluster Client doesn't work with Redis cluster on GKE

我的設置有一個 K8S Redis 集群,其中有 8 個節點和 32 個 Pod,頂部有一個負載均衡器服務。

我正在使用 Redis 集群客戶端使用負載均衡器的外部 IP 訪問此集群。 但是,在處理查詢時,作為 Redis 集群重定向 (MOVED / ASK) 的一部分,集群客戶端會收到 32 個 Pod 的內部 IP 地址,在客戶端內部連接失敗。

例如,我提供了負載均衡器的 IP 地址(35.245.51.198:6379),但 Redis 集群客戶端會拋出類似的錯誤 - Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Failed connected to host 10.32.7.2:6379 ,這是一個內部 Pod IP。

任何關於如何處理這種情況的想法都將不勝感激。

提前致謝。

如果您在GKE上運行,則可以使用IP偽裝代理對Pod IP進行NAT:

在群集中使用IP偽裝可以通過防止單個Pod IP地址暴露於鏈路本地范圍(169.254.0.0/16)和其他任意IP范圍之外的流量來提高其安全性

您的問題特別是,pod范圍是10.0.0.0/8 ,默認情況下是非偽裝CIDR

您可以使用ConfigMap將此值更改為偽裝,以使其選擇節點的外部IP作為源地址。

或者,您可以將群集中的Pod范圍更改為任何被掩蓋的范圍。

在 gke 上安裝bitnami/redis-cluster時,我一直在努力解決同樣的問題。

為了獲得正確的網絡設置,您應該將集群設置創建為公共集群

GKE 集群網絡配置

在 MYPROJECT 中創建集群的等效命令行是:

gcloud beta container --project "MYPROJECT" clusters create "redis-cluster" --zone "us-central1-c" --no-enable-basic-auth --cluster-version "1.21.5-gke.1802" --release-channel "regular" --machine-type "e2-medium" --image-type "COS_CONTAINERD" --disk-type "pd-standard" --disk-size "100" --metadata disable-legacy-endpoints=true --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --num-nodes "3" --logging=SYSTEM,WORKLOAD --monitoring=SYSTEM --no-enable-ip-alias --network "projects/MYPROJECT/global/networks/default" --subnetwork "projects/oddsjam/regions/us-central1/subnetworks/default" --no-enable-intra-node-visibility --no-enable-master-authorized-networks --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --workload-pool "myproject.svc.id.goog" --enable-shielded-nodes --node-locations "us-central1-c"

然后,您需要在 Network VPC 產品中創建盡可能多的外部 IP 地址。 這些 IP 地址將由 Redis 節點自動選擇。

然后您就可以獲取Bitnami Redis Cluster Helm 圖表values.yaml並根據您的用例相應地更改 conf。 將您創建的外部 ip 列表添加到cluster.externalAccess.loadBalancerIP值。

最后,您可以通過運行命令在 GKE 上安裝 Redis 集群

helm install cluster-name -f values.yaml bitnami/redis-cluster

此命令將為您提供集群的密碼。 您可以使用 redis-client 連接到新集群:

redis-cli -c -h EXTERNAL_IP -p 6379 -a PASSWORD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM