如何将 Docker 网络接口与 Linux 主机上的 Linux 网络接口 (eth5) 关联?

如何将 Docker 网络接口与 Linux 主机上的 Linux 网络接口 (eth5) 关联?

我的 Linux 主机有 8 个以太网接口,eth0 - eth7。我在这个 Linux 主机上运行三个 Docker 1.9 容器。
如何将一个 Docker 容器内的网络接口与主机上第 3 层(IP 层)的特定 Linux 物理网络接口(例如 eth5)关联起来?

在第 3 层连接的原因是:
1. 能够使用 DHCP 配置 Docker 网络接口

2. 将主机物理接口 (eth5) 上的所有传入 IP 流量转发到关联的 Docker 接口(我不想使用 NAT 进行端口映射,这会将仅特定 TCP/UDP 端口的流量定向到 Docker 接口)

基本上,如何将 Docker 网络接口连接到第 3 层/第 2 层的特定 Linux(主机)网络设备(例如 eth5)?

答案1

有多种方法可以做到这一点:

  1. 使用 Linux 桥接器 (brctl)

  2. 使用 Open vSwitch(ovs-vsctl)

  3. 使用 MACVLAN

  4. 使用 IPVLAN(在 3.19 内核中引入,但直到 4.2 或更高版本才稳定)

MACVLAN 和 IPVLAN 均作为 Linux 内核模块得到支持

MACVLAN:这使得创建“附着在”物理网络接口上的虚拟网络接口成为可能(eth5在上述问题中)。每个虚拟接口都有自己的 MAC 地址 - 与物理接口的 MAC 地址不同。发送到虚拟接口或从虚拟接口发送的帧将映射到物理接口。

虽然在 Linux 下,一个接口可以有多个地址,但 MACVLAN 可以进一步隔离此类接口上可以看到的流量。MACVLAN 只能看到具有与该接口匹配的 MAC 地址的流量,从而防止其他接口上的进程/容器监听发往另一个 MACVLAN 的流量。

IPVLAN:概念上与 macvlan 驱动程序非常相似,但有一个主要区别,即它使用 L3 在从属设备之间进行复用/解复用。主设备与其从属设备共享 L2 MAC。这允许从主接口创建虚拟设备,并根据数据包上的目标 L3 IP 地址传送数据包。所有接口(包括主接口)共享 L2,使其对连接的 L2 交换机透明。

对于 IPVLAN,规范文档是: https://github.com/torvalds/linux/blob/master/Documentation/networking/ipvlan.txt

目前 Docker 在实验版本中支持 MACVLAN 和 IPVLAN;它们很快就会进入 GA 阶段

有关 MACVLAN 和 IPVLAN 的更多信息(包括特定命令),请参阅 Brent Salisbury 的精彩博客文章: http://networkstatic.net/configuring-macvlan-ipvlan-linux-networking/

相关内容