iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Kubernetes

Kubernetes 中關於網路的二三事系列 第 10

Day 10 入門 Kubernetes CNI — flannel (3)

  • 分享至 

  • xImage
  •  

今天我們就接著昨天的內容繼續,昨天講完了 Netfilter 以及 TC 內部的行為,接著我們就將它們跟 Pod 連在一起看,因此架構圖如圖所示。

image 1

假如有一個封包需要從外部進入到容器中,首先宿主機的 eth0 (或其他名稱的網卡)會接收到網路封包,接著經過 TC 的 ingress 之後依次進入 Netfilter 的 PreRouting 、 Forward 、PostRouting ,然後進入到 Pod 對應 veth 的 TC egress 後,就會通過 veth-pair 的 veth 穿過隧道進入到 pod 中。反過來 Pod 要進行回覆時,Pod 會發送封包至 Pod 中的 eth0 ,透過 veth-pair 進入到宿主機中並依次經過 veth 的 TC ingress , Netfilter 的 PreRouting 、 Forward 、PostRouting ,最後經過宿主機的 eth0 發送出去(這邊真的不是我廢話太多,後面應該提到 eBPF 的時候會再用一次這張圖,也許啦)。

而假如 Pod A 要發送到 Pod B 就比較簡單了,首先 Pod A 會發送封包至 Pod A 中的 eth0 ,接著只要經過 Pod A veth 的 TC ingress ,以及 Netfilter 的 PreRouting 、 Forward 、PostRouting ,最後進入 Pod B 的 TC egress 就可以透過 veth-pair 進入到 Pod B 了。

至於為什麼 Netfilter 會知道要轉發至哪個介面,這個就是 flannel 負責的工作了, flannel 會有一個 Daemon 運行在背景,這個 Daemon 會取得 Kubernetes 叢集中所有節點的網路資訊,並將這些資訊做成路由表告知給 Netfilter ,這樣 Netfilter 就會知道如何對封包進行轉發。

那麼這就是一個簡單的 Kubernetes CNI 運行過程,各位明天見了。


上一篇
Day 09 入門 Kubernetes CNI — flannel (2)
下一篇
Day 11 Network Namespaces:容器網路隔離的基石
系列文
Kubernetes 中關於網路的二三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言