2017-01-27 10 views
1

ドッカーコンテナの出力トラフィックにNetEm遅延を適用します。通常、実行します。ドッカーコンテナインターフェイスにNetEM WAN遅延を適用します。

# /sbin/tc qdisc add dev $INTERFACE root netem delay ${DELAY}ms 

問題は、コンテナが接続されているインターフェイスについてはわかりません。

例えば、私は次のコンテナ実行している:私のホストからNetEmルールを追加している私は何をしたい

/ # ping 8.8.8.8 
PING 8.8.8.8 (8.8.8.8): 56 data bytes 
64 bytes from 8.8.8.8: seq=0 ttl=44 time=39.783 ms 
64 bytes from 8.8.8.8: seq=1 ttl=44 time=39.694 ms 

docker run --rm -it alpine /bin/sh 

をしてから、私は8.8.8.8にpingを実行machineとping時間の変更を参照してください。

私はifconfigを実行した場合、私は(他のコンテナが実行されているので)仮想イーサネットインターフェイスのいくつかが存在していることがわかり、私は、私が興味を持っていた容器に接続された1かわからない:

# ifconfig 
veth09fa1c5 Link encap:Ethernet HWaddr 96:73:c9:15:93:b8 
      inet6 addr: fe80::9473:c9ff:fe15:93b8/64 Scope:Link 
      ..... 

vethf05ef93 Link encap:Ethernet HWaddr ca:ea:97:ef:cd:9d 
      inet6 addr: fe80::c8ea:97ff:feef:cd9d/64 Scope:Link 
      ..... 

私はこれらのインターフェースの1つにNetEmルールを適用する必要があると思います。あれは正しいですか?

答えて

2

vethルートはそれほど単純ではないようですが、this answerに基づいて実行可能かもしれません。

デフォルトでは(ブリッジインターフェイスを使用して)、コンテナvirtインターフェイスとの間の要求は、デフォルトのブリッジネットワークインターフェイスdocker0を経由します。

そこにNetEmルールを設定できますが、他のすべてのコンテナも遅くなります。これがオプションの場合、コンテナを別のネットワーク(コンテナをdocker network createで作成)で実行すると、実験/テストでこれを行うことができます。

docker network create slownet 
docker network inspect slownet 
[ 
    { 
     "Name": "slownet", 
     "Id": "535e40d880716a27efe1fd3fada62bdc4d9fa13bde09279de650fa53f13f7cdd", 
     "Scope": "local", 
     "Driver": "bridge", 
     "EnableIPv6": false, 
     "IPAM": { 
      "Driver": "default", 
      "Options": {}, 
      "Config": [ 
       { 
        "Subnet": "172.19.0.0/16", 
        "Gateway": "172.19.0.1/16" 
       } 
      ] 
     }, 
     "Internal": false, 
     "Containers": {}, 
     "Options": {}, 
     "Labels": {} 
    } 
] 
ifconfig 
.... 
br-535e40d88071 Link encap:Ethernet HWaddr 02:42:4E:B6:F8:C2 
      inet addr:172.19.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 
      inet6 addr: fe80::42:4eff:feb6:f8c2%32727/64 Scope:Link 
      UP BROADCAST MULTICAST MTU:1500 Metric:1 
      RX packets:180 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:180 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:14368 (14.0 KiB) TX bytes:16888 (16.4 KiB) 
.... 

# so br-535e40d88071 is the interface 

のコンテナをスピンアップとpingを始めましょう:

host> docker run -ti --rm --net=slownet alpine sh  
container> ping 8.8.8.8 
PING 8.8.8.8 (8.8.8.8): 56 data bytes 
64 bytes from 8.8.8.8: seq=114 ttl=37 time=0.251 ms 

そしてNetEmルール追加:

:それは私が、待ち時間の増加を参照してください起こると

host> tc qdisc add dev br-535e40d88071 root netem delay 100ms 

64 bytes from 8.8.8.8: seq=115 ttl=37 time=0.693 ms 
64 bytes from 8.8.8.8: seq=116 ttl=37 time=101.086 ms 
64 bytes from 8.8.8.8: seq=117 ttl=37 time=104.056 ms 
+0

netemをsepに適用する方がより明確な選択肢だと思いますvethに関するドナーネットワークを確立する。ありがとう。 – gaetano

関連する問題