Docker使用ipvs的NAT模式来获得服务负载平衡,在NAT模式下,真实服务器对VIP一无所知.
根据我的理解,VIP仅用于来自不同服务的容器之间的通信,因此它应该只出现在iptables的mangle表中.
我相信现在(2016年8月)在PR 25414中对此进行了讨论,其中服务创建中的容器网络最初报告为:
可以通过虚拟IP(VIP)在服务发现中访问以docker swarm模式提供的容器,并通过docker swarm入口覆盖网络进行路由.或者通过DNS循环(DNSRR)
但查尔斯史密斯(sfsmithcha)补充道:
VIP不在入口覆盖网络上.您需要创建用户定义的覆盖网络才能使用VIP或DNSRR.(见PR 25420)
我们不应该混淆ingress,即(--publish ports)与swarm-internal overlay网络.
查尔斯对VIP存在的说明是(docs/swarm/networking.md)
Docker Engine群集模式本身支持覆盖网络,因此您可以启用容器到容器网络.
使用swarm模式时,不需要外部键值存储.群模式覆盖网络的特征包括:
- 您可以将多个服务附加到同一网络.
- 默认情况下,服务发现为群集中的每个服务分配虚拟IP地址(VIP)和DNS条目,使其可通过其服务名称提供给同一网络上的容器.
- 您可以将服务配置为使用DNS循环而不是VIP.
使用swarm模式服务发现
默认情况下,当您创建连接到网络的服务时,swarm会为该服务分配VIP.VIP根据服务名称映射到DNS别名.网络上的容器通过八卦共享服务的DNS映射,因此网络上的任何容器都可以通过其服务名称访问服务.
您无需公开特定于服务的端口,即可将该服务提供给同一覆盖网络上的其他服务.
swarm的内部负载均衡器自动将请求分配给活动任务中的服务VIP.
OP坚持认为:
仍然无法得到VIP附在容器上的原因......
好:
docker_gwbridge网络的容器接口,用于容器集群外部的外部连接.现在问题25325是关于Docker 1.12群模式负载平衡不能始终如一地工作,其中IPVS表没有正确填充.
这说明了那些ipv的作用,这个bug应该在1.12.1-rc1中修复.
| 归档时间: |
|
| 查看次数: |
2208 次 |
| 最近记录: |