有没有办法看看kubernetes v1.15.2 pod和veth的关系?
长话短说:
是的。
有一个一堆相似的话题 https://stackoverflow.com/questions/21724225在 StackOverflow 甚至一些Github 上的脚本 https://github.com/micahculpepper/dockerveth.
解释:
有一个非常好的文章 https://dustinspecker.com/posts/how-do-kubernetes-and-docker-create-ip-addresses/在 Kubernetes (K8s) 网络上。
过于简单化的“K8s 网络”由 Linux 的网络命名空间和虚拟接口处理。
以下控制台输出是在我的 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 容器提供流量。让我们找到veth
为其中一个 Pod 提供流量。
$ 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
for it:
$ 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
- 检查为容器提供流量的确切接口。
从该输出(eth0@if14
)我们可以说eth0
为了6aa1d952a9f3
docker容器链接到接口14: veth240a8f81@if3
在主机上。
基于这个例子你可以编写自己的脚本来匹配veth
Pod、容器等的接口
希望有帮助。