如何在coreos docker容器和舰队上使用nginx

我有三个docker集装箱configuration..

  • 鬼 – 一个运行我的鬼博客的定制docker集装箱
  • ghost-data – 容纳所有持久数据的content/* config.js, newrelic.js
  • jwilder / nginx-proxy – 一个位于ghost容器前的nginx的docker容器

使用单个服务器,我得到了如何将nginx链接到ghost容器,并通过nginx获得服务。

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

据我所知,coreos中的整个机群/集群是正常运行的。 容器将根据需要从节点移动到节点。 问题是,这些节点中的每一个都有自己的IP到世界各地。 如何让我的DNS了解这些IP,以及哪个IP上有nginx服务器?

我看到它的方式,像这样运行的东西..

  • node1 – 运行nginx-proxy,公网ip为1.1.1.1
  • node2 – 运行ghost,ghost-data, 1.1.1.2公网ip
  • 节点3 – 空闲节点,公网IP为1.1.1.3

DNS将example.com指向1.1.1.1

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

我怎样才能让DNS遵循这个? 我敢肯定,在服务文件中有一种方法可以强制nginx停留在同一个节点上,但是这完全打败了目的不是吗?

你有三个主要的select:

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

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

  1. 使用云负载平衡器

如果您位于云提供商,请使用LB并在端口80上设置运行状况检查。只有在80上运行的计算机才会获得stream量。 如果LB没有足够快地检测到你的故障,你将会有一些停机时间(从几秒到几分钟)。

  1. 两层分层路由

类似于https://github.com/robszumski/varnish_etcd ,但你可以用varnish / nginx / haproxy和confd或者vulcand来完成。 基本上,每台机器上都有一个路由层,dynamic地redirect到后端的位置。