macvlan - ネットワークデバイスはコンテナ内の外部ホストと通信できません。

macvlan - ネットワークデバイスはコンテナ内の外部ホストと通信できません。

それぞれルーティング可能な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アクセス権はありません。 (でも入手できるか丁寧に聞くことはできます。)

確実な解決策がありますか?トラブルシューティングのヒントがある人はいますか?私は何を見逃していますか?

関連情報