k8s網路外掛

xiaosi_發表於2020-04-05

xiaosi/2020-04-02 06:26:34    k8s:1.17    內容來自 k8s官方文件: - k8s叢集網路系統 - k8s網路外掛

叢集網路系統

叢集網路系統作為 k8s 核心部分,主要解決下問題: 1. Pod 和 Pod 之間通訊 1. Pod 和 Service 之間通訊 1. 外部和 Service 之間通訊 1. Pod 內容器和容器之間的通訊(已經被 pause 容器解決)

k8s 網路模型

每一個 Pod 都有著自己的 IP 地址,因此,不需要顯示地在每個 Pod 之間建立連線,幾乎不需要處理容器埠到主機埠之間的對映,建立一個乾淨向後相容的網路模型,模型實現埠分配、命令、服務發現、負載均衡等等

該模型並不複雜,k8s 的 IP 地址存在於 Pod 範圍內,容器分享網路名詞空間(包含 IP),因此 Pod 內的容器可以通過 localhost 到達各個埠,也因此,Pod 內的容器都需要相互協調埠使用,這和虛擬機器一樣

也可以在節點本身通過埠去請求 Pod ,但 Pod 並不知道這些主機埠是否存在,轉發方式也是實現容器執行的細節

網路外掛

網路外掛是實現 k8s 網路模型的方式,有以下幾種型別: - CNI 外掛:以 appc/CNI 協議,為互操作性設定 - kubenet 外掛:使用 bridge 和 host-local CNI 外掛實現了基本的 cbr0(僅適用於 linux)

kubelet 有一個單獨的預設網路外掛,以及一個對整個叢集通用的預設網路。 它在啟動時探測外掛,記住找到的內容,並在 pod 生命週期的適當時間執行所選外掛(這僅適用於 Docker,因為 rkt 管理自己的 CNI 外掛

預設情況下,如果未指定 kubelet 網路外掛,則使用 noop 外掛,該外掛設定 net/bridge/bridge-nf-call-iptables=1,以確保簡單的配置(如帶網橋的 Docker )與 iptables 代理正常工作

CNI 外掛是獨立的,和 k8s 協調工作的,並非 k8s 的附屬外掛

使用

相關檔案位置: - 預設外掛目錄:/opt/cni/bin - 預設外掛配置檔案位置:/etc/cni/net.d

相應外掛安裝時會自動配置的,下面命令還是開發版本,後期可能會變動: - kubelet --network-plugin :指定使用的 CNI 外掛 - kubelet --cni-bin-dir :CNI 外掛位置(預設:/opt/cni/bin) - kubelet --cni-conf-dir :CNI 配置檔案位置(預設:/etc/cni/net.d) - kubelet --network-plugin-mtu :指定了使用的 MTU (僅限於 kubenet 外掛)

相關文章