反正有看kubernetes v1.15.2 pod和veth的关系吗?现在我可以在主机中看到 veth,但不知道拥有哪个 pod。
vethe4297f4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
ether ba:01:db:4a:7d:d0 txqueuelen 0 (Ethernet)
RX packets 9999796 bytes 1671107011 (1.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9231477 bytes 2153738950 (2.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vethf059d46: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
ether 6a:8f:a3:65:dd:4c txqueuelen 0 (Ethernet)
RX packets 11724557 bytes 5581499446 (5.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12847645 bytes 2142367255 (1.9 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vethf9efebf: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
ether fa:c7:76:53:4a:36 txqueuelen 0 (Ethernet)
RX packets 11103657 bytes 2587046474 (2.4 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8993500 bytes 1816804215 (1.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
顺便说一下,我正在从架构中学习法兰绒通信程序:
最佳答案
is there anyway to see the relationship of kubernetes v1.15.2 pod and veth?
TL;DR :
是的。
有一个bunch of similar topics在 StackOverflow 甚至一些 scripts on Github .
说明:
有一个 very good article关于 Kubernetes (K8s) 网络。
由 Linux 的网络命名空间和虚拟接口(interface)处理的过度简化的“K8s 网络”。
以下控制台输出已在我的 GKE 集群上进行,但也适用于独立集群。
$ sudo ip link show | egrep "veth|docker" | awk -F":" '{print $1": "$2}'
3: docker0
5: vethcf35c1bb@if3
6: veth287168da@if3
7: veth5c70f15b@if3
11: veth62f193f7@if3
12: vetha38273b3@if3
14: veth240a8f81@if3
sudo docker ps --format '{{.ID}} {{.Names}} {{.Image}}' "$@" | wc -l
25
如您所见,我有 6 个 veth
为 25 个 docker 容器提供服务。让我们找到为其中一个 pod 提供流量的 veth
。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
server-go-7b57857cfb-p6m62 1/1 Running 0 7m41s
- 让我们找到 pod 的 docker 容器 ID。
$ sudo docker ps --format '{{.ID}} {{.Pid}} {{.Names}} {{.Image}}' "$@" | grep POD_server
6aa1d952a9f3 k8s_POD_server-go-7b57857cfb-p6m62_default_02206a28-42e1-43a5-adb8-f6ab13258fb1_0 k8s.gcr.io/pause:3.1
- 为它检查一个
pid
:
$ sudo docker inspect --format '{{.State.Pid}}' 6aa1d952a9f3
4012085
- 允许系统工具访问该
pid
的命名空间:
$ sudo ln -sf /proc/${pid}/ns/net /var/run/netns/ns-${pid}
#in my case the commands were :
$ if [ ! -d /var/run/netns ]; then sudo mkdir -p /var/run/netns; fi
$ sudo ln -sf /proc/4012085/ns/net /var/run/netns/ns-4012085
$ sudo ip netns exec "ns-4012085" ip link show type veth | grep "eth0"
3: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP mode DEFAULT group default
- 检查为容器提供流量的确切接口(interface)。
从该输出 (eth0@if14
) 我们可以说 6aa1d952a9f3
docker 容器的 eth0
链接到接口(interface) 14: veth240a8f81@if3
在主机上。
基于此示例,您可以编写自己的脚本以将 veth
接口(interface)与 Pod、容器等相匹配。
希望对您有所帮助。
关于kubernetes - 如何查看kubernetes中的pod和veth关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62145066/