如何为 HA 设置 Traefik?在 Traefik 前需要反向代理吗?

Mar*_*mes 6 high-availability reverse-proxy

我正在尝试在生产站点上设置 Traefik,但我正在努力解决一些高可用性问题。我认为我们在 Traefik 集群前面仍然需要一个反向代理。以下是我考虑过的潜在设置,以及为什么似乎需要反向代理:

  1. 设置 DNS A 记录以指向每个 Traefik 节点以进行负载平衡和故障转移。

    • 根据包括this SO questionthis SF question在内的多个站点,不鼓励这种做法。

    • 由于 DNS 缓存和 TTL 问题,即使使用像 DNSMadeEasy 这样的服务似乎也不受欢迎。

  2. 将一条 DNS 记录指向运行 Traefik 的节点之一。

    • 该节点成为 SPOF。我的节点在 CoreOS 上运行,每次更新后都会重新启动,因此我们可以保证每周有几分钟的停机时间。

    • 我们可以在预计停机时将 DNS 记录移动到备用节点。这将是手动管理的痛苦。我可以设想一个与 locksmithd 配对的解决方案可以自动处理这个问题,但我真的不想构建它,它也不会处理意外停机时间。

    • 使用 Docker Swarm(或 Kubernetes)的部分理由是使节点可互换。

  3. 在 Traefik 集群前面放置一个负载均衡器/反向代理。反向代理可以在所有 Traefik 节点之间提供故障转移,DNS 将指向反向代理。

    • 是的,这是一个 SPOF,但根据我的经验,通过这种设置很容易获得良好的正常运行时间。如果需要偶尔维护,可以将 DNS 记录指向新的代理。

我是错过了什么还是想多了?

Ber*_*nox 1

有不同类型的解决方案。

1)在 Swarm/Kubernetes 集群前面构建您自己的 HA 负载均衡器,以分配流量并执行故障转移。

那里有很多不同的设备:

  1. 网络缩放器
  2. 肯普
  3. F5

虽然这种方法是 HA,但通常并不便宜。

更便宜的替代方案可能是Nginx/Haproxy + Keepalived设置。

然而,您当然需要一个浮动 IP 并且必须处理 arp 缓存。

2)使用“云负载均衡器”。Digital Ocean、AWS、GKE、Openstack 都提供了这样的功能。它更容易设置(大多数时候),但如果它更便宜,你就必须计算。

在 DigitalOcean 上,LB 只需 20 美元,并且有一个带有托管 Kubernetes 集群的测试版。您可能想查看一下。所有组件都可以很好地连接在一起 https://www.digitalocean.com/products/kubernetes/

3) 如果您的应用程序不是 100% 关键,我可以建议我迄今为止使用的特殊解决方案:

Cloudflare + 低 TTL + https://github.com/Berndinox/cloudflare-ddns

它的工作原理很简单:https://github.com/Berndinox/compose-v3-collection/blob/master/wordpress/www.yml 如何:它启动 WordPress 及其所有要求,包括 DNS 容器。DNS 容器正在 Cloudflare 上更新域的 DNS 记录(取决于容器启动的主机,IP 不同)。很好,如果一台主机重新启动或容器运行状况检查失败,容器将被重新安排。当重新安排并且最初使用的主机离线时,容器将在另一台主机上启动,然后将新 IP 推送到 Cloudflare。这一切都会自动发生,无需做任何事情。:)

Cloudflare TTL 非常低,因此可能只有几秒钟的停机时间。