Redis Cluster Создать реплики Bind Publi c IP - PullRequest
1 голос
/ 07 марта 2020

У нас есть 6 серверов redis, работающих в портах (8001, 8002, 8003, 8004, 8005, 8006). На redis.conf каждого сервера Redis мы связываем ip разными способами, такими как:

  • bind 0.0.0.0
  • bind PRIVATE PUBLI C
  • bind PUBLI C

Если мы получим доступ, как это работает нормально:

redis-cli -h PUBLIC_IP -p 8001

Но когда мы хотим создать кластеры, мы запускаем:

./src/redis-cli --cluster create PUBLIC_IP:8001 PUBLIC_IP:8002 PUBLIC_IP:8003 PUBLIC_IP:8004 PUBLIC_IP:8005 PUBLIC_IP:8006 --cluster-replicas 1

Консоль всегда отображается и остается в ожидании кластера навсегда:

Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica PUBLIC_IP:8005 to PUBLIC_IP:8001
Adding replica PUBLIC_IP:8006 to PUBLIC_IP:8002
Adding replica PUBLIC_IP:8004 to PUBLIC_IP:8003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 7ab009459f7f5cf6cef5f46b691748dc236e4c26 PUBLIC_IP:8001
   slots:[0-5460] (5461 slots) master
M: 0048ca2cd65c1315b8f0a7c952b69bfb494d5ace PUBLIC_IP:8002
   slots:[5461-10922] (5462 slots) master
M: c6ee023719f200b0d175f428fa15e5ab767d0e04 PUBLIC_IP:8003
   slots:[10923-16383] (5461 slots) master
S: cf636a1a46b1e947daec3e797cac524c613f08ca PUBLIC_IP:8004
   replicates 7ab009459f7f5cf6cef5f46b691748dc236e4c26
S: 5d4bd1041457114353b0b30dbefd86ab8e4ae020 PUBLIC_IP:8005
   replicates 0048ca2cd65c1315b8f0a7c952b69bfb494d5ace
S: 62f01289dc3f72cac4a1745fc77b7bd91ec5d107 PUBLIC_IP:8006
   replicates c6ee023719f200b0d175f428fa15e5ab767d0e04
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

Многие люди говорят, что нам нужно привязать приватный ip, но мы хотим сделать это на публике c, потому что когда мы соединяемся с внешние машины, которые перенаправляют кластеризацию на мастер, содержащий ключ, если мы связываем частный ip, перенаправление будет показывать «перенаправление на PRIVATE_IP», и это не будет работать должным образом.

Мы что-то упустили, чтобы позволить присоединение к кластеру через publi c IP?

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Что бы я делал, если бы был у вас:

  • Привязать все серверы с частным ip и loopback ip, т.е. bind {{ private_ip }} 127.0.0.1
  • Включить ufw (или другое любой брандмауэрный инструмент) на каждом сервере и выполните (для ufw) allow from {{ private_ip }} to any port {{ redis_port }} или аналогичный.
  • Мой внутренний DNS будет иметь запись для всех серверов с соответствующими частными ip.
  • Вуаля! Безопасное создание и доступ к кластеру Redis без каких-либо нарушений безопасности.

ПРИМЕЧАНИЕ. Если вы все же хотите получить к ним доступ через сеть publi c, вы можете обойти эту проблему с помощью SNAT

ВНИМАНИЕ: привязка сервера redis к 0.0.0.0 или publi c ip может вызвать серьезные проблемы с уязвимостью, такие как:

PS: Вы также можете следовать этому средний учебник.

0 голосов
/ 16 марта 2020

Из Руководство по безопасности Redis :

Redis предназначен для доступа доверенных клиентов в доверенных средах.

См. Также: Как подключиться к redis из удаленного руководства

Когда сервер связывает свой публичный c ip, он может получать запросы от всех, поэтому, если вы не создадите вокруг него какую-либо защиту, любой сможет получить к нему доступ и манипулировать им. ваши данные.

В кластере redis правила одинаковы, и реплики, которые связываются на publi c ips, открыты.

Вариант использования по умолчанию для кластера redis - это один компьютер ( или нескольких компьютеров) доступ к нему из его частной сети, и вы не должны отклоняться от этого, если вы не знаете, что делаете с точки зрения безопасности.

Если это имеет смысл для вашего случая использования, вы должны сделать машину которые получают доступ к кластеру redis, являющемуся частью частной сети кластера.

...