天天看點

Docker 使用 macvlan 實作跨主機網絡通信

一、背景

       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
Docker 使用 macvlan 實作跨主機網絡通信

       Host 2:

  # docker run -it --ip=10.20.14.151 --network=mac_net1 busybox sh
Docker 使用 macvlan 實作跨主機網絡通信

       我們從 Host 1 内的容器 ping Host 2 内的容器

Docker 使用 macvlan 實作跨主機網絡通信

        可以看到通信正常!

        一個 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
Docker 使用 macvlan 實作跨主機網絡通信

繼續閱讀