Skip to content

antony@notes:~/kubernetes$ cat "尋找-K8s-pod-在-node-上對應的網卡.md"

尋找 K8s pod 在 node 上對應的網卡

2025-06-28· kubernetes

尋找 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