"/sys/class/net/eth0/iflink"가 컨테이너에 시스템 전체 정보를 갖는 방법

"/sys/class/net/eth0/iflink"가 컨테이너에 시스템 전체 정보를 갖는 방법

Kubernetes 포드를 tcpdump하는 방법을 찾고 있습니다. 각 Pod는 가상 인터페이스를 생성하므로 어떤 인터페이스가 실제 Pod에 속하는지 알기가 어렵습니다. 시스템 전체 인터페이스 색인을 식별하는 데 도움이 되는 방법을 찾았습니다. 기본적으로 cat /sys/class/net/eth0/iflink대상 Pod의 컨테이너 내부에서 실행할 수 있으며 호스트 네트워크 인터페이스 인덱스가 표시됩니다. 이렇게 하면 포드에 속한 veth를 알 수 있습니다.

작동하지만 컨테이너의 네트워크 네임스페이스에 있어야 하는데 왜 네트워크에서 시스템 전체 정보를 얻을 수 있는지 생각하게 되었습니다. 따라서 시스템 전체 인덱스에 액세스할 수 없으며 가상 인터페이스에 대한 가상 "네임스페이스" 인덱스만 보아야 합니다.

/sys/class/net/eth0/iflink이것이 K8 내의 네트워크 네임스페이스와 어떻게 관련되는지 설명할 수 있는 사람이 있습니까 ?

답변1

iflink값은 시스템 전체에 적용되지 않습니다. 이는 피어 네트워크 nsid 중에서 유효한 값입니다. 예를 들어 all로 표시됩니다 ( 다른 네트워크 네임스페이스의 피어에 대한 인터페이스 ip link show dev eth0이므로 ). veth좀 더 자세히 설명하자면, 피어 네트워크 nsid는 시스템 전체 값이 아니라현재의(시스템 전체) 피어 네트워크를 이 (시스템 전체) 네트워크 네임스페이스에 연결하는 네트워크 네임스페이스입니다. 종속 인터페이스가 때때로 이동되기 때문입니다.

ip netns add다음은 및 를 사용하는 예입니다 (또한 의 네트워크 항목을 사용할 수 있도록 자체 마운트 네임스페이스에 ip netns exec올바르게 (재)마운트됩니다 )./sys/sys

# ip netns add n1
# ip netns add n2
# ip netns add n3
# ip netns add n4

# ip -n n1 link add name ton2 index 42 type veth peer netns n2 name eth0
# ip -n n3 link add name ton4 index 42 type veth peer netns n4 name eth0


# ip netns exec n2 cat /sys/class/net/eth0/iflink
42
# ip -n n2 link show dev eth0
2: eth0@if42: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 0e:27:6f:19:05:02 brd ff:ff:ff:ff:ff:ff link-netns n1
# ip netns exec n4 cat /sys/class/net/eth0/iflink
42
# ip -n n4 link show dev eth0
2: eth0@if42: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether fe:09:53:11:84:d6 brd ff:ff:ff:ff:ff:ff link-netns n3

두 인터페이스 모두 인덱스 값이 42인 피어 링크를 가지고 있지만 이는 동일한 인터페이스를 나타내지는 않습니다. 42라는 값 중 하나는 ton2netns n1의 인덱스 값이고 다른 하나는 ton4netns n3의 인덱스 값입니다. 최신 버전이 ip linklink-nsid를 ip netns add피어 네임스페이스에 지정된 실제 이름으로 확인하지 않으면 모두 다음과 같이 표시됩니다 link-netnsid 0(이것이 유일한 피어 네트워크 네임스페이스이고 link-nsid는 별도로 설정하지 않는 한 기본적으로 0에서 시작하기 때문입니다). 각 네트워크 네임스페이스), 다시 0은 시스템 전체가 아닙니다.

# stat -f -c %T /run/netns/n1 /run/netns/n3
nsfs
nsfs
# stat -c %i /run/netns/n1 /run/netns/n3
4026533318
4026533590

피어의 실제 시스템 전체 값은 네트워크 네임스페이스 + 인덱스입니다. 여기서는 4026533318:42 및 4026533590:42입니다. 그러나 어떻게 생성되었는지 모르는 경우( ip netns여기에 설치된 참조를 남겨두기) 초기 네트워크 네임스페이스가 아닌 경우(이 예에서와 같이) 네트워크 이름 지정을 간단히 파악하면 됩니다. 공간은 매우 어려울 수 있습니다 /run/netns.

이에 대한 자세한 내용은 다음을 참조하세요.이 답변그랬어요.

관련 정보