管理docker swarm的外部IP的常见做法是什么?

管理docker swarm的外部IP的常见做法是什么?

我正在创建一个包含 3 个管理器和 2 个工作者的 docker 集群。集群中正在运行一项服务,并公开端口 80。因此,我们可以使用任何节点的 IP 访问该服务。但是,如果节点发生故障怎么办?让用户始终尝试另一个节点的 IP 会非常麻烦。

那么管理这个外部接入点的常见做法是什么?我可以想到设置一个 DNS 记录来返回多个节点的 IP。在前面设置另一个负载平衡器似乎有点过头了。

答案1

我在这里看到了几个选项:

1)外部负载均衡器。

如果您在 AWS、GCE 或其他云提供商上运行,则可以使用负载均衡器作为这些公司提供的服务。您的 DNS 名称将指向负载均衡器的 IP,并且负载均衡器会将流量转发到您的节点。

优点:您始终拥有高可用性(负载平衡器是冗余的,您至少需要 2 个节点就可以了)。您还可以获得自动故障转移(如果某个节点发生故障,请求将转发到集群的其他节点)。

缺点:负载均衡器要花钱

2)“DIY”负载平衡器。

您可以使用 haproxy、nginx 或任何为您运行负载均衡器的代理服务来运行另一台服务器。DNS 将指向代理服务器(目前只有一个),并转发到您的节点。

优点:额外的成本有限(代理甚至可以是集群的节点之一)。

缺点:您必须设置整个基础设施(故障转移、节点发现只是您应该关心的两件事)。您会失去高可用性(只要您不使代理冗余,但我尽量保持简单)

3)多个 DNS 记录。

您可以按照您的建议在 DNS 记录中设置多个 IP 地址。在这种情况下,客户端将连接到集群中的随机节点。

优点:免费

缺点:如果某个节点出现故障,只要您不将其从 DNS 中删除,客户端仍会尝试连接该节点(由于 TTL,这需要时间)。

如果有人有其他想法我很高兴听到

相关内容