Weave作為在docker 0.x時代開始就比較完備的網(wǎng)絡方案一直在不斷發(fā)展,目前已經(jīng)實現(xiàn)了對多種平臺和軟件的支持。本文將會介紹Weave Net的相關(guān)信息和進行體驗。
簡單介紹支持云的平臺、系統(tǒng)和軟件有AWS,Azure,CoreOS,k8s,Mesos,Docker Machine,Docker Swarm等。目前Weave有三個成果:Weave Net,Weave Run,Weave Scope。
Weave Net的使用相當簡單,Weave創(chuàng)建的網(wǎng)絡可以連通在不同位置的容器,比如公有云、私有云,虛擬機和裸金屬設備,容器網(wǎng)絡可以承載二層和三層的流量,并支持多播;內(nèi)建的加密功能讓容器隔離更加容易實現(xiàn); Weave網(wǎng)絡還可以自動選擇最快的路徑路由容器流量,保證容器的網(wǎng)絡速度。
原理Weave Net是怎樣實現(xiàn)跨主機通訊的呢?實際上,Weave的跨主機通訊方案與先前的Ambassador其實很相似,不過后者是讓容器間通過docker的link功能實現(xiàn)通訊。
每臺運行weave的主機都需要運行幾個必須的容器,透過這些容器實現(xiàn)跨主機通訊。在一個weave網(wǎng)絡中,會有多個運行在不同主機的peer,這些peer起到路由的作用。
在weave routers間會創(chuàng)建TCP或UDP連接,工作的流程是:
1.先執(zhí)行handshake
2.隨后交換拓撲信息
如果用戶啟用了加密(啟用加密的方法會在后面說明),這些全雙工的連接會使用UDP協(xié)議承載封裝好的網(wǎng)包,并且可以透過防火墻。
在實現(xiàn)上,weave會在主機上創(chuàng)建一個網(wǎng)橋,容器會通過veth peer連接到網(wǎng)橋,一般情況下由weave自帶的地址分配工具自動分配為容器分配地址,如果用戶進行干預,則以用戶設置優(yōu)先。
因為起到路由作用的weave容器也會連接到上述網(wǎng)橋,所以,weave routers會借助pcap,透過設置為混雜模式的接入網(wǎng)橋的接口捕捉以太網(wǎng)包,但是對于直接透過內(nèi)核轉(zhuǎn)發(fā)的本地容器間流量或是宿主機與本地容器間的流量則會被排除。
被捕捉的數(shù)據(jù)包通過UDP協(xié)議轉(zhuǎn)發(fā)到其他Host上的weave router peer上,一旦收到這些包,路由會把包通過pcap注入到它的網(wǎng)橋接口或轉(zhuǎn)發(fā)到其他的peers。
weave路由會通過mac地址識別不同的peer所在的位置,連同拓撲信息去決定轉(zhuǎn)發(fā)路徑,避免采取像泛洪般的手段,把每個包都發(fā)到每個peer上,以提高網(wǎng)絡性能。
安裝、試用筆者用了兩個vmware虛擬機,分別為machine1(172.16.77.181)和machine2(172.16.77.182),只有一個NAT接口,使用的Docker版本為1.9。
安裝分別在兩個vm上下載安裝weave: