一、四种网络模式(内容出处)
1. bridge模式
1.1 实现方式
docker默认模式,此模式会为每个容器分配一个独立的network namespace。docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器通过交换机连在了一个二层网络中。
1.2 工作方式
从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。
1.3 bridge模式架构图
2. host模式
2.1 实现方式
使用host模式启动docker容器时,docker容器不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置的ip等,而是使用宿主机的IP和端口。 容器的其它方面,如文件系统、进程列表等还是和宿主机隔离的。
2.2 工作方式
使用宿主机的网络
2.3 host模式架构
3. container模式
3.1 实现方式
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
3.2 工作方式
和bridge模式相同
3.3 架构图
4. none模式
4.1 实现方式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
4.2 工作方式
4.3 架构图
三、跨主机通信(内容出处)
1. nat方式
NAT就是传统的docker网络,利用宿主机的IP和Iptables来达到容器,主机之间的通信。容器对外IP都是宿主机的IP,NAT的性能损耗比较大。但只要宿主机之间三层IP可达,容器之间就可以通信,比较普适。
2. Tunnel(overlay)方式
VPN,ipip,VXLAN等都是tunnel计算机,简单讲就是在容器的数据包间封装一层或多层其他的数据协议头,达到连通的效果。
Docker的Libnetwork就支持vxlan的overlay方式,weave也支持UDP和Vxlan的overlay模式,flannel,calico等都支持overlay模式。
Overlay一般通过vSwitch来实现,比如OVS
一般需要一个全局的KV store(sdn controller、etcd、consul)来保存控制信息。
这种方式一般也是只需要三层可达,容器就能互通,比较普适。overlay模式容器有独立IP,性能上一般会比NAT好,不同overlay方案之间的差别也是很大的。
3. 路由模式
路由方案主要是通过路由设置的方式让容器对容器,容器对宿主机之间相通信。例如:calico的BGP路由方案(非IPIP)。这种方式一般适用于单个数据中心,最常见的是同一个vlan中使用,如果不是,需要设置路由规则。路由方案性能损耗少,和主机网络性能比较接近。
4. 桥接方式
大二层就是将物理网卡和容器网络桥接到同一个linux bridge。容器网络可以直接接入该linux bridge,也可以将容器网络接入容器网桥docker0,再把docker0桥接到linux bridge上。目的是使得容器网络和宿主机网络在同一个二层网络。
四、参考博文
1. 官网资料
https://docs.docker.com/network/
2. 跨主机通信
https://zhuanlan.zhihu.com/p/24094454
http://blog.csdn.net/ztsinghua/article/details/51545561
3. docker网络模式
http://www.a-site.cn/article/169899.html
https://www.cnblogs.com/frankielf0921/p/5822699.html
https://www.cnblogs.com/yy-cxd/p/6553624.html
http://f.dataguru.cn/thread-576199-1-2.html
http://blog.csdn.net/gamer_gyt/article/details/54861970