【容器雲】Calico 組件架構
Calico 組件
下圖顯示了 Kubernetes 的必需和可選 Calico 組件,具有網絡和網絡策略的本地部署。
Calico 組件
-
Calico API server
-
Felix
-
BIRD
-
confd
-
Dikastes
-
CNI plugin
-
Datastore plugin
-
IPAM plugin
-
kube-controllers
-
Typha
-
calicoctl
雲編排器的插件
- Plugins for cloud orchestrators
Calico API 服務器
主要任務:讓您直接使用 kubectl 管理 Calico 資源。
菲利克斯(Felix)
主要任務:對路由和 ACL 以及主機上所需的任何其他內容進行編程,以便爲該主機上的端點提供所需的連接。在託管端點的每臺機器上運行。作爲代理守護程序運行。費利克斯資源。
根據具體的編排器環境,Felix 負責:
接口管理
將有關接口的信息編程到內核中,以便內核可以正確處理來自該端點的流量。特別是,它確保主機使用主機的 MAC 響應來自每個工作負載的 ARP 請求,併爲其管理的接口啓用 IP 轉發。它還監視接口以確保在適當的時間應用編程。
Route programming (路由編程)
將路由到其主機上的端點的程序路由到 Linux 內核 FIB(轉發信息庫)中。這確保了以到達主機的那些端點爲目的地的數據包被相應地轉發。
ACL 編程
將 ACL 編程到 Linux 內核中,以確保只能在端點之間發送有效流量,並且端點不能繞過 Calico 安全措施。
狀態報告
提供網絡健康數據。特別是,它會在配置其主機時報告錯誤和問題。此數據被寫入數據存儲,因此對網絡的其他組件和操作員可見。
注意:calico/node 可以在僅策略模式下運行,其中 Felix 在沒有 BIRD 和 confd 的情況下運行。這提供了無需在主機之間分配路由的策略管理,並用於託管雲提供商等部署。您可以通過在啓動節點之前設置環境變量 CALICO_NETWORKING_BACKEND=none 來啓用此模式。
BIRD
主要任務:從 Felix 獲取路由並分發給網絡上的 BGP 對等體,用於主機間路由。在託管 Felix 代理的每個節點上運行。開源的互聯網路由守護進程。鳥。
BGP 客戶端負責:
路線分發
當 Felix 將路由插入 Linux 內核 FIB 時,BGP 客戶端會將它們分發到部署中的其他節點。這確保了部署的有效流量路由。
BGP 路由反射器配置
BGP 路由反射器通常用於大型部署而不是標準 BGP 客戶端。BGP 路由反射器充當連接 BGP 客戶端的中心點。 (標準 BGP 要求每個 BGP 客戶端都連接到網狀拓撲中的每個其他 BGP 客戶端,這很難維護。)
爲了冗餘,您可以無縫部署多個 BGP 路由反射器。BGP 路由反射器僅參與網絡控制:沒有端點數據通過它們。當 Calico BGP 客戶端將其 FIB 中的路由通告給路由反射器時,路由反射器會將這些路由通告給部署中的其他節點。
confd
主要任務:監控 Calico 數據存儲以瞭解 BGP 配置和全局默認值(例如 AS 編號、日誌記錄級別和 IPAM 信息)的更改。開源、輕量級的配置管理工具。
Confd 根據數據存儲中數據的更新動態生成 BIRD 配置文件。當配置文件發生變化時,confd 會觸發 BIRD 加載新文件。配置 confd 和 confd 項目。
Dikastes
主要任務:爲 Istio 服務網格實施網絡策略。作爲 Istio Envoy 的 sidecar 代理在集羣上運行。
(可選)Calico 在 Linux 內核(使用 iptables,L3-L4)和 L3-L7 使用名爲 Dikastes 的 Envoy sidecar 代理對工作負載實施網絡策略,並對請求進行加密身份驗證。使用多個實施點基於多個標準建立遠程端點的身份。即使工作負載 pod 受到威脅,並且 Envoy 代理被繞過,主機 Linux 內核實施也會保護您的工作負載。Dikastes 和 Istio 文檔。
CNI 插件
主要任務:爲 Kubernetes 集羣提供 Calico 網絡。
將此 API 提供給 Kubernetes 的 Calico 二進制文件稱爲 CNI 插件,必須安裝在 Kubernetes 集羣中的每個節點上。Calico CNI 插件允許您將 Calico 網絡用於任何使用 CNI 網絡規範的編排器。通過標準的 CNI 配置機制和 Calico CNI 插件進行配置。
數據存儲插件(Datastore plugin)
主要任務:通過減少每個節點對數據存儲的影響來擴大規模。它是 Calico CNI 插件之一。
Kubernetes API 數據存儲 (kdd)
將 Kubernetes API 數據存儲 (kdd) 與 Calico 一起使用的優點是:
-
管理更簡單,因爲它不需要額外的數據存儲
-
使用 Kubernetes RBAC 控制對 Calico 資源的訪問
-
使用 Kubernetes 審計日誌生成 Calico 資源更改的審計日誌
etcd
etcd 是一個一致的、高可用性的分佈式鍵值存儲,它爲 Calico 網絡提供數據存儲,並用於組件之間的通信。支持 etcd 僅保護非集羣主機(從 Calico v3.1 開始)。爲了完整起見,etcd 的優點是:
-
讓您在非 Kubernetes 平臺上運行 Calico
-
分離 Kubernetes 和 Calico 資源之間的關注點,例如允許您獨立擴展數據存儲
-
讓您運行包含多個 Kubernetes 集羣的 Calico 集羣,例如,具有 Calico 主機保護的裸機服務器與 Kubernetes 集羣互通;或多個 Kubernetes 集羣。
etcd 管理員指南
IPAM 插件
主要任務:使用 Calico 的 IP 池資源來控制 IP 地址如何分配給集羣內的 Pod。它是大多數 Calico 安裝使用的默認插件。它是 Calico CNI 插件之一。
kube - 控制器(kube-controllers)
主要任務:監控 Kubernetes API 並根據集羣狀態執行操作。kube 控制器。
tigera/kube-controllers 容器包括以下控制器:
-
策略控制器
-
命名空間控制器
-
服務帳戶控制器
-
工作負載端點控制器
-
節點控制器
香蒲(Typha)
主要任務:通過減少每個節點對數據存儲的影響來擴大規模。在數據存儲和 Felix 實例之間作爲守護進程運行。默認安裝,但未配置。Typha 描述和 Typha 組件。
Typha 代表其所有客戶端(如 Felix 和 confd)維護單個數據存儲連接。它緩存數據存儲狀態並刪除重複事件,以便可以將它們分散到許多偵聽器。因爲一個 Typha 實例可以支持數百個 Felix 實例,它大大減少了數據存儲的負載。並且由於 Typha 可以過濾掉與 Felix 無關的更新,因此也降低了 Felix 的 CPU 使用率。在大規模(超過 100 個節點)Kubernetes 集羣中,這是必不可少的,因爲 API 服務器生成的更新數量會隨着節點數量的增加而增加。
花椰菜(calicoctl)
主要任務:創建、讀取、更新和刪除 Calico 對象的命令行界面。calicoctl 命令行可在任何可以通過網絡訪問 Calico 數據存儲(作爲二進制文件或容器)的主機上使用。需要單獨安裝。花椰菜
雲編排器的插件
主要任務:將用於管理網絡的協調器 API 轉換爲 Calico 數據模型和數據存儲。
對於雲提供商,Calico 爲每個主要的雲編排平臺都有一個單獨的插件。這允許 Calico 與編排器緊密綁定,因此用戶可以使用他們的編排工具管理 Calico 網絡。需要時,編排器插件會從 Calico 網絡向編排器提供反饋。例如,提供有關 Felix 活躍度的信息,並在網絡設置失敗時將特定端點標記爲失敗。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/ML5Qqjqn64cOErTAeVzxsQ