Redis 6 TLS 支持和 Redis Sentinel

Redis 6 TLS Support and Redis Sentinel

我想使用 Redis 6 的新 TLS 功能设置一个基本的 3 节点 Redis Sentinel。不幸的是,Redis 6 Sentinel 似乎不够智能,无法与客户端对话。

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

我的设置:
3 台 Redis 服务器(6.0-rc,上周最后一次拉取),运行带有测试证书的宁 TLS as specified in the Redis docs - 一个主服务器和 2 个副本服务器
3 个 Sentinels(6.0-rc,也是上周最后一次撤消),而不是 运行 在它们的端口上使用 TLS(我愿意,但这是次要问题)

我尝试过的:

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

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

  3. 向 Sentinel 添加 TLS 选项 - 这会导致 Sentinel 尝试在其端口上使用 TLS,而不是客户端,这无济于事。我找不到任何专门关于让 Sentinel 向客户发送 TLS 的选项。

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

  5. 在 Sentinel 仍然指向非 TLS 端口的情况下将 "replica-announce-port" 指令添加到 Redis - 这有两种方式失败:主端口仍然被错误地报告为非 TLS 端口(似乎是因为 master 不是副本,所以该指令不适用),Sentinel 现在认为副本都已关闭(因为报告了 TLS 端口,副本是自动发现的,它无法与TLS 端口上的副本)。

我知道 this Whosebug question (Redis Sentinel and TLS) - 它很旧并且询问 Redis 4,所以它不一样。

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

tls 端口 26379

端口 0

我确实弄清楚了,忘记了 post 之前的答案:我缺少的部分是我需要在 Redis 和 上设置 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