linux - 可以在 linux (docker, openvswitch) 中的两个网络接口之间建立桥梁
问题描述
首先,我不擅长网络编程和英语。
我想创建新网桥来替代 docker 默认网桥以限制输出带宽。
我尝试使用 tc 来控制容器的出口带宽。
经过几次尝试,我认为要限制容器出站带宽,tc 必须在容器中运行。但在我的环境中,这是不允许的。
所以我考虑使用openvswitch(ovs)。
但是创建 ovs 网桥,因为 docker 默认网桥不起作用。
所以我使用选项 --net=none 创建了 docker 容器,并将 ovs veth peer 附加到容器。它可以工作,但是某些功能受到限制,例如在 docker stats 中看不到网络 I/O。
主要问题如下。
我想使用 docker 默认网桥“docker0”和 ovs 来限制容器的出口带宽。
我的想法是创建 ovs 桥并位于 eth0 和 docker0 之间。但是我没有任何知识来判断这个想法是否可以实施。
这个想法有可能实现吗?
如果是,请让我知道我应该学习什么才能工作。
如果 tc 也可以用于限制容器出口带宽,请教我。
解决方案
可以在 Linux 中创建任何时髦的桥链:
诀窍是如何将桥梁连接在一起。有两种选择: 1) 在 OVS 中使用所谓的“补丁”链接类型(仅在两个 OVS 网桥之间工作)。(在互联网上找到的第一篇关于此的文章:https ://blog.scottlowe.org/2012/11/27/connecting-ovs-bridges-with-patch-ports/ )
2)连接任何两个桥的通用方法(甚至是带有 br-tools 的 OVS,或任何其他类似桥的东西):使用 veth。
Veth 是一个虚拟以太网接口:当您创建它时,它会同时创建两个接口(feveth0
和veth1
)。所有进出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 接口,可以根据需要对其进行整形/过滤。
推荐阅读
- apache-spark - greenplum spark connector,format("jdbc") ok,format("greenplum") 关系不存在
- php - PHPMail 方法在带有 LAMPP 的 ubuntu 中不起作用
- security - 如何延长 python 的 CachingInteractiveBrowserCredential 返回的天蓝色令牌的过期时间?
- wpf - WPF ListView 列宽
- python-3.x - 将字符串转换为 matplotlib 日期以进行绘图
- javascript - 有没有办法修剪 YouTube 视频而不将其下载到本地机器?
- android-recyclerview - 在用户滑动时应用设计并在中止的滑动上删除设计
- python - Docker:env:无法执行'python3':没有这样的文件或目录
- google-colaboratory - 流输出截断到最后 5000 行
- css - 引导 btn 块宽度以适应屏幕