【容器雲】Calico 組件架構

Calico 組件

下圖顯示了 Kubernetes 的必需和可選 Calico 組件,具有網絡和網絡策略的本地部署。

Calico 組件

雲編排器的插件

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 一起使用的優點是:

etcd

etcd 是一個一致的、高可用性的分佈式鍵值存儲,它爲 Calico 網絡提供數據存儲,並用於組件之間的通信。支持 etcd 僅保護非集羣主機(從 Calico v3.1 開始)。爲了完整起見,etcd 的優點是:

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