之前介紹過Docker透過Linux Namespace方式銜接實體網路取得外部對應IP位址的方式,也談到同一主機內透過預設的docker0主系統橋接介面可以進行互連,接著進行網路設定。本文將接力介紹Docker容器的進階管理技巧,包括不同主機之間Docker容器隔離獨立網路互連,以及如何限制Docker容器使用資源。
而一般iptables的指令則是「iptables -I INPUT -p udp -m udp --dport 8472 -j ACCEPT」。
開啟後,同樣可以進入容器中用ping測試是否連通,或者不進入容器在主機內指揮網路命名空間以執行「ip netns exec debian71 ping 192.168.56.22」指令的方式來測試容器是否已經連通。
若想要拿掉GRE或是VxLAN通道,則只要執行以下的指令即可:
第一個指令是拿掉GRE通道,第二個指令則是拿掉VxLAN通道,而為了替接下來介紹Open vSwitch VLAN技術進行準備,同時也執行「ovs-vsctl del-port vethh0」指令將vethh0由ovsbr0中移除。
不同主機之間Docker容器隔離獨立網路互連—使用Open vSwitch VLAN技術
介紹過Open vSwitch GRE及VxLAN技術後,接著介紹如何使用Open vSwitch VLAN技術連接多主機內的容器,因為要讓Open vSwitch的設備ovsbr對外可以相通,因此接著使用指令「ovs-vsctl add-port enp0s3 ovsbr0」將對外連線的網路卡enp0s3加到ovsbr0裡面。同樣可以利用「ovs-vsctl show」指令檢視加入的狀況,如圖13所示。
|
▲圖13 使用「ovs-vsctl show」指令檢視對外網路卡enp0s3加入ovsbr0的狀況。 |
然後仿照前面的步驟,利用Linux網路命名空間設定好容器的虛擬網路對應設備(veth),在前面保留了原本的主機端vethh0及容器端的vethc0,容器內設定的IP位址兩主機也保留為192.168.56.21與192.168.56.22。
因此,在確認vethh0和vethc0都是在Up mode之後,執行「ovsvsctl add-port ovsbr0 vethh0 tag=100」指令,將容器的主機端對應設備vethh0加入至Open vSwitch橋接設備ovsvr0內,而該命令中的「tag=100」表示加入到vlan id為100的虛擬網路之中。
添加完成後,可使用「ovs-vsctl show」檢視設定狀況,如圖14所示。
|
▲ 圖14 使用「ovs-vsctl show」指令檢視Open vSwitch中tag為100的vlan設定狀況。 |
此時,再使用「docker exec -t -i debian71 /bin/bash」指令進入容器中,便可利用ping指令測出容器已經由Open vSwitch所建立vlan id為100的網路連通起來了。
採用Docker設定工具—Pipework
在前面設定容器網路的時候,需要先建立Linux的網路命名空間並且使用iproute2指令一步一步設定,雖然可以清楚了解到整個Docker容器設定的原理,但執行步驟比較麻煩。這裡介紹一個可以較快速設定的工具「Pipework」,Pipework的官方網站位址是「https://github.com/jpetazzo/pipework」,如圖15所示。
|
▲圖15 Pipework的官方網站。 |
Pipework官方網站上就有詳細的使用說明,只要下載檔名為pipework的檔案,並且設定好執行權限就可以使用。
Pipework本身是用Shell Script寫成,它簡化了指令設定的步驟,只要提供相關如網路位址、網路遮罩、欲設定的容器名稱、銜接的橋接設備名稱即可,譬如執行底下這個指令:
Pipework會幫debian71建起一個在debian71容器內部名稱為eth1的設備,並將eth1的網址設為192.168.1.2,網路遮罩設為24(255.255.255.0),當然eth1也會有對應的主機端設備,而這對應的主機端設備會被加入到名為br1的橋接設備中,若br1橋接設備不存在,則會自動建立。
倘若不喜歡預設的eth1容器內部網路設備名稱,則可以使用-i選項來指定想要的設備名稱,相關指令如下:
執行之後,指令便將建立在容器內的網路設備命名為eth2,而除了指定網路位址外,也可以藉由Pipework指定預設閘道(Default Gateway),指令內容如下:
該指令透過銜接在網路遮罩後的at(@)字元指定設定容器的網路閘道為192.168.1.254。也可以選擇不指定容器的IP位址,指令如下:
或是,告訴容器啟動dhcp客戶端去取得IP位址:
理所當然地,容器中要有相關的dhcp客戶端程式存在,指令中呼叫的是dhclient客戶端,而Pipework支援dhclient、udhcpc、udhcpcd、dhcp等不同的dhclient客戶端。
另外,Pipework也可搭配Open vSwitch進行VLAN的設定,如下指令:
這個指令便是將主機搭配容器的網路介面附加到以Open vSwitch所建置的橋接設備ovsbr1上,然後將容器裡建起來搭配的網路介面eth1網址設為192.168.1.2,遮罩為24,預設閘道為192.168.1.254,最後的@100表示加到Open vSwitch所建立vlan id為100的網路上。