1

我想使用 Redis 6 的新 TLS 功能设置一个基本的 3 节点 Redis Sentinel 设置。不幸的是,Redis 6 Sentinel 似乎不够聪明,无法向客户端发送 TLS。

有谁知道这样做的方法,或者如果不可能,是否有任何关于将来添加对此的支持的在线提及?拥有这些漂亮的 TLS 功能却无法将它们与 Redis 自己的工具一起使用,这似乎是一种耻辱。
我知道过去人们使用 Stunnel 来执行此操作。将 TLS 支持添加到 Redis 后,我只对这样做感兴趣,如果它可以在没有第三方添加的情况下完成。

我的设置:
3 个 Redis 服务器(6.0-rc,上周最后一次提取),使用Redis 文档中指定的测试证书运行 TLS - 一个主服务器和 2 个副本
3 个 Sentinel(6.0-rc,上周也最后一次提取),不是在他们的端口上运行 TLS(我想,但这是次要问题)

我试过的:

  1. 将 Sentinel 指向 Redis TLS 端口 - 这会导致 Redis 的日志中出现大量关于接收到的不正确 TLS 版本的 TLS 错误,因为 Sentinel 没有将 TLS 与 Redis 通信。由于它失败了,所以 Sentinel 认为 master 宕机了。

  2. 在主 IP 前的 Sentinel 配置中添加“https://” - 这会导致 Sentinel 拒绝运行,说它找不到主主机名。

  3. 将 TLS 选项添加到 Sentinel - 这会导致 Sentinel 尝试在其端口上与 TLS 通信,而不是与客户端通信,这无济于事。我找不到任何关于让 Sentinel 向客户讲 TLS 的选项。

  4. 将 Sentinel 指向 Redis 非 TLS 端口(不理想,我宁愿只打开 TLS 端口) - 这会导致 Sentinel 将主端口的错误(非 TLS)端口报告给我正在测试的简单 Python 客户端(它实际上只是试图从 Sentinel 获取主信息)-出于显而易见的原因,我希望客户端通过 TLS 与 Redis 对话

  5. 使用 Sentinel 向 Redis 添加“replica-announce-port”指令仍然指向非 TLS 端口 - 这有两种方式失败:主端口仍然被错误地报告为非 TLS 端口(似乎是因为主端口是不是副本,因此该指令不适用),并且 Sentinel 现在认为副本都已关闭(因为报告了 TLS 端口,副本是自动发现的,并且它无法与 TLS 端口上的副本通信)。

我知道这个 StackOverflow 问题(Redis Sentinel 和 TLS) - 它很旧并且询问 Redis 4,所以它不一样。

4

2 回答 2

2

我确实弄清楚了这一点,但忘记了之前发布的答案:我缺少的是我需要在 Redis 和 Sentinel 服务器上tls-replication yes设置选项。

以前,我只在 Redis 服务器上设置它,因为它们是唯一需要通过 TLS 进行复制的服务器。但出于某种原因,该特定选项是实际使 Sentinel 向 Redis 使用 TLS 所需要的。

所以总的来说,对于 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
于 2020-05-26T17:31:49.920 回答
0

尝试将 tls-port 选项添加到 sentinel.conf,因为它似乎通常启用 TLS 支持,并且在文档中也有相同的说明。对我来说,在 TLS 配置的其余部分之上添加到 sentinel.conf 的以下两个语句实际上起到了作用。

TLS 端口 26379

端口 0

于 2020-05-25T13:01:36.700 回答