一、網(wǎng)絡(luò)虛擬化技術(shù)介紹
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比環(huán)翠網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式環(huán)翠網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋環(huán)翠地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。1、什么是虛擬化網(wǎng)絡(luò)
虛擬化網(wǎng)絡(luò)即由linux內(nèi)核所虛擬出來的網(wǎng)絡(luò),事實(shí)上,linux內(nèi)核可模擬多種網(wǎng)絡(luò)設(shè)備
可模擬網(wǎng)線設(shè)備:模擬的網(wǎng)線設(shè)備是成對出現(xiàn)的,一個(gè)可用在容器內(nèi),一端用在交換機(jī)內(nèi)
可模擬交換機(jī):容器接在這個(gè)交換機(jī)上,如果IP在同一網(wǎng)段,就可以實(shí)現(xiàn)互相通信,如下
網(wǎng)絡(luò)虛擬化的解決方案有很多,例如:
OVS
SDN
在物理機(jī)上可以有多個(gè)虛擬交換機(jī),容器可以分別接在不同的虛擬交換機(jī)上,如果兩個(gè)虛擬交換機(jī)不在同一個(gè)網(wǎng)段,那么如何進(jìn)行通信呢?
?
此時(shí)需要進(jìn)行轉(zhuǎn)發(fā)
可借助于內(nèi)核轉(zhuǎn)發(fā)
也可以借助于iptables轉(zhuǎn)發(fā)
2、如何實(shí)現(xiàn)兩個(gè)物理機(jī)上的容器怎么通信?
方法1:是橋接模式(比如vmware的橋接)
橋接模式情況下,物理網(wǎng)卡會作為交換機(jī)來使用的
所有虛擬機(jī)都接入到這個(gè)物理網(wǎng)卡所模擬的交換機(jī)
然后在模擬出來一個(gè)網(wǎng)卡給物理機(jī)使用,這個(gè)模擬的網(wǎng)卡也接入到交換機(jī)上
當(dāng)有數(shù)據(jù)包過來的時(shí)候,物理機(jī)網(wǎng)絡(luò)會判斷目標(biāo)mac
如果是vm1,就將這個(gè)數(shù)據(jù)包轉(zhuǎn)發(fā)到vm1
如果是物理機(jī)自己的mac地址,那就就將這個(gè)報(bào)文轉(zhuǎn)發(fā)給內(nèi)部虛擬的網(wǎng)卡
不同主機(jī)上的容器,可以用橋接的方式來實(shí)現(xiàn)通信,就是將物理網(wǎng)卡作為交換機(jī)
注意:
橋接模式,代價(jià)是很大的,尤其在一個(gè)大規(guī)模部署的場景中,這樣做的結(jié)果就一定會導(dǎo)致網(wǎng)絡(luò)中的主機(jī)過多,導(dǎo)致風(fēng)暴。
方法2:NAT模式
在nat模式場景下,每個(gè)容器都還是接入在一個(gè)虛擬交換機(jī),并且容器的網(wǎng)關(guān)需要指向這個(gè)交換機(jī)的地址,
當(dāng)容器產(chǎn)生數(shù)據(jù)包的時(shí)候,這個(gè)數(shù)據(jù)就會發(fā)送到虛擬機(jī)換機(jī)上
虛擬交換機(jī)是由內(nèi)核模擬的是,所以這個(gè)數(shù)據(jù)包會被內(nèi)核收到
內(nèi)核就會檢查發(fā)現(xiàn)目標(biāo)主機(jī)是不是自己,如果不是自己,那么就會將這個(gè)數(shù)據(jù)包從網(wǎng)卡發(fā)送出去,這樣就完成了數(shù)據(jù)的發(fā)送。
注意:此時(shí)的問題問題是雖然能將數(shù)據(jù)發(fā)送出去,但是回不來
因?yàn)镃所發(fā)送出去的數(shù)據(jù)包的源地址是C1,而這個(gè)地址被交換機(jī)隱藏起來的是,網(wǎng)絡(luò)中的其他主機(jī)是找不到這個(gè)地址的,所以,回不來。
如果想讓數(shù)據(jù)可以正常的回復(fù),就需要在H1主機(jī)上,在發(fā)送數(shù)據(jù)包的時(shí)候,將數(shù)據(jù)包的源地址修改成H1主機(jī)的地址,同時(shí)記錄下來這個(gè)轉(zhuǎn)發(fā)規(guī)則。
這樣,當(dāng)回復(fù)數(shù)據(jù)的時(shí)候,只需要將數(shù)據(jù)回復(fù)給H1主機(jī),H1主機(jī)通過檢查地址轉(zhuǎn)換表,就知道了需要將這個(gè)數(shù)據(jù)包轉(zhuǎn)發(fā)給C1了。
以上兩種方式都存在各自的問題
橋接方式:容器需要直接暴露在網(wǎng)絡(luò)中,容器太多的時(shí)候,容器形成風(fēng)暴
NAT方式:容器基于nat進(jìn)行通信,而且需要進(jìn)行兩次地址轉(zhuǎn)換,效率太低
方法3:疊加網(wǎng)絡(luò)(Overlay network),這種網(wǎng)絡(luò)是基于隧道模式實(shí)現(xiàn)的
隧道模式下,也需要模擬一個(gè)交換機(jī),而且容器也是接在交換機(jī)上,如下圖
此時(shí)在進(jìn)行數(shù)據(jù)發(fā)送的時(shí)候,不會修改數(shù)據(jù)包的源IP 源mac,而是在會原來數(shù)據(jù)包的基礎(chǔ)上再封裝一層ip和mac
二、Docker網(wǎng)絡(luò)詳解
1、Docker的三種網(wǎng)絡(luò)
[root@host1?~]#?docker?network?ls NETWORK?ID??????????NAME????????????????DRIVER??????????????SCOPE 591c75b7dbea????????bridge??????????????bridge??????????????local 386d8dc4beb8????????host????????????????host????????????????local eb7b7cf29f29????????none????????????????null????????????????local2、bridge就是橋接模式
這個(gè)橋并不是物理網(wǎng)卡的橋,而是創(chuàng)建了一個(gè)純軟件的交換機(jī)叫做docker0
可以用ip addr或者ip link show看到
啟動一個(gè)容器
[root@host1?~]#?docker?run?--rm?--name?vh2?-it?busybox /?#此時(shí)物理機(jī)會多出一個(gè)網(wǎng)卡設(shè)備
[root@host1?~]#?ip?addr 1:?lo:?這個(gè) veth7c1728b@if5 其實(shí)就是所生成的一對網(wǎng)卡中,連接到docker0網(wǎng)橋上的那一部分
也就是可以理解三個(gè)容器將網(wǎng)線插入到了交換機(jī)上
網(wǎng)卡中 @?前面的部分是接入到虛擬機(jī)交換機(jī)中的部分
網(wǎng)卡中 @ 后面的部分是容器的部分了
在容器中看一下網(wǎng)卡信息
/?#?ip?addr可以通過brctl開控制和查看物理機(jī)網(wǎng)卡和容器網(wǎng)卡的對應(yīng)關(guān)系
[root@host1?~]#?yum?install?bridge-utils?-y [root@host1?~]#?brctl?show bridge?namebridge?idSTP?enabledinterfaces docker08000.0242a4e84411noveth7c1728b其實(shí)在使用了Docker0網(wǎng)橋的時(shí)候,系統(tǒng)是會自動生成一個(gè)iptables規(guī)則的【POSTROUNTING規(guī)則】
[root@host1?~]#?iptables?-L?-n?--line?-t?nat Chain?PREROUTING?(policy?ACCEPT) num??target?????prot?opt?source???????????????destination????????? 1????DOCKER?????all??--??0.0.0.0/0????????????0.0.0.0/0????????????ADDRTYPE?match?dst-type?LOCAL Chain?INPUT?(policy?ACCEPT) num??target?????prot?opt?source???????????????destination????????? Chain?OUTPUT?(policy?ACCEPT) num??target?????prot?opt?source???????????????destination????????? 1????DOCKER?????all??--??0.0.0.0/0???????????!127.0.0.0/8??????????ADDRTYPE?match?dst-type?LOCAL Chain?POSTROUTING?(policy?ACCEPT) num??target?????prot?opt?source???????????????destination????????? 1????MASQUERADE??all??--??172.17.0.0/16????????0.0.0.0/0??????????? Chain?DOCKER?(2?references) num??target?????prot?opt?source???????????????destination????????? 1????RETURN?????all??--??0.0.0.0/0????????????0.0.0.0/0docker的客戶端來源有三種
宿主機(jī):例如在宿主機(jī)上訪問容器中的網(wǎng)站
同一宿主機(jī)上的其他容器:兩個(gè)容器接在同一個(gè)物理機(jī)的同一個(gè)交換機(jī)上,必然可以通信
其他宿主機(jī)或者其他宿主機(jī)上的容器:這種情況下需要通過nat方式或者疊加網(wǎng)絡(luò)的方式通信
3、host模式
一個(gè)容器中要隔離6類名稱空間
user
mount
pid
uts
net
ipc
思考:有三個(gè)容器,這個(gè)三個(gè)容器只隔離三個(gè)名稱空間 user mount pid,而另外三個(gè)是容器共享的,會是什么現(xiàn)象,如下圖
此時(shí),各個(gè)容器有自己文件系統(tǒng)、用戶信息和進(jìn)程信息,并且是互不干擾的
但是多個(gè)容器的主機(jī)名、網(wǎng)卡、協(xié)議棧是共享的,也就是主機(jī)名、地址都是相同的
這樣一來,一個(gè)容器訪問另一個(gè)容器的上的資源的時(shí)候,直接用12.0.0.1就可以了
比如一個(gè)容器安裝的apache,一個(gè)安裝了mysql,一個(gè)安裝了php,那么這三個(gè)主機(jī)互相通信,就完全可以基于127地址來完成,因?yàn)樗麄冇玫氖峭粋€(gè)協(xié)議棧。
讓容器共享物理機(jī)的名稱空間
容器共享物理機(jī)的網(wǎng)卡名稱空間,這樣的話就是如果在容器中修改網(wǎng)卡,那么就會修改物理機(jī)的網(wǎng)卡的。
這種模式就是docker 網(wǎng)絡(luò)中的第二類:host,也就是讓容器使用宿主機(jī)的網(wǎng)絡(luò)名稱空間
4、NULL模式
docker 網(wǎng)絡(luò)中的第三類:null
如果一個(gè)容器的的網(wǎng)絡(luò)設(shè)置成null網(wǎng)絡(luò),那么也就是說這個(gè)容器是沒有網(wǎng)絡(luò),有的時(shí)候需要創(chuàng)建一個(gè)容器不需要和外部主機(jī)通信,那么就可以用這種方式。
5、容器模型分類示意圖
關(guān)閉模型容器(closed)
橋解模型容器(bridged),這個(gè)橋是nat橋,不是物理橋,而且該模式是默認(rèn)模式
聯(lián)盟模型容器(joined)
開放模型容器(open)
6、查看創(chuàng)建容器的時(shí)網(wǎng)絡(luò)信息
查看一下 bridged 網(wǎng)絡(luò)模型信息
[root@host1?~]#?docker?network?inspect?bridge ????????... ????????... ????????????????????"Subnet":?"172.17.0.0/16", ????????????????????"Gateway":?"172.17.0.1" ????????... ????????... ????????... ????????????"com.docker.network.bridge.name":?"docker0", ????????...查看容器的網(wǎng)絡(luò)類型
[root@host1?~]#?docker?container?inspect?vh2 ????????... ????????... ????????... ????????"NetworkSettings":?{ ????????????"Bridge":?"", ????????... ????????... ????????...另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。