Поддержка Redis 6 TLS и Redis Sentinel

Я хотел бы настроить базовую установку Redis Sentinel с тремя узлами, используя новые функции TLS Redis 6. К сожалению, Redis 6 Sentinel не кажется достаточно умен, чтобы говорить TLS с клиентами.

Кто-нибудь знает, как это сделать, или, если это невозможно, есть ли какие-либо упоминания в Интернете о добавлении поддержки для этого в будущем? Кажется обидным иметь эти прекрасные функции TLS и не иметь возможности использовать их с собственными инструментами Redis.
Я знаю, что в прошлом люди использовали Stunnel для этого. С добавлением поддержки TLS в Redis я заинтересован в этом, только если это можно сделать без сторонних дополнений.

Моя настройка:
3 сервера Redis (6.0-rc, последний раз запускали на прошлой неделе), на которых запущен TLS с тестовыми сертификатами , как указано в документации Redis - один мастер и 2 реплики
3 Sentinel (6.0-rc, также последний раз запускали на прошлой неделе), не использующие TLS на своих портах (я бы хотел к, но это второстепенная проблема)

Что я пробовал:

  1. Указание Sentinel на порт Redis TLS - это приводит к появлению большого количества ошибок TLS в журналах Redis о полученной неверной версии TLS, поскольку Sentinel не передает TLS Redis. Поскольку он терпит неудачу, Страж думает, что хозяин упал.

  2. Добавление "https: //" в конфигурацию Sentinel перед главным IP-адресом - это приводит к тому, что Sentinel отказывается запускаться, говоря, что он не может найти главное имя хоста.

  3. Добавление параметров TLS в Sentinel - это приводит к тому, что Sentinel пытается передать TLS на свои порты, но не на клиентов, что не помогает. Я не мог найти никаких вариантов, как заставить Sentinel разговаривать с клиентами TLS.

  4. Указание Sentinel на порт Redis not-TLS (не идеально, я бы предпочел открыть только порт TLS) - это приводит к тому, что Sentinel сообщает о неправильном (не TLS) порту для мастера простому клиенту Python, с которым я тестирую (он буквально просто пытается получить основную информацию от Sentinel) - я хочу, чтобы клиент разговаривал с Redis через TLS по очевидным причинам

  5. Добавление директивы «replica-announce-port» в Redis с Sentinel, по-прежнему указывающим на порт не-TLS - это не удается двумя способами: главный порт по-прежнему неверно указывается как порт не-TLS (похоже, из-за того, что главный порт является не реплика, и поэтому директива не применяется), и теперь Sentinel считает, что обе реплики не работают (поскольку сообщается о порте TLS, реплики обнаруживаются автоматически, и он не может разговаривать с репликами на порту TLS).

Мне известен этот вопрос StackOverflow (Redis Sentinel и TLS) - он старый и спрашивает о Redis 4, так что это не то.


person Testing    schedule 20.04.2020    source источник


Ответы (2)


Я понял это и забыл опубликовать ответ раньше: мне не хватало того, что мне нужно было установить параметр tls-replication yes на серверах Redis и Sentinel.

Раньше я устанавливал его только на серверах Redis, поскольку они были единственными, которые требовали репликации через TLS. Но по какой-то причине именно этот вариант необходим для того, чтобы Sentinel действительно говорил TLS с Redis.

В целом, для вариантов TLS необходимы обе стороны уравнения:

tls-port <port>
port 0
tls-auth-clients yes
tls-ca-cert-file <file>
tls-key-file <file>
tls-cert-file <file>
tls-replication yes
person Testing    schedule 26.05.2020

Попробуйте добавить параметр tls-port в sentinel.conf, поскольку он, кажется, включает поддержку TLS в целом, и то же самое указано в документации. Для меня два нижеприведенных оператора, добавленные в sentinel.conf поверх остальной части конфигурации TLS, действительно помогли.

TLS-порт 26379

порт 0

person elxakpe    schedule 25.05.2020