我的设置有一个包含8个节点和32个pod的K8S Redis集群,顶部有一个负载均衡器服务。
我正在使用Redis集群客户端,通过负载均衡器的外部IP访问该集群。但是,在处理查询时,作为Redis集群重定向(MOVED / ASK)的一部分,集群客户端收到32个Pod的内部IP地址,客户端连接失败。
例如,我提供了负载均衡器的IP地址(35.245.51.198:6379),但是Redis集群客户端抛出错误,例如: redis.clients.jedis.exceptions.JedisConnectionException:连接到主机10.32.7.2:6379失败,这是一个内部Pod IP。
任何关于如何处理这种情况的想法都将非常感谢。
提前谢谢。
发布于 2019-07-24 17:28:10
如果您在GKE上运行,您可以使用IP masquerade agent NAT Pod IP
在群集中使用IP伪装的
可以防止单个Pod IP地址暴露给本地链路范围(169.254.0.0/16)和其他任意IP范围之外的流量,从而提高其安全性
具体来说,您的问题是,pod范围在10.0.0.0/8上,默认情况下是一个non-masquerade CIDR。
您可以使用ConfigMap对此进行更改,以将该范围视为伪装,以便它选择节点的外部IP作为源地址。
或者,您可以对任何被屏蔽的内容执行change the pod range in your cluster操作。
发布于 2022-01-20 18:31:29
在gke上安装bitnami/redis-cluster时,我一直在努力解决同样的问题。
为了拥有正确的网络设置,您应该将群集设置创建为公共群集

在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 chart的values.yaml并根据您的用例更改conf了。将您创建的外部ips列表添加到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 PASSWORDhttps://stackoverflow.com/questions/57162876
复制相似问题