それぞれルーティング可能なIPアドレスを持つDockerまたはLXCコンテナセットを設定しようとしています。含まれているホストは、実際にoVirtのブランドが変更された非常に古いバージョンのRedHat Enterprise Virtualizationで実行されている仮想マシンです。データセンターではタグ付き VLAN を使用し、RHEV ではさまざまな「LAN プロファイル」を使用してこれらの VLAN を選択できます。ホストコンテナと同じVLAN /プロファイルにコンテナをすべて配置したいです。各コンテナに独自のMACを備えた仮想LANデバイスが必要です。
含まれているVMにはインターフェイスeth0があります。説明に従ってくださいこのガイド(「macvalanデバイスを使用」)ブリッジモードでmacvlanを作成してコンテナに割り当てました。私たちの目的のために10.12.0.117/21
コンテナが持っている必要があるルーティング可能なアドレスとその10.12.7.254
ゲートウェイであると言うでしょう。
# docker run -d --name test centos7
# dockpid=$(docker inspect --format '{{ .State.Pid }}' test)
# ip link add eth0p0 link eth0 type macvlan mode bridge
# ip link set netns $dockpid eth0p0
# nsenter -t $dockpid -n ip link del eth0
# nsenter -t $dockpid -n ip addr add 10.12.0.117/21 dev eth0p0
# nsenter -t $dockpid -n ip route add default via 10.12.7.254 dev eth0p0
pingできません。実際、ネットワーク上の他のノードのオンとオフをtcpdump
使用eth0
すると、arping
コンテナに到着するarp要求とコンテナ応答(任意に生成されたMACを含む)を見ることができますが、これらのARP応答は返されないようです。別のノードホストへ(TCP / IPに示すように)
また、単純な方法でインターフェイスを作成するためにlxcを使用してみました。
# ip link add link eth0 eth4 type macvlan
IPアドレスを提供してデバイスを起動すると、LANでそのIPをpingできます。ただし、コンテナを構成すると、次のことは発生しません。
lxc.network.type = phys
lxc.network.flags = up
lxc.network.link = eth4
次に、IPとルーティングを手動で設定します。これでdockerのようにpingできません。
一方、RHEV-Mを使用して同じプロファイルで追加のネットワークインターフェイスを作成し、それをVMに接続してから、この新しいインターフェイス(eth2
)をVM内のコンテナの名前空間に割り当てると、すべてがうまく機能します。だから私はこれがRHEVと内部でARPリクエストを渡すことに関連していると思います。
注:RHEVMハイパーバイザーへのrootアクセス権はありません。 (でも入手できるか丁寧に聞くことはできます。)
確実な解決策がありますか?トラブルシューティングのヒントがある人はいますか?私は何を見逃していますか?