Доступ к 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 и приложение / экземпляр / кластер должны находиться в одном регионе и сети, чтобы они могли обмениваться данными.