--昨夜西风凋碧树,独上高楼,望尽天涯路
none、host、bridge和joined解决了单个Docker Host内容器通信的问题。
目前Docker的跨主机网络方案主要有:(1)Docker原生的overlay和macvlan;(2)第三方方案:flannel、weave和calico
-
libnetwork和CNM
libnetwork是docker容器网络库,最核心的内容是其定义的Container Network Model(CNM),这个模型对容器网络进行了抽象,由一下三类组成:
1.Sandbox
Sandbox是容器的网络栈,包含容器的interface、路由表和DNS设置。Linux Network Namespace是Sandbox的标准实现。Sandbox可以包含来自不同Network的Endpoint。
2.Endpoint
Endpoint的作用是将Sandbox接入Network。Endpoint的作用是将Sandbox接入Network。Endpoint的典型实现是veth pair。一个Endpoing只能属于一个网络,也只能属于一个Sandbox。
3.Network
Network包含一组Endpoint,同一个Network的Endpoint可以直接通信。Network的实现可以是Linux Bridge、VLAN等。
libnetwork CNM定义了docker容器的网络模型,按照该模型开发出的driver就能与docker dameon协同工作,实现容器网络。docker原生的driver包括none、bridge、host、overlay和macvlan,第三方driver包括flannel、weave、calico。
-
overlay
Docker overlay网络需要一个key-value数据库用于保存网络状态信息,包括Network、Endpoint、IP等。Consul、Etcd、和Zookeeper都是支持Docker的key-value软件。