这可能会更容易用图表来解释,所以这是基本设置:
有 2 个容器10.0.0.1和10.0.0.2在主机内运行,我还创建了一个 linux 桥br0。
每个容器都将其自己的网络接口视为 eth0,但主机将其视为vethxxxx。查看基本设置中的图片,容器之间没有连接。
我可以轻松地使用brctl addif将两个 veth 接口添加到网桥中,它们将能够立即进行通信,但这并不是我想要做的。
我想做的是能够对容器之间的转发进行更精细的控制;模拟由主机控制的br0上的托管开关。如果这些是物理机器,我相信这可以使用 nmcli 来完成,例如:
nmcli connection add type ethernet slave-type bridge con-name br0-port1 ifname <port name> master br0
然后将机器的电缆连接到该命令中使用的端口。
有没有办法有效地虚拟实现相同的设置(如图片#3)?
您不能将 veth 接口“附加”到网桥端口;您可以通过将其添加到网桥来使其成为网桥端口。
veth 接口实际上是在一对端口之间运行的虚拟以太网电缆。您通常在容器上下文中使用它们的方式是“电缆”的一端
eth0
进入容器内部,另一端作为桥接端口添加,因此您最终得到:linux 网桥设备的作用类似于托管交换机,您可以配置每个端口的 vlan、控制每个端口的 stp 等。