Не удается подключиться к GCP Memorystore из GCP Dataflow

Я пытаюсь использовать GCP Memorystore для обработки идентификаторов сеансов для задания потоковой передачи событий, выполняемого в GCP Dataflow. Задание завершается ошибкой с тайм-аутом при попытке подключиться к Memorystore:

redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host 10.0.0.4:6379
    at redis.clients.jedis.Connection.connect(Connection.java:207)
    at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:101)
    at redis.clients.jedis.Connection.sendCommand(Connection.java:126)
    at redis.clients.jedis.Connection.sendCommand(Connection.java:117)
    at redis.clients.jedis.Jedis.get(Jedis.java:155)

Мой экземпляр Memorystore имеет следующие свойства:

Version is 4.0
Authorized network is default-auto
Master is in us-central1-b. Replica is in us-central1-a.
Connection properties: IP address: 10.0.0.4, Port number: 6379 
> gcloud redis instances list --region us-central1
INSTANCE_NAME  VERSION    REGION       TIER         SIZE_GB  HOST      PORT  NETWORK       RESERVED_IP  STATUS  CREATE_TIME
memorystore    REDIS
Name: default-auto-internal
Type: Ingress
Targets: Apply to all   
Filters: IP ranges: 10.0.0.0/20
Protocols/ports: 
  tcp:0-65535
  udp:0-65535
  icmp
Action: Allow
Priority: 65534
0 us-central1 STANDARD_HA 1 10.0.0.4 6379 default-auto 10.0.0.0/29 READY 2019-07-15T11:43:14

Моя работа Dataflow имеет следующие свойства:

runner: org.apache.beam.runners.dataflow.DataflowRunner
zone: us-central1-b
network: default-auto
> gcloud dataflow jobs list   
JOB_ID                                    NAME                        TYPE       CREATION_TIME        STATE      REGION
2019-06-17_02_01_36-3308621933676080017   eventflow                   Streaming  2019-06-17 09:01:37  Running    us-central1

Моя сеть «по умолчанию» не может быть использована, так как это устаревшая сеть, которую Memorystore не принимает. Мне не удалось найти способ обновить сеть по умолчанию с устаревшей до автоматической, и я не хотел удалять существующую сеть по умолчанию, поскольку это потребовало бы возиться с производственными службами. Вместо этого я создал новую сеть default-auto типа auto с теми же правилами брандмауэра, что и сеть по умолчанию. Я считаю, что для моей работы Dataflow имеет отношение следующее:

Name: default-auto-internal
Type: Ingress
Targets: Apply to all   
Filters: IP ranges: 10.0.0.0/20
Protocols/ports: 
  tcp:0-65535
  udp:0-65535
  icmp
Action: Allow
Priority: 65534

Я могу подключиться к Memorystore с помощью telnet 10.0.0.4 6379 из экземпляра Compute Engine.

То, что я пробовал, ничего не изменило: - Переключена библиотека Redis с Jedis 2.9.3 на Lettuce 5.1.7 - Удален и заново создан экземпляр Memorystore

Предполагается, что Dataflow не может подключаться к Memorystore, или мне что-то не хватает?


person Thomas Oldervoll    schedule 16.07.2019    source источник
comment
Правило брандмауэра имеет самый низкий приоритет, поэтому может быть, что другое правило каким-то образом ему мешает.   -  person Corinne White    schedule 16.07.2019


Ответы (1)


Догадаться. Я пытался подключиться к Memorystore из кода, вызываемого непосредственно из основного метода моего задания Dataflow. Подключение из кода, запущенного на шаге потока данных, сработало. Во-вторых, хотя (ну, на самом деле, это больше похоже на 1002-ю мысль), это имеет смысл, потому что main () работает на машине с драйвером (в данном случае на моем рабочем столе), тогда как шаги графика потока данных будут выполняться на GCP. Я подтвердил эту теорию, подключившись к Memorystore на localhost: 6379 в моем main (). Это работает, поскольку у меня есть SSH-туннель в Memorystore, работающий на порту 6379 (используя этот трюк ).

person Thomas Oldervoll    schedule 16.07.2019