GCP同项目不同集群下两个服务无法连接Redis实例求助
GCP跨GKE集群访问Memorystore Redis的解决方案建议
1. 确认Redis实例的授权网络配置
- 进入GCP控制台Memorystore Redis页面,找到目标实例
- 检查授权网络列表,确保集群B的节点所在子网(如
10.XX.XX.0/24)已添加 - 若未添加,点击编辑,将集群B子网CIDR加入后保存,等待配置生效
2. 验证防火墙规则的正确性
- 确保防火墙规则满足以下要求:
- 方向:入站(针对Redis所在子网/实例)
- 目标:选择Redis实例的网络标签(如
redis-server)或直接指定Redis所在子网 - 协议端口:TCP 6379(自定义端口则替换为对应值)
- 来源:集群B的节点子网CIDR(避免用单个IP,防止节点扩容后失效)
- 检查是否有优先级更高的拒绝规则覆盖当前规则
- 用命令查看规则详情确认配置:
gcloud compute firewall-rules describe <你的规则名称>
3. 检查VPC对等连接(Private Service Access)状态
- 找到你激活的
redis-peer-erweqwewe23we对等连接,确认状态为ACTIVE:- 若状态为
INACTIVE或REJECTED,排查VPC CIDR是否冲突,或配置时是否正确关联Redis服务网络
- 若状态为
- 确保集群B的默认网络已与Redis服务网络建立有效对等连接
4. 检查GKE集群B的网络策略
- 若集群B启用了网络策略,默认可能禁止Pod访问外部资源,需添加允许规则:
示例YAML:
应用规则:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-redis-access spec: podSelector: {} # 允许所有Pod,可按需指定label缩小范围 policyTypes: - Egress egress: - to: - ipBlock: cidr: <Redis实例IP>/32 ports: - protocol: TCP port: 6379kubectl apply -f network-policy.yaml
5. 测试Pod到Redis的连通性
- 在集群B启动测试Pod,执行连通性检查:
kubectl run -it --rm test-pod --image=busybox:1.28 -- /bin/sh # 在Pod内执行以下命令 nc -zv <Redis实例IP> 6379 # 或用telnet测试 telnet <Redis实例IP> 6379 - 根据输出定位问题:
- 超时:路由或防火墙阻止流量
- 连接被拒绝:Redis未授权该来源,或端口配置错误
6. 修复VM转发器配置(若仍需使用)
- 启用VM的IP转发:编辑VM实例,在「网络接口」下勾选「启用IP转发」
- 配置VM的iptables转发规则:
# 在VM内执行 iptables -t nat -A PREROUTING -p tcp --dport 6379 -j DNAT --to-destination <Redis实例IP>:6379 iptables -A FORWARD -p tcp -d <Redis实例IP> --dport 6379 -j ACCEPT # 保存规则避免重启丢失 iptables-save > /etc/iptables/rules.v4 - 为VM配置防火墙规则:允许集群B子网访问VM的6379端口,同时允许VM访问Redis的6379端口
内容的提问来源于stack exchange,提问作者ArlanG
相关产品推荐
相关产品推荐

