Cloud Run通过无服务器VPC连接器访问Memorystore报缓存不可用错误
问题排查与解决步骤
故障原因定位
- 基础配置不匹配:Memorystore、Cloud Run、无服务器VPC连接器三者区域不一致,或连接器子网与Memorystore网段冲突
- 防火墙规则拦截:VPC未放行VPC连接器网段到Memorystore端口的访问请求
- 配置不兼容:Memorystore开启了身份验证或传输加密,但Django缓存配置未添加对应参数
- 子网不符合要求:VPC连接器使用的子网未预留为连接器专用,存在网段占用
对应解决方案
1. 校验基础配置一致性
- 确认Memorystore实例、Cloud Run服务、无服务器VPC连接器处于同一GCP区域,跨区域访问Memorystore默认不支持,是最常见的配置错误
- 执行
gcloud redis instances describe [实例名] --region [区域]查看Memorystore的私网IP,确认该IP所在网段与你创建的连接器子网10.0.0.0/28无重叠,若重叠需重新创建连接器子网,更换未被占用的私网段(例如10.0.1.0/28) - 确认你创建的子网为VPC连接器专用,未被其他VM、负载均衡等资源占用
2. 调整VPC防火墙规则
- 新增default网络的入站防火墙规则:源地址为VPC连接器网段10.0.0.0/28,目标端口为6379(Memorystore默认端口),协议为TCP,动作为允许
- 若你修改过default网络的默认规则,需同步删除针对该网段或6379端口的拒绝规则
3. 对齐Django配置与Memorystore配置
- 检查Memorystore是否开启AUTH身份验证,若开启需在缓存配置的
OPTIONS中添加"PASSWORD": "你的Redis密码"参数 - 检查Memorystore是否开启传输加密,若开启需在
OPTIONS中添加"CONNECTION_POOL_KWARGS": {"ssl_cert_reqs": None}参数,否则TLS握手会失败 - 排查阶段临时将
IGNORE_EXCEPTIONS改为False,可以拿到更具体的连接错误日志,进一步缩小问题范围
4. 确认Cloud Run配置生效
- 确认Cloud Run当前服务版本是绑定VPC连接器后的最新部署版本,未使用旧的未绑定版本
- 你选择的「仅将私有IP的请求路由到VPC连接器」配置正确,全量路由部署失败属于正常情况,和当前私网连接问题无关
内容的提问来源于stack exchange,提问作者Kimor
相关产品推荐
相关产品推荐

