在docker 1.12的服务的每个容器中绑定vip addr的目的是什么?

Docker使用ipvs的NAT模式来获得服务负载平衡,而在NAT模式下,真正的服务器对VIP没有任何的了解。

根据我的理解,VIP只是用于不同服务的容器之间的通信,所以它只能出现在iptables的mangle表中。

我相信这是现在(在上个星期2016年8月)在公元25414年 ,其中服务创build容器networking最初报告为:

以docker swarm模式configuration的容器可以通过虚拟IP(VIP)在服务发现中访问,并通过Docker Swarm入口覆盖networking进行路由。 或者通过DNS round robbin(DNSRR)

但查尔斯·史密斯( sfsmithcha )补充说:

VIP不在入口覆盖networking上。 您需要创build用户定义的覆盖networking才能使用VIP或DNSRR。 (见PR 25420 )

我们不应该混合入口,这是( – 发布端口)与群内部覆盖networking。

查尔斯对VIP存在的说明是( docs/swarm/networking.md

Docker Engine群集模式本身支持覆盖networking,因此您可以启用容器到容器networking。
当您使用swarm模式时,您不需要外部键值存储。

群模式覆盖networking的特征包括以下几点:

  • 您可以将多个服务附加到同一个networking。
  • 默认情况下,服务发现为群集中的每个服务分配一个虚拟IP地址(VIP)和DNS条目,使其服务名称可用于同一networking上的容器
  • 您可以将服务configuration为使用DNS循环而不是VIP。

使用群模式服务发现

默认情况下,当您创build连接到networking的服务时,swarm将为该服务分配一个VIP。 VIP根据服务名称映射到DNS别名。 networking上的容器通过八卦分享服务的DNS映射,因此networking上的任何容器都可以通过服务名称访问服务

您不需要公开特定于服务的端口,即可使服务在同一覆盖networking上可用于其他服务。
群内部负载均衡器自动向活动任务中的服务VIP分配请求。

OP坚持:

仍然无法获得VIP附加在容器eth0上的原因…

好:

  • eth0接口表示连接到覆盖networking的容器接口。 所以,如果你创build一个覆盖networking,你将有相关的VIP。
  • eth1接口表示连接到docker_gwbridgenetworking的容器接口,用于容器集群外部的外部连接。

现在问题25325是关于Docker 1.12群集模式负载平衡不一致工作,其中IPVS表没有被正确填充。

这说明了这些ipv的作用,并且该bug应该在1.12.1-rc1中修复。