可以在Linux(docker,openvswitch)的两个网络接口之间建立桥梁

时间:2018-07-30 07:54:20

标签: linux docker network-programming openvswitch

首先,我不擅长网络编程和英语。

我想创建新的网桥来替代docker默认网桥以限制出口带宽。

我试图使用tc来控制容器的出口带宽。

经过几次尝试,我认为要限制容器出口带宽,tc必须在容器中运行。但是在我的环境中,这是不允许的。

所以我考虑过使用openvswitch(ovs)。

但是请创建ovs桥,因为docker默认桥不起作用。

因此,我使用选项--net = none创建了docker容器,并将ovs veth对等连接到容器。它可以工作,但是某些功能受到限制,例如在docker stats中看不到网络I / O。

主要问题在下面。

我想使用docker default bridge“ docker0”和ovs限制容器的出口带宽。

enter image description here

我的想法是创建ovs桥并定位在eth0和docker0之间。但是我没有任何知识可以判断这个想法是否可以实现。

这个想法是否有可能实现?

如果是,请让我知道我应该学习什么才能起作用。

如果tc可以用于限制容器出口带宽,请教我。

1 个答案:

答案 0 :(得分:1)

可以在Linux中创建任何时髦的桥链:

诀窍是如何将桥连接在一起。有两种选择: 1)在OVS中使用所谓的“补丁”链接类型(仅在两个OVS桥接器之间工作)。 (第一个在互联网上找到有关此内容的文章:https://blog.scottlowe.org/2012/11/27/connecting-ovs-bridges-with-patch-ports/

2)连接任意两个网桥的通用方法(甚至是带有br-tools的OVS或任何其他类似网桥的东西):使用veth。

Veth是一个虚拟的以太网接口:创建时,它会同时创建两个接口(例如veth0veth1)。来自veth0的所有进入veth1的流量,来自veth1的所有进入veth0的流量。您可以将veth0插入您的docker0网桥中,并将veth1插入您选择的网桥中(假设mybrige)。

执行此操作的命令:

ip link add type veth  # check out ip link list command to see new interfaces
ip link set up dev veth0 # names may be different
ip link set up dev veth1
ovs-vsctl add-br mybridge
ovs-vsctl add-port mybridge veth0
ovs-vsctl add-port mybrige eth0
brctl addif docker0 veth1 # I'm not sure what kind of bridge docker uses, may be it's ovs-vsctl add-port docker0 veth1

奖励事实:veth是正确的linux eth接口,可以根据需要对其进行整形/过滤。