Docker網絡概述
概述
為了標準化網絡的驅動開發步驟和支持多種網絡驅動,Docker公司在libnetwork中使用了CNM(Container Network Model)。CNM定義了構建容器虛擬化網絡的模型,該模型進一步對 Docker 的網絡結構進行了細分,提出了三個概念:network、sandbox 和 endpoint。同時還提供了可以用於開發多種網絡驅動的標準化接口和組件。
如上圖所示,Docker daemon通過調用libnetwork對外提供的API完成網絡的創建和管理等功能。libnetwrok中則使用了CNM來完成網絡功能的提供。而CNM中主要有沙盒(sandbox)、端點(endpoint)、網絡(network)這3種組件。
在容器網絡模型中,每一個容器內部都包含一個 Sandbox,其中存儲著當前容器的網絡棧配置,包括容器的接口、路由表和 DNS 設置,Linux 使用網絡命名空間實現這個 Sandbox,每一個 Sandbox 中都可能會有一個或多個 Endpoint,在 Linux 上就是一個虛擬的網卡 veth,Sandbox 通過 Endpoint 加入到對應的網絡中,這裏的網絡可能就是我們在上面提到的 Linux 網橋或者 VLAN。
三大核心組件
一個沙盒也包含了一個容器網絡棧的信息。沙盒可以對容器的接口、路由和DNS設置等進行管理。沙盒的實現可以是Linux netwrok namespace、FreeBSD jail或者類似的機制。一個沙盒可以有多個端點和多個網絡。
一個端點可以加入一個沙盒和一個網絡。端點的實現可以是veth pair、Open vSwitch內部端口或者相似的設備。一個端點只可以屬於一個網絡並且只屬於一個沙盒。
一個網絡是一組可以直接互相聯通的端點。網絡的實現可以是Linux bridge、VLAN等。一個網絡可以包含多個端點。
六種驅動模型
基於 libnetwork CNM,將各個網絡模型以插件或 Driver 的形式集成到 Docker 網絡中來,與 docker daemon
協同工作,實現容器網絡。libnetwork中內置的6種驅動則為libnetwork提供了
Docker網絡概述