overlay网络
Docker Swarm 内置的跨主机容器通信方案是overlay网络,这是一个基于vxlan协议的网络实现。
VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性。
overlay 通过虚拟出一个子网,让处于不同主机的容器能透明地使用这个子网,所以跨主机的容器通信就变成了在同一个子网下的容器通信,看上去就像是同一主机下的bridge网络通信。
为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络。
其实,docker 会创建一个 bridge 网络 “docker_gwbridge”,为所有连接到 overlay 网络的容器提供访问外网的能力。
Swarm的Service
一个Service是指使用相同镜像、同时运行的多个容器,多个容器同时一起对外提供服务,多个容器之间负载均衡。
每个Service会有一个浮动IP(VIP),各个容器还有自己的物理IP。
创建基于Swarm的Overlay网络,将Service挂载到此网络上,然后Service中的各个容器便可以通过Service名称(同时也是一个DNS名称)和IP地址实现网络互通。
同一个Service内,多个容器之间的负载均衡有两种方案:
1. 基于浮动IP(VIP)进行均衡
2. 基于DNS解析出不同的IP地址进行均衡
Sandbox
一个Sandbox包含了一个容器网络栈的配置。其中包括了对容器的网卡,路由表以及对DNS设置的管理。通常,一个Sandbox的实现可以是一个Linux Network Namespace,一个FreeBSD Jail或者其他类似的东西。一个Sandbox可以包含多个处于不同Network的Endpoint。
Endpoint
Endpoint将一个Sandbox加入一个Network。Endpoint的实现可以是一个veth对,一个Open vSwitch internal port或者其他类似的东西。一个Endpoint只能属于一个Network和一个Sandbox。
Network
Network是一个能够互相通信的Endpoint的集合。Network的实现可以是一个Linux网桥,一个VLAN等等。
参考
Docker Swarm服务调度分析
https://zhoujinl.github.io/2018/09/20/docker-swarm-scheduler
How to Configure the Linux Firewall for Docker Swarm?
https://www.digitalocean.com/community/tutorials/how-to-configure-the-linux-firewall-for-docker-swarm-on-ubuntu-16-04
Docker Swarm - 服务发现和负载均衡原理
https://anoyi.com/p/dba9342071d8
Docker swarm中的LB和服务发现详解
https://www.jianshu.com/p/c83a9173459f
Docker swarm网络
https://www.sharpcode.cn/devops/docker-swarm-networking
Swarm mode路由网络
https://jimmysong.io/docker-handbook/docs/swarm_mode_routing_mesh.html
Swarm使用原生的overlay网络
https://www.cnblogs.com/bigberg/p/8779302.html
Docker Swarm管理节点高可用分析
https://zhoujinl.github.io/2018/10/19/docker-swarm-manager-ha
基于Swarm的多主机容器网络
https://andyyoung01.github.io/2016/11/26/%E5%9F%BA%E4%BA%8ESwarm%E7%9A%84%E5%A4%9A%E4%B8%BB%E6%9C%BA%E5%AE%B9%E5%99%A8%E7%BD%91%E7%BB%9C