(轉) docker跨主機 macvlan 網絡配置


原文鏈接

https://github.com/alfredhuang211/study-docker-doc/blob/master/docker%E8%B7%A8%E4%B8%BB%E6%9C%BAmacvlan%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE.md#搭建環境

 

-----以下部分轉自原文-----

搭建環境

  • virtualbox, ubuntu14.04.4 內核4.2.0 docker 1.12.0-rc1

  • virtualbox上運行兩套主機系統,設置使用橋接模式,網卡混雜模式開啟全部允許.

  • 主機上配置的eth0網口或者創建的vlan網口,均需要開啟混雜模式,命令 ip link set eth0 promisc on ip link set eth0.100 promisc on

注意 : 如果不開啟混雜模式,會導致macvlan網絡無法訪問外界,具體在不使用vlan時,表現為無法ping通路由,無法ping通同一網絡內其他主機

 

搭建過程1-不使用vlan

1. 創建docker macvlan網絡

兩台主機上 eth0 使用分別為 192.168.15.75/192.168.15.21. 分別在兩台主機上使用相同命令 docker network create -d macvlan --subnet=192.168.15.0/24 --gateway=192.168.15.1 -o parent=eth0 -o macvlan_mode=bridge eth0_1 創建eth0_1的macvlan網絡.

2. 創建容器

主機1 運行容器 使用命令:

docker run --net=eth0_1 --ip=192.168.15.101 -id --name test101 busybox sh

docker run --net=eth0_1 --ip=192.168.15.102 -id --name test102 busybox sh

主機2 運行容器 使用命令:

docker run --net=eth0_1 --ip=192.168.15.201 -id --name test201 busybox sh

docker run --net=eth0_1 --ip=192.168.15.202 -id --name test202 busybox sh

3. 測試網絡

主機1上測試:

運行命令:

docker exec test101 ping 192.168.15.1 ping網關: 通

docker exec test101 ping test102 使用容器名ping本主機容器: 通

docker exec test102 ping 192.168.15.101 ping本主機容器: 通

docker exec test102 ping 192.168.15.199 ping本網絡其他主機: 通

docker exec test101 ping 192.168.15.201 ping另一主機容器: 通

docker exec test101 ping test201 使用容器名ping另一主機容器: 不通

ping 192.168.15.101 本主機ping本主機容器: 不通

ping 192.168.15.201 本主機ping另一主機容器: 通

主機2上測試獲取相同結果.

 

 

搭建過程2-使用vlan

1. 創建vlan

使用命令vconfig add eth0 100 創建eth0.100的vlan.設置兩台主機的vlan ip分別為192.168.100.50/192.168.100.51

2. 創建docker macvlan網絡

分別在兩台主機上使用命令 docker network create -d macvlan --subnet=192.168.100.0/24 --gateway=192.168.100.1 -o parent=eth0.100 -o macvlan_mode=bridge 100_1 創建相同的100_1的macvlan網絡.

3. 創建容器

主機1 運行容器 使用命令:

docker run --net=100_1 --ip=192.168.100.101 -id --name test100.101 busybox sh

docker run --net=100_1 --ip=192.168.100.102 -id --name test100.102 busybox sh

主機2 運行容器 使用命令:

docker run --net=100_1 --ip=192.168.100.201 -id --name test100.201 busybox sh

docker run --net=100_1 --ip=192.168.100.202 -id --name test100.202 busybox sh

4. 測試網絡

主機1上測試:

運行命令:

docker exec test100.101 ping 192.168.100.1 ping網關: 不通

docker exec test100.101 ping 192.168.100.50 ping本地eth0.100地址: 不通

docker exec test100.101 ping 192.168.100.51 ping另一個主機的eth0.100地址:通

docker exec test100.101 ping 192.168.100.102 ping本主機容器: 通

docker exec test100.101 ping 192.168.100.201 ping另一主機容器: 通

docker exec test100.101 ping test100.102 使用容器名ping本主機容器: 通

docker exec test100.101 ping test100.201 使用容器名ping另一主機容器: 不通

docker exec test100.101 ping 192.168.15.199 ping跨網絡主機: 不通

ping 192.168.100.101 本主機ping本主機容器: 不通

ping 192.168.100.201 本主機ping另一主機容器: 通

主機2測試相同

 

 

一些問題

macvlan網絡在創建時要指定parent.其中parent僅能使用一次,即eth0在創建一個macvlan網絡時使用了,則在創建另一個的時候就無法再使用了.

在創建macvlan的時候,如果不指定網段,默認網段為172.18.0.0/16, 此時加入此網絡的容器,在同一台主機上時可以互相ping通,無法ping通外部網絡,同時加入此網絡的容器,創建時不能手工指定ip,僅能使用ipam自動分配.

在使用和主機相同網段的macvlan時,如果在創建容器時不指定ip,則默認ipam從192.168.15.2開始分配,不檢查網段內是否已有相同ip,這種情況下會造成容器ip和網絡內其他設備ip沖突.具體情況可看如下:

root@ubuntu:~# arp -a 192.168.15.5 bogon (192.168.15.5) at 00:17:61:12:0b:d1 [ether] on eth0 root@ubuntu:~# root@ubuntu:~# root@ubuntu:~# arp -a 192.168.15.5 bogon (192.168.15.5) at 02:42:c0:a8:0f:05 [ether] on eth0

如上是在創建的容器對網關ping之前和ping之后查看的arp,可以看到發生了ip沖突

 

相關鏈接

http://t.cn/RXYNXqK
http://t.cn/RXQU43D
http://hustcat.github.io/docker-macvlan/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM