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

핑을 할 수 없습니다. 실제로 네트워크의 다른 노드를 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 하이퍼바이저에 대한 루트 액세스 권한이 없습니다. (하지만 구할 수 있는지 정중하게 물어볼 수는 있어요.)

확실한 해결책이 있나요? 문제 해결 팁이 있는 사람이 있나요? 내가 무엇을 놓치고 있나요?

관련 정보