我想知道如果节点需要身份验证,Redis Cluster是否能正常工作。我倾向于认为可以,因为它们通过不同的端口连接并使用不同的协议,但我不确定,并且找不到任何关于规范的文档或其他内容来确认这一点。
此外,如果Redis Cluster协议越过了身份验证障碍,那么这不是一个安全漏洞吗?我的数据库是否可以被外部访问?(至少必须让端口可访问以便与其他节点通信)
SSH隧道可能是一个简单的解决方案:
快速示例:
ssh -f -L 1234:localhost:6379 server.com -NC
这将路由任何到达localhost:1234的连接到远程server.com:6379。因此,您可以在redis配置文件中将server.com:6379替换为localhost:1234。
您可以查看man ssh
了解更多信息。
如果任何协议在互联网上传输,您都需要加密(“ssl”),例如跨数据中心。这通常会影响性能。在Redis的当前安全规范中-
http://redis.io/topics/security
建议不要使用SSL,需要使用SSL代理。这通常会导致系统性能下降,例如潜在的延迟,您需要考虑到这一点。由于Redis在集群中的操作方式,不可能在Redis Cluster中使用SSL。
要使SSL在Redis部署中工作,您需要安装和配置stunnel或隧道应用程序。
来自Redis文档:请注意,为了使Redis Cluster正常工作,每个节点都需要: 用于与客户端通信的常规客户端通信端口(通常为6379),该端口必须对所有需要访问集群的客户端以及使用客户端端口进行键迁移的所有其他集群节点开放。 集群总线端口(客户端端口+10000)必须可从所有其他集群节点访问。
您可以配置stunnel以接收某个端口的流量,并将流量重定向到redis-server正在侦听的6379或任何其他端口。在集群模式下,redis-server会宣布其“cluster_port”,以便客户端和其他节点可以连接到此端口。如果覆盖了“cluster_announce_port”设置,则ssl-client将能够成功连接到节点,但redis-cli和通过cluster_port的节点间通信将失败。
似乎AWS ElastiCache/Redis Enterprise支持集群的SSL,但开源版本的Redis不支持。