天天看點

#yyds幹貨盤點#K8S-Calico 網絡插件

Calico 是一個三層的虛拟網絡解決方案,它把每個節點都當作虛拟路由器(vRouter),并把每個節點上的 Pod 都當作是“節點路由器”後的一個終端裝置并為其配置設定一個 IP 位址。各節點路由器通過 BGP 協定學習生成路由規則,進而實作不同節點上 Pod 間的互聯互通。

Calico 把 Kubernetes 叢集環境中的每個節點上的 Pod 所組成的網絡視為一個自治系統,而每個節點也就自然由各自的 Pod 對象組成虛拟網絡,進而形成自治系統的邊界網關。各節點間通過 BGP 協定交換路由資訊并生成路由規則。但考慮到并非所有網絡都能支援 BGP,而且 BGP 路由模型要求所有節點必須要位于同一個二層網絡,Calico 還支援基于 IPIP 和 VXLAN 的 Overlay 網絡模型,它們的工作模式與 Flannel 的 VXLAN 和 IPIP 模型并無顯著不同。

Calico 的系統元件主要有 Felix、BGP 路由反射器、編排系統插件、BIRD 和 etcd 存儲系統等。

#yyds幹貨盤點#K8S-Calico 網絡插件

BGP 模式下的 Calico 所承載的各 Pod 資源直接基于 vRouter 經由基礎網絡進行互聯,它非疊加、無隧道、不使用 VRF 表,也不依賴于 NAT,是以每個工作負載都可以直接配置使用公網 IP 接入網際網路,當然,也可以按需使用網絡政策控制它的網絡連通性。

Calico 在每一個計算節點利用 Linux 核心實作了一個高效的 vRouter(虛拟路由器)進行封包轉發。每個 vRouter 通過 BGP 協定将自身所屬節點運作的 Pod 資源的 IP 位址資訊,基于節點上的專用代理程式(Felix)生成路由規則向整個 Calico 網絡内傳播。

與 Kubernetes 叢集整合時,Calico 需要配置 calico-node 和 calico-kube-controllers 兩個重要元件。

calico/node:Calico 在 Kubernetes 叢集每個節點運作的節點代理,負責提供 felix、bird4、bird6 和 confd 等守護程序。

calico/kube-controllers:Calico 運作在 Kubernetes 之上的自定義控制器,也是 Calico 協同 Kubernetes 的插件。

Calico 有兩種部署方式:一種是讓 calico/node 獨立運作在 Kubernetes 叢集之外,但 calico/kube-controllers 依然需要以 Pod 資源形式運作在叢集之上;另一種是以 CNI 插件方式配置 Calico,使 Calico 完全托管運作在 Kubernetes 叢集之上,類似于前面曾經部署托管 Flannel 網絡插件的方式。

Calico 預設啟用的是基于 IPIP 隧道的 Overlay 網絡,因而它會在所有流量上使用 IPIP 隧道而不是 BGP 路由。Calico 配置設定的位址池需要與 Kubernetes 叢集的 Pod 網絡的定義保持一緻。

工作在 IPIP 模式的 Calico 會在每個節點上建立一個 tunl0 接口作為隧道出入口來封裝 IPIP 隧道封包。Calico 會為每一個 Pod 資源建立一對 veth 裝置,其中一端作為 Pod 的網絡接口,另一端(名稱以 cali 為字首,後跟随機字串)留置在節點的根網絡名稱空間,它未使用風格模式,因而并未關聯成為任何虛拟網橋裝置的從接口。

#yyds幹貨盤點#K8S-Calico 網絡插件

繼續閱讀