有没有办法看看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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我正在从架构中学习 flannel 通信程序:
\n\n有没有办法看看kubernetes v1.15.2 pod和veth的关系?
\n
TL;DR:\n是的。
\nStackOverflow 上有很多类似的主题,甚至Github 上也有一些脚本。
有一篇关于 Kubernetes (K8s) 网络的非常好的文章。
\n过于简单化,“K8s 网络”由 Linux\xe2\x80\x99s 网络命名空间和虚拟接口处理。
\n以下控制台输出是在我的 GKE 集群上获取的,但也适用于独立集群。
\n$ sudo ip link show | egrep "veth|docker" | awk -F":" \'{print $1": "$2}\'\n3: docker0\n5: vethcf35c1bb@if3\n6: veth287168da@if3\n7: veth5c70f15b@if3\n11: veth62f193f7@if3\n12: vetha38273b3@if3\n14: veth240a8f81@if3\n\nsudo docker ps --format \'{{.ID}} {{.Names}} {{.Image}}\' "$@" | wc -l\n25\nRun Code Online (Sandbox Code Playgroud)\n正如您所看到的,我有 6 个veth25 个 docker 容器的服务流量。让我们找到veth为其中一个 Pod 提供流量的服务。
$ kubectl get pods \nNAME READY STATUS RESTARTS AGE\nserver-go-7b57857cfb-p6m62 1/1 Running 0 7m41s\nRun Code Online (Sandbox Code Playgroud)\n$ sudo docker ps --format \'{{.ID}} {{.Pid}} {{.Names}} {{.Image}}\' "$@" | grep POD_server\n6aa1d952a9f3 k8s_POD_server-go-7b57857cfb-p6m62_default_02206a28-42e1-43a5-adb8-f6ab13258fb1_0 k8s.gcr.io/pause:3.1\nRun Code Online (Sandbox Code Playgroud)\npid是否有:$ sudo docker inspect --format \'{{.State.Pid}}\' 6aa1d952a9f3\n4012085\nRun Code Online (Sandbox Code Playgroud)\npid:$ sudo ln -sf /proc/${pid}/ns/net /var/run/netns/ns-${pid}\nRun Code Online (Sandbox Code Playgroud)\n#in my case the commands were :\n$ if [ ! -d /var/run/netns ]; then sudo mkdir -p /var/run/netns; fi\n$ sudo ln -sf /proc/4012085/ns/net /var/run/netns/ns-4012085\nRun Code Online (Sandbox Code Playgroud)\n$ sudo ip netns exec "ns-4012085" ip link show type veth | grep "eth0"\n3: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP mode DEFAULT group default \nRun Code Online (Sandbox Code Playgroud)\n从该输出(eth0@if14)我们可以说eth0docker容器已链接到 主机上的6aa1d952a9f3接口。14: veth240a8f81@if3
基于此示例,您可以编写自己的脚本来匹配vethPod、容器等的接口。
希望有帮助。
\n| 归档时间: |
|
| 查看次数: |
4277 次 |
| 最近记录: |