1. 程式人生 > >Docker 使用 macvlan 實現跨主機網路通訊

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

       

       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