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的網絡圖