iT邦幫忙

2025 iThome 鐵人賽

DAY 17
1
DevOps

牧場主的 K8s 放牧日記系列 第 17

Day 17: Cilium CNI 基礎概念與架構 - 牧場的高科技網路魔法師

  • 分享至 

  • xImage
  •  

牧場主今日工作

今天要來認識牧場裡的超級網路魔法師 - Cilium!就像傳統的牧場管理員需要走遍每個角落確認牛隻狀況,傳統的 CNI 也需要透過 iptables 逐一檢查網路規則。但 Cilium 就像是配備了先進無人機的現代牧場主,可以即時監控整個牧場,效率高且功能強大。準備好一起探索這個基於 eBPF 技術的網路世界了嗎?

技術背景與概念

CNI (Container Network Interface) 簡介

在 Kubernetes 的世界裡,CNI 就像是牧場的交通網路系統,負責讓每個 Pod(牛隻)都能順利找到回家的路。

CNI 在 Kubernetes 中的主要職責

  1. 為 Pod 分配 IP 位址 - 給每隻牛配發專屬的身分證
  2. 設定網路路由 - 建立牧場內的道路系統
  3. 管理 Pod 之間的網路連接 - 確保牛隻間能順利溝通
  4. 處理網路策略和安全性 - 設置圍欄和安全檢查點

eBPF:Linux 核心的革命性技術

Cilium 的核心魅力來自於 eBPF (extended Berkeley Packet Filter),這是一項改變遊戲規則的 Linux 核心技術。

eBPF 技術特色

  • 核心內執行:就像在牧場的中央控制室直接下指令,無需跑腿傳話
  • 動態插入:可以在不重啟系統的情況下載入新功能,如同即時更新牧場管理規則
  • 高效安全:核心內驗證器確保程式安全運行,JIT 編譯器提供原生執行效率

技術優勢

# 傳統 iptables 方式:線性規則匹配,效能隨規模下降
iptables -A FORWARD -s 10.0.1.0/24 -d 10.0.2.0/24 -j ACCEPT
iptables -A FORWARD -s 10.0.1.0/24 -d 10.0.3.0/24 -j DROP
# ... 成千上萬條規則需要逐一檢查

# eBPF 方式:使用高效雜湊表,近似 O(1) 查找速度
# 直接在核心空間處理,避免上下文切換開銷

https://ithelp.ithome.com.tw/upload/images/20250831/20141794opJ3th6yYe.png

Cilium 核心特色功能

1. 高效能網路處理

Cilium 利用 eBPF 技術實現了突破性的網路處理效能:

XDP (eXpress Data Path) 加速

  • 在網路驅動程式層級直接處理封包
  • 繞過傳統網路堆疊,實現極低延遲
  • 支援大多數 10G 或更高速率的網路卡

效能特色

  • 基於 eBPF 的雜湊表查找,避免 iptables 的線性掃描開銷
  • 在大規模環境中表現更佳,不會隨著規則數量增加而效能下降
  • 直接在核心空間處理封包,減少上下文切換

2. 無 Sidecar 的 Service Mesh

傳統的 Service Mesh 就像給每隻牛都配一個貼身保鏢,Cilium 則是建立了智慧型的牧場安全系統:

核心特性

  • 去中心化架構:每個節點一個 Envoy 代理,而非每個 Pod 一個
  • 自動加密:使用 IPSec(網路層加密協定)或 WireGuard(現代 VPN 技術)自動加密 Pod 間的通信
  • 透明代理:無需修改應用程式程式碼

3. 身分識別式安全模型

Cilium 不再依賴傳統的 IP 位址安全模型,而是採用更智慧的身分識別方式:

安全功能

  • 基於 Kubernetes 標籤的身分感知策略
  • 支援第 3 到第 7 層的網路策略
  • 與網路位址解耦的身分安全模型
# 基於身分的安全策略範例
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: backend-policy
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
      rules:
        http:
        - method: "GET"
          path: "/api/.*"

Cilium 架構組件詳解

核心組件

1. Cilium Agent(核心代理)

  • 部署方式:每個節點都運行一個 Agent
  • 主要功能
    • 管理 eBPF 程式的載入和卸載
    • 處理網路策略執行
    • 負載平衡和服務發現
    • IP 地址管理(IPAM)

2. Cilium Operator(集群操作者)

  • 部署方式:集群級別的單一實例
  • 核心職責
    • 集群層級的 IP 地址管理
    • 身分垃圾收集和資源清理
    • CiliumEndpoint 物件管理
    • 跨集群資源同步

3. CNI Plugin(容器網路介面外掛程式)

  • 功能:將高級策略轉換為 eBPF 程式
  • 職責:Pod 網路配置和策略執行

資料存儲架構

預設模式:使用 Kubernetes CRDs

# 查看 Cilium 相關的 CRDs
kubectl get crd | grep cilium
# 會顯示各種 cilium.io 的自定義資源,如:
# - 端點管理相關的 CRDs
# - 身分管理相關的 CRDs  
# - 網路策略相關的 CRDs
# - 集群級別策略相關的 CRDs

與傳統 CNI 的差異比較

技術架構對比

比較項目 傳統 CNI (Flannel/Calico) Cilium
資料平面 iptables/netfilter eBPF
路由效能 線性規則匹配 雜湊表查找
策略層級 L3/L4 (IP/Port) L3-L7 (應用層)
可觀測性 需要外部工具 內建 Hubble
Service Mesh 需要額外 sidecar 原生支援

效能差異

擴展性特色

# Cilium 在大規模環境中的優勢
- eBPF 雜湊表:O(1) 查找時間,不受規則數量影響
- 無 iptables 依賴:避免線性規則匹配的效能瓶頸
- 核心空間處理:減少使用者空間和核心空間的切換開銷

網路處理效能

  • 傳統 CNI:隨著規則數量線性增長的處理時間
  • Cilium:基於雜湊表的 O(1) 查找,效能不隨規模下降

系統需求與部署考量

硬體需求

Linux 核心版本

  • 最低要求:Linux kernel >= 5.10 或等效版本(如 RHEL 8.6 的 4.18 kernel)
  • 建議版本:最新的長期支援版本
  • 為什麼選擇 Ubuntu:因為 Ubuntu 提供較新的 kernel 版本,完美支援 eBPF 功能

網路硬體

  • 支援 XDP 的網卡(大多數 10G 或更高速率的網卡)
  • 現代 CPU 架構(AMD64 或 AArch64)

基礎設施準備

環境配置

# 1. 關閉 OS 層防火牆(Kubernetes 基本需求)
sudo systemctl disable firewalld

# 2. 確認 kernel 版本
uname -r
# 應該 >= 5.10

# 3. 檢查 eBPF 支援
sudo ls /sys/fs/bpf

集群規模建議

  • 測試環境:最少 2 台 VM(1 master + 1 worker)
  • 生產環境:建議 3+ 台 worker 節點以確保高可用性
  • 大規模部署:Cilium 設計用於支援企業級大規模集群,但具體規模需依硬體資源而定

今日總結與明日預告

今天我們深入了解了 Cilium 這個現代化的 CNI 解決方案!從 eBPF 的核心技術到完整的架構組件,Cilium 代表了 Kubernetes 網路技術的前沿發展。雖然學習曲線較陡峭,但其帶來的效能提升和豐富功能絕對值得投資。

明天我們將實際動手操作 Cilium 的觀測工具,學習如何使用 Hubble 平台監控網路流量,以及掌握 Cilium CLI 的除錯技巧,讓你成為網路問題的偵探高手!

💡 牧場主小提示:Cilium 就像是從傳統牧場管理員升級到無人機牧場主!雖然操作更複雜,但效率和洞察力大幅提升。記住:eBPF 是魔法,kernel 5.10+ 是施法條件,新手建議先在測試環境練功,別直接在生產環境施展黑魔法!


上一篇
Day 16: ResourceQuota 資源配額控制 - 牧場飼料分配大作戰
下一篇
Day 18: Cilium 網路觀測與除錯工具 - 牧場的智慧監控系統
系列文
牧場主的 K8s 放牧日記18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言