开发阶段从本地机器访问GCP Memorystore的最佳方式?有无类似Cloud SQL Proxy的工具?
本地访问GCP Memorystore的最佳方式及替代Proxy方案
嘿,这个问题问到点子上了!我在实际项目里经常遇到开发阶段要连Memorystore的需求,给你分享几个最实用的方案,以及关于类似Cloud SQL Proxy工具的情况:
一、最常用的方式:通过GCP VM建立SSH隧道
Memorystore默认只能在同一个VPC网络内访问,所以本地要连的话,最直接的办法是借助一台和Memorystore同VPC的GCE虚拟机做“中转”,用SSH隧道把本地端口转发到Memorystore的地址。步骤很简单:
- 先确保你有一台和Memorystore在同一VPC的GCE虚拟机(如果没有,快速创建一个小规格的就行,开发用足够了)
- 执行下面的gcloud命令建立隧道,把本地的6379端口(Redis默认端口)转发到Memorystore的实例地址:
如果你用的是Memcached,把端口换成11211就行。gcloud compute ssh YOUR_VM_INSTANCE_NAME --zone YOUR_VM_ZONE --ssh-flag="-L 6379:MEMORYSTORE_REDIS_HOST:6379" - 命令执行后保持终端窗口打开,现在你本地就可以通过
localhost:6379访问Memorystore实例了!
注意事项:
- 确保VM的防火墙规则允许SSH(22端口)的入站流量
- 把VM的内网IP添加到Memorystore的访问白名单里(在Memorystore实例的配置页面可以设置)
二、更安全的方案:用IAP隧道代替公网SSH
如果你不想给VM开公网IP,或者对安全性要求更高,可以用Cloud Identity-Aware Proxy(IAP)来建立隧道,不需要暴露VM的公网地址:
- 先给你的GCP账号授予
roles/iap.tunnelResourceAccessor权限,确保能通过IAP访问VM - 执行下面的命令启动IAP隧道并做端口转发:
gcloud compute start-iap-tunnel YOUR_VM_INSTANCE_NAME 22 --zone YOUR_VM_ZONE --local-host-port=localhost:2222 - 新开一个终端,通过本地的2222端口SSH到VM并建立Memorystore的转发:
这样就完成了,同样本地用ssh -L 6379:MEMORYSTORE_REDIS_HOST:6379 YOUR_USERNAME@localhost -p 2222localhost:6379访问即可。
三、有没有类似Cloud SQL Proxy的专用工具?
很遗憾,GCP官方目前没有推出专门针对Memorystore的Proxy工具(不像Cloud SQL有官方Proxy)。不过上面的两种隧道方案已经能很好满足开发需求,而且都是基于GCP原生工具,稳定性和安全性都有保障。
如果你想尝试第三方工具,也可以用socat或者redis-cli自带的隧道功能,但个人还是更推荐前面的GCP原生方案,毕竟配置简单,不需要额外安装太多工具。
开发阶段小建议
- 如果你只是做本地测试,其实可以先用本地的Redis/Memcached代替,等部署到GCP环境再连正式的Memorystore,这样更高效
- 记得在开发完成后关闭不必要的隧道和VM,避免产生额外费用
内容的提问来源于stack exchange,提问作者Dhaval
相关产品推荐
相关产品推荐

