如何将 nginx 与 coreos docker 容器和 fleet 结合使用

如何将 nginx 与 coreos docker 容器和 fleet 结合使用

我配置了三个docker容器..

  • ghost - 运行我的 ghost 博客的自定义 docker 容器
  • ghost-data-保存所有持久数据的docker容器..content/* config.js, newrelic.js
  • jwilder/nginx-proxy- 一个带有 nginx 的 docker 容器,位于 ghost 容器的前面

使用单个服务器,我知道如何将 nginx 链接到 ghost 容器并通过 nginx 提供服务。

但是我想开始学习 coreos 并迁移到 coreos 服务器群。我知道为了做到这一点,我需要为两个容器 (ghost、ghost-data) 编写服务文件,并确保 ghost 和 ghost-data 位于同一主机上,而 nginx 不位于同一主机上。

据我所知,coreos 中 fleet/clustering 的全部意义在于正常运行时间。容器将根据需要从一个节点移动到另一个节点。问题是,这些节点中的每一个都有自己的 IP。我如何让我的 DNS 知道这些 IP 以及哪个 IP 上有 nginx 服务器?

在我看来,有些事情就像这样运行……

  • node1-运行nginx-proxy,公共ip为1.1.1.1
  • node2 - 运行 ghost、ghost-data、公共 ip1.1.1.2
  • node3 - 空闲节点,公网 IP1.1.1.3

DNS 将 example.com 指向1.1.1.1

当 coreos 决定将 nginx-proxy 移至 node3 时会发生什么1.1.1.3

我如何让 DNS 遵循这一点?我确信在服务文件中有一种方法可以强制 nginx 停留在同一节点上,但这完全违背了目的,不是吗?

答案1

您有三个主要选择:

  1. 使用特定主机进行路由

这与您上面描述的设置类似,但我会确保您的单元文件保留在该主机上MachineID=abc123...。但是,它不是超级 HA,因为您有一个单点故障。

  1. 使用云负载均衡器

如果您使用的是云提供商,请使用 LB 并在端口 80 上设置健康检查。只有在 80 上运行的机器才会获得流量。如果 LB 无法足够快地检测到您的故障,您将会有一些停机时间(几秒到几分钟)。

  1. 两层路由

类似于https://github.com/robszumski/varnish_etcd,但您可以使用 varnish/nginx/haproxy 和 confd 或 vulcand 来实现。基本上,每台机器上都有一个路由层,可以动态重定向到后端的位置。

相关内容