Linux 상자에서 veth 인터페이스는 어떻게 서로 연결됩니까?

Linux 상자에서 veth 인터페이스는 어떻게 서로 연결됩니까?

저는 최근 Google Kubernetes Engine 클러스터를 사용해 왔습니다. CNI에 관해 질문이 있습니다. 나는 GCP 문서와 다른 기사에서 모든 veth 인터페이스가 연결되는 브리지가 있다는 것을 읽었습니다. 기본적으로 각 컨테이너에 대해 veth 쌍이 생성됩니다. 한쪽 끝은 컨테이너에 있고 다른 쪽 끝은 브리지 장치에 연결됩니다. 동일한 노드의 컨테이너가 서로 통신할 때 패킷 교환은 레이어 2 브리지 장치를 사용합니다. 이는 GKE 문서에서 설명하는 방식이기도 합니다.

https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview#pods

https://medium.com/cloudzone/gke-networking-options-explained-demonstrated-5c0253415eba

Google에서 클러스터를 생성했는데 브리지 장치 docker0이 있지만 연결된 인터페이스가 없는 것을 볼 수 있습니다.

gke-xxxxxxxxx /home/uuuuuuu # brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242fd0b0cf4   no      
gke-xxxxxxxxxx /home/uuuuuuu # 

그런 다음 Virtualbox를 사용하여 클러스터를 생성했는데 인터페이스가 브리지 장치와 연결되어 있는 것을 볼 수 있습니다.

[root@k8s-2 ~]# brctl show
bridge name bridge id       STP enabled interfaces
cni0        8000.36dae477639c   no      veth7f6c1f01
                                        vethccd0d71d
                                        vethe63e4285

내가 추론하려는 것은 Google VM에서 브리지 장치를 찾을 수 없는 이유입니다. 이 시나리오에 사용되는 Linux 커널의 특별한 기능이 있습니까?

Google VM에서 각 veth 인터페이스를 검사하면 모두 동일한 IP 주소 10.188.2.1을 가지고 있습니다.

gke-xxxxxxxxxxxxxxxxxxxxx /home/user.name # ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 169.254.123.1  netmask 255.255.255.0  broadcast 169.254.123.255
        ether 02:42:fd:0b:0c:f4  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.10.1.19  netmask 255.255.255.255  broadcast 0.0.0.0
        inet6 fe80::4001:aff:fe0a:113  prefixlen 64  scopeid 0x20<link>
        ether 42:01:0a:0a:01:13  txqueuelen 1000  (Ethernet)
        RX packets 2192921  bytes 1682211226 (1.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1288701  bytes 468627202 (446.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 276348  bytes 153128345 (146.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 276348  bytes 153128345 (146.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth27cee774: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.188.2.1  netmask 255.255.255.255  broadcast 10.188.2.1
        inet6 fe80::10b7:98ff:fe2f:2e08  prefixlen 64  scopeid 0x20<link>
        ether 12:b7:98:2f:2e:08  txqueuelen 0  (Ethernet)
        RX packets 32  bytes 2306 (2.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10  bytes 710 (710.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth6eba4cdf: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.188.2.1  netmask 255.255.255.255  broadcast 10.188.2.1
        inet6 fe80::c4e3:b0ff:fe5f:63da  prefixlen 64  scopeid 0x20<link>
        ether c6:e3:b0:5f:63:da  txqueuelen 0  (Ethernet)
        RX packets 537091  bytes 138245354 (131.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 477870  bytes 122515885 (116.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth8bcf1494: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.188.2.1  netmask 255.255.255.255  broadcast 10.188.2.1
        inet6 fe80::70cb:c4ff:fe8c:a747  prefixlen 64  scopeid 0x20<link>
        ether 72:cb:c4:8c:a7:47  txqueuelen 0  (Ethernet)
        RX packets 50  bytes 3455 (3.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 2842 (2.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethbb2135c7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.188.2.1  netmask 255.255.255.255  broadcast 10.188.2.1
        inet6 fe80::1469:daff:fea0:8b5b  prefixlen 64  scopeid 0x20<link>
        ether 16:69:da:a0:8b:5b  txqueuelen 0  (Ethernet)
        RX packets 223995  bytes 82725559 (78.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 239258  bytes 60203574 (57.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vetheee4e8e3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.188.2.1  netmask 255.255.255.255  broadcast 10.188.2.1
        inet6 fe80::ec6c:3bff:fef3:70c2  prefixlen 64  scopeid 0x20<link>
        ether ee:6c:3b:f3:70:c2  txqueuelen 0  (Ethernet)
        RX packets 311669  bytes 40562747 (38.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 304461  bytes 628195110 (599.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

이 veth 인터페이스 뒤에는 무엇이 있습니까?

미리 감사드립니다

답변1

브리지에 이미 인터페이스가 있는 경우 이 brctl show명령을 사용하여 노드의 브리지 및 인터페이스 세부 정보를 볼 수 있습니다. 귀하의 상황에서는 브리지에 인터페이스를 도입하지 않은 것 같습니다. 를 사용하여 브리지에 인터페이스를 추가할 수 있으며 sudo brctl addif docker0 veth0, 동일한 명령을 사용하여 노드에서 모든 필수 브리지 및 인터페이스 세부 정보를 받을 수 있습니다. 확인하다이 문서참고용.

관련 정보