Docker 네트워크에서 브리지와 veth의 관계

Docker 네트워크에서 브리지와 veth의 관계

Ubuntu 22.04 호스트에서 브리지 드라이버를 사용하여 Docker 네트워크를 생성하고 네트워크에서 컨테이너를 시작했습니다.

내 호스트에서 실행하면 ip addr다음 두 가지 인터페이스가 표시됩니다.

5: br-fc7599764562: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:d4:4f:b9:39 brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.1/16 brd 172.21.255.255 scope global br-fc7599764562
        valid_lft forever preferred_lft forever
    inet6 fe80::42:d4ff:fe4f:b939/64 scope link
        valid_lftforever preferred_lft forever
6: vethe6879a0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-fc7599764562 state UP group default
    link/ether e2:e8:0f:5b:37:a0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::e0e8:fff:fe5b:37a0/64 scope link
        valid_lft forever preferred_lft forever

두 번째 인터페이스는 첫 번째 인터페이스를 "기본"으로 나열하므로 두 인터페이스는 확실히 관련되어 있습니다. 무슨 관계야?

이 질문에 대한 몇 가지 배경 정보: 실제로 각 네트워크에 컨테이너가 있는 두 개의 Docker 네트워크가 있습니다. iptables를 사용하여그들 사이에 NAT를 설정하십시오(아니면 적어도 그렇게 했다고 생각합니다) 한 컨테이너에서 다른 컨테이너로 ping을 시도하고 있습니다. 호스트에서 Wireshark를 실행하면 ICMP 패킷이 브리지 인터페이스에서 들어오고 veth 인터페이스(다른 브리지가 아님)에서 나가는 것을 볼 수 있습니다.

답변1

브리지 장치는 가상 스위치입니다. 인터페이스는 veth컨테이너를 "스위치"에 연결하는 가상 이더넷 케이블입니다. veth 장치를 생성하면 두 개의 인터페이스가 생성됩니다. Docker는 하나의 인터페이스를 컨테이너 내부에 배치하고(즉, eth0컨테이너 내의 인터페이스가 됨) 다른 인터페이스를 배치합니다. 장치의 한쪽 끝을 브리지에 연결합니다.

이 기사veth 장치에 대한 몇 가지 추가 세부 정보와 다양한 기타 가상 인터페이스 유형에 대한 일반적인 개요가 있습니다.

관련 정보