【问题标题】:Accessing GCP Memorystore from local machines从本地机器访问 GCP Memorystore
【发布时间】:2018-05-10 21:05:23
【问题描述】:

在开发期间从本地计算机访问 Memorystore 的最佳方式是什么?我可以使用 Cloud SQL Proxy 之类的东西来设置隧道吗?

【问题讨论】:

  • 不付费创建另一个中间实例就无法连接到这个云redis实例,这很令人失望

标签: google-cloud-platform google-cloud-memorystore


【解决方案1】:

您可以启动 Compute Engine 实例并使用端口转发连接到您的 Redis 机器。

例如,如果您的 Redis 机器的内部 IP 地址为 10.0.0.3,您会这样做:

gcloud compute instances create redis-forwarder --machine-type=f1-micro
gcloud compute ssh redis-forwarder -- -N -L 6379:10.0.0.3:6379

只要保持 ssh 隧道打开,就可以连接到 localhost:6379

更新:这现已正式记录在案: https://cloud.google.com/memorystore/docs/redis/connecting-redis-instance#connecting_from_a_local_machine_with_port_forwarding

【讨论】:

  • 我可以创建实例,但是在运行第二个命令时出现以下错误:错误:(gcloud.compute.ssh)无法通过 SSH 连接到实例。您的 SSH 密钥可能尚未传播到实例。再次尝试运行此命令。如果仍然无法连接,请验证防火墙和实例是否设置为接受 ssh 流量。
  • 这很棒。
  • 为什么这不是公认的答案? en.wikipedia.org/wiki/Jump_server
  • 昨天刚用过。就像安装 GCP 工具并运行这两个命令一样简单。谢谢。
  • @Josh 可能需要检查 GCE 实例是否与您的 Redis 实例在同一区域中运行。
【解决方案2】:

我在谷歌云上创建了一个虚拟机

gcloud compute instances create redis-forwarder --machine-type=f1-micro

然后 ssh 进入并安装 haproxy

sudo su
apt-get install haproxy

然后更新配置文件

/etc/haproxy/haproxy.cfg

....existing file contents
frontend redis_frontend
  bind *:6379
  mode tcp
  option tcplog
  timeout client  1m
  default_backend redis_backend

 backend redis_backend
   mode tcp
   option tcplog
   option log-health-checks
   option redispatch
   log global
   balance roundrobin
   timeout connect 10s
   timeout server 1m
   server redis_server [MEMORYSTORE IP]:6379 check

重启haproxy

/etc/init.d/haproxy restart

然后我可以从本地机器连接到内存存储进行开发

【讨论】:

    【解决方案3】:

    您可以使用以下 docker 映像 haproxy docker image 启动 Compute Engine 实例并设置 haproxy,然后 haproxy 会将您的 tcp 请求转发到 memorystore。

    例如,我想使用 ip 10.0.0.12 访问 memorystore 实例,因此添加了以下 haproxy 配置:

    frontend redis_frontend
       bind *:6379
       mode tcp
       option tcplog
       timeout client  1m
       default_backend redis_backend
    
    backend redis_backend
       mode tcp
       option tcplog
       option log-health-checks
       option redispatch
       log global
       balance roundrobin
       timeout connect 10s
       timeout server 1m
       server redis_server 10.0.0.12:6379 check
    

    所以现在您可以使用以下命令从本地计算机访问 memorystore:

    redis-cli -h <your-haproxy-public-ipaddress> -p 6379
    

    注意:替换为您的实际 haproxy ip 地址。

    希望能帮助您解决问题。

    【讨论】:

      【解决方案4】:

      这篇文章建立在之前的文章之上,应该可以帮助您绕过防火墙问题。

      在与您的 Memorystore 实例相同的区域(以及安全区域)中创建虚拟机。在这台机器上:

      • 添加一个网络标签,我们将使用该标签创建防火墙规则以允许端口 6379 上的流量
      • 添加用于访问此 VM 的外部 IP

      SSH 到这个machine 并安装 haproxy

      sudo su
      apt-get install haproxy
      

      在 /etc/haproxy/haproxy.cfg 文件中添加以下现有配置

      frontend redis_frontend
         bind *:6379
         mode tcp
         option tcplog
         timeout client  1m
         default_backend redis_backend
      
      backend redis_backend
         mode tcp
         option tcplog
         option log-health-checks
         option redispatch
         log global
         balance roundrobin
         timeout connect 10s
         timeout server 1m
         server redis_server [MEMORYSTORE IP]:6379 check
      

      重启haproxy

      /etc/init.d/haproxy restart
      

      现在创建一个防火墙rule,允许 VM 上端口 6379 上的流量。确保:

      • 它与我们在 VM 上创建的网络标签具有相同的目标标签。
      • 它允许 TCP 协议在端口 6379 上的流量。

      现在您应该可以像这样远程连接了:

      redis-cli -h [VM IP] -p 6379
      

      【讨论】:

        【解决方案5】:

        Memorystore 不允许从本地机器连接,从 CE、GAE 等其他方式很昂贵,特别是您的项目很小或处于开发阶段,我建议您创建一个云功能来执行 memorystore,它是无服务器服务,这意味着费用较低执行。我为此写了小tool,结果类似于在本地机器上运行。您可以查看是否对您有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-21
          • 2019-12-12
          • 1970-01-01
          • 2018-06-05
          • 1970-01-01
          • 2022-06-28
          • 2021-06-15
          • 2022-01-12
          相关资源
          最近更新 更多