多主機Docker容器的VLAN劃分
阿新 • • 發佈:2017-08-29
targe spa ice -1 osc 接受 fail 調整 inf 工具(yum install -y bridge-utils)功能上豐富許多,如vlan功能與分布式功能。
原文發表於cu:2016-06-06
參考文檔:
- Docker網絡的4種模式,pipework/ovs的簡單使用等:http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-practice
- Dockerpool全文檔:https://yeasy.gitbooks.io/docker_practice/content/index.html
- Ovs完全使用手冊:http://my.oschina.net/tantexian/blog/648965?fromerr=C7Pp6sMs
ovs相對linux自身的brctl
本文主要驗證利用ovs的vlan功能實現跨主機的容器隔離與通信。
一.前置條件
1. 拓撲圖
2. 環境說明
- Host1/2為VMware ESXi中的vm host,安裝CentOS-7-x86_64-1511系統;
- 在宿主機Host1/2上各創建兩個Container,為Container創建eth1端口;
- Container的eth1端口連接到ovs網橋,ovs網橋對接container的端口分別劃分到vlan10/20;
- 宿主機Host1/2的網卡ens192分別橋接到各宿主機內部的
- 宿主機Host1/2的網卡ens192需要設置成混雜模式,並且對接的交換機端口設置為trunk端口。
- 網橋需要安裝bridge-utils包;
-
常規情況下,加入bridge網絡的宿主機網卡自動進入promiscuous mode,並進入forwarding state (可以使用dmesg查看);但如果宿主機是vm,需要註意調整宿主機的網卡為promiscuous mode,調整"偽傳輸"模式為"接受",對接虛擬網橋的端口為trunk端口。如VMware ESXi默認拒絕接受混雜模式下的數據包並且不對數據包打tag;偽傳輸"模式默認為"拒絕"表示出站數據的源mac地址不同於
3. pipework
#pipework本質是一個shell腳本實現,相對docker自身比較薄弱的網絡配置處理方式,其可以方便地對docker網絡進行配置。 [[email protected] ~]# cd /usr/local/ [[email protected] local]# git clone https://github.com/jpetazzo/pipework #可以使用軟連接,復制,或增加環境變量的多種方式將pipework設為可執行命令 [[email protected] local]# ln -s /usr/local/pipework/pipework /usr/local/bin/
一.多主機Docker容器的vlan劃分
以下操作沒有特別說明,都表示在Host1上操作,Host2按照Host1操作微調即可。
1. 啟動容器
#在Host1/2下啟動容器test1/2/3/4; #"--net=none"設置容器啟動不帶網絡,由後期自定義,關於容器網絡的模式請參考鏈接文檔1 [[email protected] ~]# docker run -itd --net=none --name test1 centoswithssh [[email protected] ~]# docker run -itd --net=none --name test2 centoswithssh [[email protected] ~]# docker ps
2. 為容器配置網絡
#用pipework添加ovs0網橋,test1網絡劃分到vlan10,test2網絡劃分到vlan20; #pipework本質是采用shell腳本簡化了ovs的操作,pipework及ovs的具體操作請參考鏈接文檔3; #這裏並沒有為ovs0網橋設置管理ip,可以根據需要設置,請參考鏈接1。 [[email protected] ~]# pipework ovs0 test1 192.168.1.11/24 @10 [[email protected] ~]# pipework ovs0 test2 192.168.1.12/24 @20 [[email protected] ~]# ovs-vsctl show [[email protected] ~]# docker exec -it test1 ifconfig
3. 為網橋添加宿主機網卡
#Host1與Host2中的容器需要通信,需要把兩邊的網絡打通,即將宿主機網卡添加到虛擬網橋中 [[email protected] ~]# ovs-vsctl add-port ovs0 ens192 [[email protected] ~]# ovs-vsctl show
4. 驗證
[[email protected] ~]# docker exec -it test1 ping 192.168.1.12 [[email protected] ~]# docker exec -it test1 ping 192.168.1.13 [[email protected] ~]# docker exec -it test1 ping 192.168.1.14 [[email protected] ~]# docker exec -it test2 ping 192.168.1.13 [[email protected] ~]# docker exec -it test2 ping 192.168.1.14
預期:
- test1 ping test2: fail
- test1 ping test3: success
- test1 ping test4: fail
- test2 ping test3: fail
- test2 ping test4: success
根據驗證結果顯示,結果符合預期,請見截圖:
多主機Docker容器的VLAN劃分