天天看點

#yyds幹貨盤點#K8S- CNI 插件與選型

CNI 插件把 main 和 ipam 分開,為使用者提供了自由組合它們的機制,甚至一個 CNI 插件也可以直接調用另外一個插件。CNI 項目中有兩個代碼倉庫:一個是提供用于開發 CNI 網絡插件的庫檔案 libcni,以及指令行工具 cnitool 的 containernetworking/cni;另一個是 CNI 内置插件程式 containernetworking/plugins。

CNI 還支援使用 plugins 字段組合多個 CNI 網絡插件依次進行網絡配置,以實作将核心網絡管理插件和 meta 插件等相組合,以堆疊出一個完整的解決方案。各插件以清單形式依次定義,前一個插件的配置結果将傳遞給後一個插件,直到清單中的所有插件都成功配置完成。

CNI 規範負責連接配接容器管理系統和網絡插件兩類元件,它們之間通過 JSON 格式的檔案進行通信,以完成容器網絡管理。具體的管理操作均由插件來實作,包括建立容器 netns(網絡名稱空間)、關聯網絡接口到對應的 netns,以及給網絡接口配置設定 IP 等。

Flannel:由 CoreOS 提供的 CNI 網絡插件,也是最簡單、最受歡迎的網絡插件;它使用 VXLAN 或 UDP 協定封裝 IP 封包來建立 Overlay 網絡,并借助 etcd 維護網絡的配置設定資訊,同一節點上的 Pod 間通信可基于本地虛拟網橋(cni0)進行,而跨節點的 Pod 間通信則要由 flanneld 守護程序封裝隧道協定封包後,通過查詢 etcd 路由到目的地;Flannel 也支援 host-gw 路由模型。

Calico:同 Flannel 一樣廣為流行的 CNI 網絡插件,以靈活、良好的性能和網絡政策所著稱。Calico 是路由型 CNI 網絡插件,它在每台機器上運作一個 vRouter,并基于 BGP 路由協定在節點之間路由資料包。Calico 支援網絡政策,它借助 iptables 實作通路控制功能。另外,Calico 也支援 IPIP 型的 Overlay 網絡。

Canal:由 Flannel 和 Calico 聯合釋出的一款統一網絡插件,它試圖将二者的功能內建在一起,由前者提供 CNI 網絡插件,由後者提供網絡政策。

WeaveNet:由 Weaveworks 提供的 CNI 網絡插件,支援網絡政策。WeaveNet 需要在每個節點上部署 vRouter 路由元件以建構起一個網格化的 TCP 連接配接,并通過 Gossip 協定來同步控制資訊。在資料平面上,WeaveNet 通過 UDP 封裝實作 L2 隧道封包,封包封裝支援兩種模式:一種是運作在使用者空間的 sleeve(套筒)模式,另一種是運作在核心空間的 fastpath(快速路徑)模式,當網絡拓撲不适合 fastpath 模式時,Weave 将自動切換至 sleeve 模式。

Multus CNI:多 CNI 插件,實作了 CNI 規範的所有參考類插件(例如 Flannel、MAC VLAN、IPVLAN 和 DHCP 等)和第三方插件(例如 Calico、Weave 和 Contiv 等),也支援 Kubernetes 中的 SR-IOV、DPDK、OVS-DPDK 和 VPP 工作負載,以及 Kubernetes 中的雲原生應用程式和基于 NFV 的應用程式,是需要為 Pod 建立多網絡接口時的常用選擇。

Antrea:一款緻力于成為 Kubernetes 原生網絡解決方案的 CNI 網絡插件,它使用 OpenvSwitch 建構資料平面,基于 Overlay 網絡模型完成 Pod 間的封包交換,支援網絡政策,支援使用 IPSec ESP 加密 GRE 隧道流量。

DAMM:由諾基亞釋出的電信級的 CNI 網絡插件,支援具有進階功能的 IP VLAN 模式,内置 IPAM 子產品,可管理多個叢集範圍内的不連續三層網絡;支援通過 CNImeta 插件将網絡管理功能委派給任何其他網絡插件。

kube-router:kube-router 是 Kubernetes 網絡的一體化解決方案,它可取代 kube-proxy 實作基于 ipvs 的 Service,能為 Pod 提供網絡,支援網絡政策以及擁有完美相容 BGP 協定的進階特性。

  • 底層系統環境限制:公有雲環境多有自己專有的實作,例如 Google GCE、AzureCNI、AWS VPC CNI 和 Aliyun Terway 等,它們通常是相應環境上較佳的選擇。若虛拟化環境限制較多,除 Overlay 網絡模型别無選擇,則可用的方案有 FlannelVXLAN、Calico IPIP、Weave 和 Antrea 等。實體機環境幾乎支援任何類型的網絡插件,此時一般應該選擇性能較好的 Calico BGP、Flannel host-gw 或 DAMM IPVLAN 等。
  • 容器網絡功能需求:支援 NetworkPolicy 的解決方案以 Calico、WeaveNet 和 Antrea 為代表,而且後兩個支援節點到節點間的通信加密。而大量 Pod 需要與叢集外部資源互聯互通時,應該選擇 Underlay 網絡模型一類的解決方案。
  • 容器網絡性能需求:Overlay 網絡中的協定封包有隧道開銷,性能略差,而 Underlay 網絡則幾乎不存這方面的問題,但 Overlay 或 Underlay 路由模型的網絡插件支援較快的 Pod 建立速度,而 Underlay 模型中的 IP VLAN 或 MAC VLAN 模式則較慢。

繼續閱讀