Skip to content

antony@notes:~/kubernetes$ cat "Understanding-the-Cilium.md"

Understanding the Cilium

2025-01-03· kubernetes

理解 Cilium 運作原理

Cilium 不僅僅是一個網路解決方案;它是一個強大、現代且極具巧思的網路和安全專案,專為 Container 時代而設計。Cilium 的核心功能是為基於微服務的應用程式提供透明、高性能的網路和安全性,幫助您克服傳統網路方法的限制。

在本章中,我們將深入淺出地向您解釋 Cilium 的基本原理,目的是讓您了解並掌握這些概念。此外,我們還將更新上一章建立的叢集,使其使用 Cilium 作為其 CNI。

Cilium 元件

image

  • Cilium Operator
    • 能夠簡化在 Kubernetes 叢集上部署、更新與維護 Cilium 的流程,包含自動執行安裝、升級以及管理特定設定等工作。它透過使用 Custom Resource Definitions(CRDs)來定義 Cilium 在叢集中的各項設定,並根據這些 CRDs 提供所需的安裝、更新及設定管理能力,大幅減少人工操作的複雜度與重複性。
  • Cilium Agent
    • 在叢集中的每個節點上執行。從高層次來看,它會透過 Kubernetes 或其他 API 接收各種設定,包括網路設定、service load-balancing、network policies,以及 visibility (可視性) 與監控需求。
    • 同時會監聽 Kubernetes 的事件,以偵測 container 或 workloads 的啟動與停止,並管理作業系統核心中的 eBPF 程式,用以控制 containers 之間或 containers 對外的所有網路存取。

Cilium 與 Cilium Operator 相互協作,從叢集層級接收設定與策略,並在每個節點上進行適當的應用。

  • eBPF (Extended Berkeley Packet Filter) : 它使用 eBPF 這項劃時代技術,在不需修改或重新編譯作業系統核心的情況下,即可實現核心層級的程式化能力,讓開發者能更加有效地強化 security policies (安全政策)、deep packet inspection (深度檢測封包) 並實作自訂的 network functions (網路功能)。
  • 第七層可視性方面: Cilium 在應用程式層運作,Cilium 能深入瞭解 應用程式之間如何透過 API 互動,讓您可以根據應用程式層的屬性強制執行安全政策。
  • HTTP 和 gRPC 感知: Cilium 並不僅止於 IP 和 port;它還能感知 HTTP 和 gRPC 通訊協定,為現代 API-driven 的應用程式實現精細的安全政策。
  • 身份感知連接性: Cilium 可確保只有經過認證與授權的服務才能進行通訊,為您的微服務架構增加額外的安全層級。
  • Load Balancing 與 Service Discovery: 將 load balancing 與 service discovery 無縫整合至 Kubernetes 叢集,簡化應用程式的部署與擴充。
  • 原生 Kubernetes 支援: Cilium 是 Kubernetes-native,可與您的叢集無縫整合。這表示可輕鬆部署、自動擴充,並與 Kubernetes Network Policies 原生相容。
  • Global Network Policies: Cilium 為多叢集和多租戶環境提供統一的 policy framework (政策框架),讓您可以定義跨越叢集和租戶的 policies (政策)。

eBPF: Cilium 成功的關鍵要素

Cilium 的強大功能主要建立在名為 eBPF 的技術之上。Berkeley Packet Filter(簡稱 BPF,沒有,我們沒有忘記那個「e」)是一種用於觀察 Linux 作業系統的工具,已經存在好幾年了。透過在作業系統中快速且安全地執行一小段程式碼,BPF 為使用者提供了存取核心的能力。雖然 BPF 最初是為了封包過濾而設計,但它之後被改進,用於動態追蹤 Linux 核心。舉例來說,使用者現在可以撰寫一個與 cgroups 相關的程式,用來允許或禁止對 CPU、記憶體、網路頻寬以及其他程序群組等系統資源的存取。

因此,eBPF(extended BPF)是一種新的 Linux 核心技術,它允許在 Linux 中動態插入強大的安全可視性與控制邏輯。由於 eBPF 在 Linux 核心內運行,Cilium 的 security policies 可以在不修改應用程式程式碼或 container 設定的情況下套用並更新。考量到核心能監控並控制整個系統,歷來作業系統一直是實現安全性、可觀察性與網路功能的理想平台。然而,作業系統核心在系統中扮演關鍵角色,且對安全與穩定性的要求嚴格,導致其在演進上相對保守。也因此,相較於在外部實作的功能,作業系統層級的創新往往較為遲緩。

eBPF 徹底改變了這樣的情況,允許沙盒化的程式在作業系統中運行。對應用程式開發團隊而言,eBPF 程式是一種在 runtime (執行期間) 動態新增功能的實用工具。類似於原生編譯,作業系統透過及時 (JIT) 編譯器與驗證引擎,確保這些程式能在安全且高效的環境下執行。