Docker 网络之 ipvlan 和 macvlan

Docker ipvlan 和 macvlan

Docker 网络之 ipvlan 和 macvlan_第1张图片

 

引言

本文讲解了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 network
 docker network  create  -d ipvlan \
    --subnet=192.168.214.0/24 \
    --subnet=10.1.214.0/24 \
     -o ipvlan_mode=l3 ipnet210
 Test 192.168.214.0/24 connectivity
 docker run --net=ipnet210 --ip=192.168.214.10 -itd alpine /bin/sh
 docker run --net=ipnet210 --ip=10.1.214.10 -itd alpine /bin/sh
 Test L3 connectivity from 10.1.214.0/24 to 192.168.212.0/24
 docker run --net=ipnet210 --ip=192.168.214.9 -it --rm alpine ping -c 2 10.1.214.10
 Test L3 connectivity from 192.168.212.0/24 to 10.1.214.0/24
 docker 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 network
 docker network create -d ipvlan \
    --ipv6 --subnet=2001:db8:abc2::/64 --gateway=2001:db8:abc2::22 \
    -o parent=eth0.139 v6ipvlan139
 Start a container on the network
 docker run --net=v6ipvlan139 -it --rm alpine /bin/sh

Macvlan

macvlan 需要注意的点

  1. 网卡必须支持混杂模式
  1. 如果您的应用程序可以使用 bridge(在单个 Docker 主机上)或覆盖(跨多个 Docker 主机进行通信)工作,那么从长远来看,这些解决方案可能会更好。

Refer

IPvlan network driver | Docker Documentation

你可能感兴趣的:(云原生,docker)