Docker ipvlan 和 macvlan
?
引言
本文講解了Docker 網絡模式中的 ipvlan 和 macvlan 的區別,目前自己在生產環境中使用的 ipvlan 模式非常問題.也解決了實際業務問題.
IPvlan L2 mode example
ipvlan 無需網卡混雜模式 , 運行如下命令后可以生成一個 vlan 子接口 , 會和主網卡共享 mac 地址
創建ipvlan 網絡
docker network create -d ipvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0.10 ipvlan10
注: 就算有 DHCP 也必須指定 subnet 和 gateway , 不然默認會分配成 172.的地址.
-o ipvlan_mode= Defaults to L2 mode if not specifie
運行容器
docker run -it --rm --net=ipvlan124 networkstatic/iperf3 -c 10.0.0.200
IPvlan L3 mode example
關鍵點: IPvlan L3 模式會丟棄所有廣播和多播流量。
不要求gateway 參數, 3 層默認互通 , 不要求 parent 接口
看下面例子就懂了
Create the IPvlan L3 networkdocker network create -d ipvlan \--subnet=192.168.214.0/24 \--subnet=10.1.214.0/24 \-o ipvlan_mode=l3 ipnet210Test 192.168.214.0/24 connectivitydocker run --net=ipnet210 --ip=192.168.214.10 -itd alpine /bin/shdocker run --net=ipnet210 --ip=10.1.214.10 -itd alpine /bin/shTest L3 connectivity from 10.1.214.0/24 to 192.168.212.0/24docker run --net=ipnet210 --ip=192.168.214.9 -it --rm alpine ping -c 2 10.1.214.10Test L3 connectivity from 192.168.212.0/24 to 10.1.214.0/24docker run --net=ipnet210 --ip=10.1.214.9 -it --rm alpine ping -c 2 192.168.214.10
Inside an L3 mode container$ docker exec 36bbb711cb0d ip route
default dev eth0 scope link
192.168.214.0/24 dev eth0 scope link src 192.168.214.10$ docker exec 0aff00099717 ip route
default dev eth0 scope link
10.1.214.0/24 dev eth0 scope link src 10.1.214.10
Dual stack IPv4 IPv6 IPvlan L2 mode
Create a v6 networkdocker network create -d ipvlan \--ipv6 --subnet=2001:db8:abc2::/64 --gateway=2001:db8:abc2::22 \-o parent=eth0.139 v6ipvlan139Start a container on the networkdocker run --net=v6ipvlan139 -it --rm alpine /bin/sh
Macvlan
macvlan 需要注意的點
- 網卡必須支持混雜模式
- 如果您的應用程序可以使用 bridge(在單個 Docker 主機上)或覆蓋(跨多個 Docker 主機進行通信)工作,那么從長遠來看,這些解決方案可能會更好。
Refer
IPvlan network driver | Docker Documentation