docker原生网络不足,第三方SDN解决方案来满足各种需求.
docker收购socketplane后,libnetwork项目开始发力.
libnetwork定义了新的容器网络模型CNM,标准API为容器配置网络,底层适配各种驱动.
CNM包括三个概念:
沙盒:linux平台上基于linux network namespace.在一个隔离的环境中保存网络配置.沙盒可以包含多个网络的endpoint.
Endpoint:将沙盒接入网络,一个Endpiont只能属于一个沙盒,一个沙盒可以通过多个endpiont接入不同的网络.当前使用的是veth pair接口
网络:endpoint集合,实现vlan,bridge等网络功能
目前已经实现的5种网络驱动:bridge,host,null,remote,overlay
libnetwork在linux下基于kernel的network namespace实现.
实现5种网络功能:
none:不配置网络
container:共享同一network namespace的配置,所以IP等信息都一样.
host:共享主机上root network namespace,是不安全的.
bridge(默认):NAT模式.通信通过主机的iptables控制.
overlay:docker原生跨主机多子网模型,复杂,底层使用KV存储系统进行消息同步,核心是linux bridge与vxlan隧道实现跨主机.
vxlan ID从256-1000
网络效率并不高
下面是我绘制的bridge与overlay的网络图