Docker Linux VLAN 虛擬化 VPN LXD SDN

Docker容器進階管理 設置系統資源及互連VPN

2015-08-03
之前介紹過Docker透過Linux Namespace方式銜接實體網路取得外部對應IP位址的方式,也談到同一主機內透過預設的docker0主系統橋接介面可以進行互連,接著進行網路設定。本文將接力介紹Docker容器的進階管理技巧,包括不同主機之間Docker容器隔離獨立網路互連,以及如何限制Docker容器使用資源。
本期將探討不同主機之間Docker容器建立私有網路的互連,首先介紹的是利用Linux系統內建的VLAN技術,然後依序說明如何使用Open vSwitch GRE/VxLAN技術及Open vSwitch VLAN 技術。

不同主機之間Docker容器隔離獨立網路互連—使用Linux VLAN技術

本文將採用兩個VirtualBox的VM來模擬兩台不同主機,建議在VM設定網路卡時,將「混合模式」指定成【允許全部】,如圖1所示。


▲圖1 將VirtualBox的網路卡混合模式設定為【允許全部】。

在新版的iproute2套件中,已支援Linux Kernel中的vlan,因此可以在兩個CentOS的主機中分別執行如下指令:


執行指令後,就可以在enp0s3本機網路卡上建立一個vlan id為100的設備enp0s3.100,可使用「ip link」指令看到系統中已出現enp0s3.100這個設備,如圖2所示。


▲圖2 「enp0s3.100@enp0s3」即是用指令建立出來vlan id為100的enp0s3.100設備。

這裡的enp0s3指的是主機內接上網路的網路卡,兩個模擬的VirtuablBox VM網路卡都是enp0s3,一般在Linux常見的名稱是eth0或eth1,有些Linux發行版本如CentOS、Fedora則會依照設備的型態及順序來命名設備名稱,而不是使用傳統的eth開頭命名,因此可依照系統的狀況調整指令。

接著,在兩個主機內執行底下兩個指令以建立對外連線的橋接設備vbr0,並將vbr0啟動起來:


然後,再執行如下指令把在主機上剛建立的vlan設備enp0s3.100加到橋接設備vbr0中,並啟動剛才的enp0s3.100:


添加完成後,如圖3所示可使用「ip link」指令來檢視設定後的狀況。


▲圖3 建立的橋接設備vbr0及被加入到vbr0的vlan設備enp0s3.100。

從圖3可以看到enp0s3.100中顯示master為vbr0,這表示enp0s3.100已被加入到橋接設備vbr0內,vbr0及enp0s3.100這兩個設備的狀態也都在Up mode。另外要注意的是,因為對外還是會經過實體的enp0s3網卡,因此enp0s3網卡也須確認是在Up mode,但可不必指定IP位址。

接著開始設定容器內的網路,採用如同上一篇介紹Docker網路設定一樣指令,首先利用圖4中所示的「docker inspect -f '{{.State.Pid}}' debian71」指令在兩台主機查看欲連線的Docker容器的行程ID。


▲圖4 查詢容器的行程ID。

因為在啟動Docker容器前有使用「--name debian71」指定容器的名稱,才能使用容器的名稱來查詢容器的行程ID,如果容器沒有指定名稱,就得使用容器的識別ID進行查詢。

同時,此處debian71容器的網路是採用「--net=none」指定為不進行設定的狀態,這是因為稍後會用指令設定。

查到容器的行程ID後,再用底下的指令建立網路命名空間(Name Space)的對映目錄,並在對映目錄下將容器行程下網路命名空間連結過來:


以上指令中的「3034」為容器的行程ID,請換成符合自身環境的設定,最後對應到「/var/run/netns/」下的連結名稱,原本在上一篇Docker文章中同樣設定為容器的行程ID,這裡將其更換成與容器的名稱相同以便識別。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!