前言
Docker作為目前最火的輕量級容器技術(shù),有很多令人稱道的功能,如Docker的鏡像管理。然而,Docker同樣有著很多不完善的地方,網(wǎng)絡(luò) 方面就是Docker比較薄弱的部分。因此,我們有必要深入了解Docker的網(wǎng)絡(luò)知識,以滿足更高的網(wǎng)絡(luò)需求。
Docker網(wǎng)絡(luò)模式選擇
目前已有不少文章介紹了Docker的網(wǎng)絡(luò)模型,但是在實際應(yīng)用中還是有不少坑和需要注意的點
在Docker應(yīng)用到生產(chǎn)環(huán)境的時候,網(wǎng)絡(luò)模型的選擇主要有以下幾種
1、原生Bridge NAT模式
2、Linux Bridge VLAN模式
3、利用第三方的網(wǎng)絡(luò)方案
原生的Bridge NAT模式
這是Docker原生的網(wǎng)絡(luò)模式,每臺主機的容器都在一個獨立的子網(wǎng)中,外部訪問必須通過主機端口映射的方式。同時不同主機間的容器間訪問也必須通過這種主機端口映射的方式。換句話說,一臺主機上的容器其實是不知道另外一臺主機的容器的。這種方式是否可以用于生產(chǎn),一開始我是憂郁的,同時之前有寫文章寫NAT的性能損耗比較大,在沒有資源做完整測試的情況下,我們最初的方案就沒敢用這個網(wǎng)絡(luò)方案。但是最近測試自己測試的結(jié)果看,NAT的性能是可以接受的(QPS和Latency和VLAN的模式都比較接近),只要有合適的方案將不同主機的容器聯(lián)通就可。如用Mesos+Marathon+Bamboo+HAProxy的方式就可以的。
Linux Bridge VLAN模式
這是我考慮Docker網(wǎng)絡(luò)模型一開始就想決定好的,主要有幾方面的原因:
1、NAT的方式一開始不敢用
2、其它第三飯的工具還不太成熟
3、一開始容器的數(shù)量不可能太多(因為VLAN的模式受限于VLAN的整體數(shù)量,只能4096個容器),如果按照一個主機10-16個容器算,可以支持到256臺主機,這個還是可以接受的
4、每個主機需要一個獨立IP,并且可以互聯(lián)互通
5、運維管理要簡單,畢竟我們的運維體系還是物理機體系的
6、可以做到主機網(wǎng)絡(luò)和VLAN網(wǎng)絡(luò)的隔離
我們用的主機是CentosOS 7.X系列, 主機的網(wǎng)絡(luò)配置如下:兩個1G的網(wǎng)卡,通過Bond的方式綁在一起,然后配置主機一個虛擬網(wǎng)卡在VALN 1上,容器的Docker0的Bridge在另外一個VLAN 1上
網(wǎng)卡配置:
這里需要注意的是必須安裝了bridge-utils, NetworkManager包
步驟
配置兩個網(wǎng)卡,不要配置IP/GATEWAY等網(wǎng)絡(luò)參數(shù),增加MASTER=bond0以及SLAVE=yes
完整例子如:
TYPE=EthernetBOOTPROTO=noneDEFROUTE=yesPEERDNS=yesPEERROUTES=yesIPV4_FAILURE_FATAL=noIPV6INIT=noIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_PEERDNS=yesIPV6_PEERROUTES=yesIPV6_FAILURE_FATAL=noNAME=enp2s0f0UUID=7f6fa8e9-0177-46a8-b8ea-55c2187bea11DEVICE=enp2s0f0ONBOOT=yesMASTER=bond0SLAVE=yes
增加bond0網(wǎng)絡(luò)配置/etc/sysconfig/network-scripts/ifcfg-bond0,并根據(jù)使用情況選擇 mode值,內(nèi)容如下。因為要在bond0上再配置VLAN所以沒有配置IP等相關(guān)參數(shù)。如果配置了IP等參數(shù)則可以認(rèn)為bond0就是一個普通網(wǎng)卡了。
DEVICE=bond0NAME=bond0TYPE=BondBONDING_MASTER=yesONBOOT=yesBOOTPROTO=noneBONDING_OPTS="miimon=100 mode=0"
新聞熱點
疑難解答
圖片精選