Packet Journey

Step through a packet crossing Kubernetes nodes.

Flannel (VXLAN)Step 1 / 8
pod-A eth0

封包從 pod-A 的虛擬網卡送出。dst IP 指向 pod-B(10.244.2.8),dst MAC 從 ARP cache 查到。此時是純粹的三層封包。

EthernetL2
MAC dst 0a:58:0a:f4:02:0848bMAC src 0a:58:0a:f4:01:0548bEtherType 0x080016b
IPv4L3
IP src 10.244.1.532bIP dst 10.244.2.832bProtocol 68bTTL 638b
TCPL4
Port src 5432116bPort dst 8016bSeq 102432b

Flannel 是最簡單的 CNI plugin,用 VXLAN overlay 實現 pod 跨節點通訊。每個 node 有一個 flannel.1 的 VXLAN device,負責 encap 和 decap。

每個 node 分配一個 /24 子網給自己的 pod (例如 node-1 是 10.244.1.0/24,node-2 是 10.244.2.0/24)。flannel 把這個對應關係存在 etcd,每個 node 查得到「哪個 pod 網段屬於哪個 node」。

封包跨節點時,flannel.1 把整個原始 L2 frame 塞進 VXLAN header,再包進 UDP (port 4789),最後套上 node-to-node 的 IP header。整個實體網路只看到「兩個 node 之間在傳 UDP」。

優點:底層網路完全不需要知道 pod 網段,任何雲都能跑。缺點:多一層 encap/decap,每個封包 CPU 和延遲成本稍高,MTU 要預留空間給 VXLAN header (50 bytes)。