如何对docker容器上的网络流量进行分级限制
我想为对等2应用程序设置docker容器。此应用程序没有应用程序级别的速率限制,因此我尝试在容器级别设置一个限制。我想限制所有端口上的传出和传入连接,但应用程序的web UI使用的端口除外。您可以使用iptables limits模块。例如,您可以使用选项“-m limit--limit 10/s”将规则添加到预路由表中,以限制特定端口每秒仅接收10个连接。我很惊讶找到这个问题的答案有多么困难。各种论坛上的大多数答案都不正确(我用两个iperf3节点对它们进行了测试,发现这些解决方案不起作用,或者只限制了一个方向的流量(仅传入或传出)。与传统的客户端/服务器应用程序相比,P2P应用程序的数据使用更加对称,因此必须限制双向通信 我发现的最好的方法是限制Docker容器的网络带宽(传入和传出),即在运行的容器中使用Linux自己的流量控制设置。在启动P2P应用程序之前,在容器中执行如何对docker容器上的网络流量进行分级限制,docker,rate-limiting,Docker,Rate Limiting,我想为对等2应用程序设置docker容器。此应用程序没有应用程序级别的速率限制,因此我尝试在容器级别设置一个限制。我想限制所有端口上的传出和传入连接,但应用程序的web UI使用的端口除外。您可以使用iptables limits模块。例如,您可以使用选项“-m limit--limit 10/s”将规则添加到预路由表中,以限制特定端口每秒仅接收10个连接。我很惊讶找到这个问题的答案有多么困难。各种论坛上的大多数答案都不正确(我用两个iperf3节点对它们进行了测试,发现这些解决方案不起作用,或
tc
命令
例如,您可以创建如下所示的启动脚本,将其复制到docker映像中,并将其作为入口点调用
Dockerfile(代码段):
在start-my-p2p.sh中放入类似的内容(您可能已经在互联网上搜索了tc
cmdline):
重要提示:启动容器时,您需要使用--cap add=NET\u ADMIN
:
docker run --rm -it --cap-add=NET_ADMIN -p6969:p6969 myimage
#/bin/sh
# Limit all incoming and outgoing network to 1mbit/s
tc qdisc add dev eth0 handle 1: ingress
tc filter add dev eth0 parent 1: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 1mbit burst 10k drop flowid :1
tc qdisc add dev eth0 root tbf rate 1mbit latency 25ms burst 10k`
# Now start your p2p application
myp2pservice -d
docker run --rm -it --cap-add=NET_ADMIN -p6969:p6969 myimage