我想使用 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(我想,但这是次要问题)
我试过的:
将 Sentinel 指向 Redis TLS 端口 - 这会导致 Redis 的日志中出现大量关于接收到的不正确 TLS 版本的 TLS 错误,因为 Sentinel 没有将 TLS 与 Redis 通信。由于它失败了,所以 Sentinel 认为 master 宕机了。
在主 IP 前的 Sentinel 配置中添加“https://” - 这会导致 Sentinel 拒绝运行,说它找不到主主机名。
将 TLS 选项添加到 Sentinel - 这会导致 Sentinel 尝试在其端口上与 TLS 通信,而不是与客户端通信,这无济于事。我找不到任何关于让 Sentinel 向客户讲 TLS 的选项。
将 Sentinel 指向 Redis 非 TLS 端口(不理想,我宁愿只打开 TLS 端口) - 这会导致 Sentinel 将主端口的错误(非 TLS)端口报告给我正在测试的简单 Python 客户端(它实际上只是试图从 Sentinel 获取主信息)-出于显而易见的原因,我希望客户端通过 TLS 与 Redis 对话
使用 Sentinel 向 Redis 添加“replica-announce-port”指令仍然指向非 TLS 端口 - 这有两种方式失败:主端口仍然被错误地报告为非 TLS 端口(似乎是因为主端口是不是副本,因此该指令不适用),并且 Sentinel 现在认为副本都已关闭(因为报告了 TLS 端口,副本是自动发现的,并且它无法与 TLS 端口上的副本通信)。
我知道这个 StackOverflow 问题(Redis Sentinel 和 TLS) - 它很旧并且询问 Redis 4,所以它不一样。