Docker 使用 macvlan 实现跨主机网络通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shida_csdn/article/details/84994394

一、背景

       macvlan 本身是 linux kernel 模块,是一种网卡虚拟化技术;

       它允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP

       macvlan 的最大优点是性能极好,它不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络。

二、实验容器 macvlan 网络

       因为我们需要模拟跨主机容器通信,因此需要两台机器,每个机器拥有自己的网卡,连到同一网络

       首先,分别开启两台机器网卡的混杂模式 (注意替换 ens160 为你的实际物理网卡接口名称)

       如果你使用的虚拟机,注意在虚拟机网络设置也要打开允许混杂模式选项

  # ip link set ens160 promisc on

        然后,分别在两台机器上创建容器 macvlan 网络

  # docker network create -d macvlan --subnet=10.20.14.0/24 --gateway=10.20.14.254 -o parent=ens160 mac_net1

       这里的网络信息跟物理网卡所在网络信息一致,parent 指明使用的物理网卡接口

       然后,分别在两台机器上运行容器,使用 macvlan 网络

       Host 1:

  # docker run -it --ip=10.20.14.150 --network=mac_net1 busybox sh

       

       Host 2:

  # docker run -it --ip=10.20.14.151 --network=mac_net1 busybox sh

        

       我们从 Host 1 内的容器 ping Host 2 内的容器

        

        可以看到通信正常!

        一个 interface 只能创建一个 macvlan,如果想在一块物理网卡创建多个 macvlan,可以使用 sub-interface

        我们使用类似如下命令创建 sub-interface 设备

   # ip link add link ens160 name ens160.1 type vlan id 1
   # ip addr add 10.20.14.226/24 brd 10.20.14.255 dev ens160.1
   # ip link set dev ens160.1 up

        删除命令:

   # ip link set dev ens160.1 down
   # ip link delete ens160.1

       查看设备:

   # ip addr

       

猜你喜欢

转载自blog.csdn.net/shida_csdn/article/details/84994394