Доступ к GCP Memorystore с локальных компьютеров

Каков наилучший способ получить доступ к Memorystore с локальных машин во время разработки? Есть ли что-то вроде Cloud SQL Proxy, которое я могу использовать для настройки туннеля?

7 ответов

Вы можете раскрутить экземпляр 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

Я создал вм на гугл облаке

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

Затем я смог подключиться к хранилищу памяти с моей локальной машины для разработки

Вы можете раскрутить экземпляр Compute Engine и установить haproxy, используя следующий образ docker, образ haproxy docker, после чего haproxy перенаправит ваши tcp-запросы в memorystore.

Например, я хочу получить доступ к экземпляру memorystore с ip 10.0.0.12, поэтому добавил следующие конфиги 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

Примечание: замените фактическим IP-адресом haproxy.

Надеюсь, что это может помочь вам решить вашу проблему.

Этот пост основан на предыдущих и должен помочь вам обойти проблемы с брандмауэром.

Создайте виртуальную машину в том же регионе (и зоне, чтобы быть в безопасности), что и ваш экземпляр Memorystore. На этой машине:

  • Добавьте сетевой тег, с помощью которого мы создадим правило брандмауэра, разрешающее трафик на порт 6379.
  • Добавьте внешний IP-адрес, с которого вы будете получать доступ к этой виртуальной машине

SSH на этот компьютер и установить 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

Теперь создайте правило брандмауэра, которое разрешает трафик на порт 6379 виртуальной машины. Гарантировать:

  • Он имеет тот же целевой тег, что и сетевой тег, который мы создали на виртуальной машине.
  • Он разрешает трафик на порт 6379 для протокола TCP.

Теперь у вас должна быть возможность подключаться удаленно следующим образом:

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

Как @Christiaan ответил выше, у меня это почти сработало, но мне нужно было проверить еще несколько вещей, чтобы все работало хорошо.

  • Во-первых, в моем случае мой Redis работает в определенной сети, отличной отdefaultсети, поэтому мне пришлось создать джампбокс внутри той же сети (назовем егоmy-network)
  • Во-вторых, мне нужно было применить правило брандмауэра, чтобы открыть порт 22 в этой сети.

Итак, поместив всю необходимую мне команду, это выглядит так:

      gcloud compute firewall-rules create default-allow-ssh --project=my-project  --network my-network --allow tcp:22 --source-ranges 0.0.0.0/0

gcloud compute instances create jump-box --machine-type=f1-micro --project my-project --zone europe-west1-b --network my-network

gcloud compute ssh jump-box  --project my-project --zone europe-west1-b -- -N -L 6379:10.177.174.179:6379

Затем у меня есть доступ к Redis локально на6379

Memorystore не позволяет подключаться с локальных машин, другие способы, такие как CE, GAE, дороги, особенно ваш проект небольшой или находится на стадии разработки, я предлагаю вам создать облачную функцию для выполнения memorystore, это бессерверная услуга, что означает более низкую плату за выполнение. Я написал небольшой инструмент для этого, результат похож на запуск на локальной машине. Вы можете проверить, поможет ли вам.

Есть несколько примеров того, как подключиться к Memorystore:

Помните, что экземпляр Redis и приложение / экземпляр / кластер должны находиться в одном регионе и сети, чтобы они могли обмениваться данными.

Другие вопросы по тегам