# 尋找 K8s pod 在 node 上對應的網卡 ``` # 1. 在 Kubernetes 建立一個 Pod,命名為 n1,使用官方 nginx 映像檔 $ kubectl run n1 --image=docker.io/library/nginx pod/n1 created # 2. 查詢 Pod 的 IP、所屬節點等詳細資訊 $ kubectl get pod n1 -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES n1 1/1 Running 0 6m46s 10.244.9.12 tkbp-worker2 <none> <none> # 進到 tkbp-worker2 節點執行以下命令 # 3. 列出所有 PID 命名空間(lsns 為列出 Linux namespace 狀態的工具) $ lsns -t pid NS TYPE NPROCS PID USER COMMAND ...以上省略 4026533346 pid 5 61422 root nginx: master process nginx -g daemon off; # 4. 查詢 nginx 程序的 pid 所屬的 linux network namespace $ ip netns identify 61422 cni-343bc6af-c579-f885-ad00-5dd56292fb5b # 5. 進入該 linux network namespace,查詢 app container 內的網路介面與 IP 設定 $ ip netns exec cni-343bc6af-c579-f885-ad00-5dd56292fb5b ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether e6:88:62:99:ad:f4 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.244.9.12/32 scope global eth0 valid_lft forever preferred_lft forever # 從以上結果來看 pod 的 IP 位址 10.244.9.12 綁定在網路介面 eth0 上,而 eth0 被連接到 9 號介面上。 # 6. 在節點主機上,查看 9 號網路介面資訊 $ ip a s ...以上省略 9: calif87b22aca35@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-343bc6af-c579-f885-ad00-5dd56292fb5b ```