iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
DevOps

新創視角下的 DevOps × AI 探索系列 第 14

Day 14: CNI 網路插件:Calico、Flannel、Cilium 簡介

  • 分享至 

  • xImage
  •  

前言

在前一篇 Day 13: Ingress 與 Ingress Controller 中,我們討論了如何管理進入叢集的 HTTP/HTTPS 流量。然而,在 Kubernetes 裡,除了外部流量的管理,更重要的是 Pod 與 Pod 之間、Node 與 Node 之間的網路互通
這一層網路基礎,並不是 Kubernetes 自帶的,而是透過 CNI(Container Network Interface)插件 來實現。

今天,我們就來看看 CNI 的角色,並且比較三個常見的 CNI 插件:Flannel、Calico、Cilium


什麼是 CNI?

CNI,全名 Container Network Interface,是 CNCF 制定的網路標準介面,定義了容器在建立/刪除時,如何分配與回收網路資源。

在 Kubernetes 裡,CNI 插件主要提供以下功能:

  • 為每個 Pod 分配獨立的 IP 位址
  • 負責 Pod 與 Pod、Pod 與 Service 的流量路由
  • 提供網路策略(NetworkPolicy),管控哪些 Pod 可以互相通訊

換句話說,沒有 CNI,Pod 就算建立起來,也無法互相通訊。


常見 CNI 插件比較

1. Flannel

  • 定位:最簡單、入門首選
  • 架構:Overlay Network(主要透過 VXLAN)
  • 特色:只提供 L3 網路互通,不支援 NetworkPolicy
  • 適合場景:小規模叢集、測試環境、快速 Demo

2. Calico

  • 定位:功能最完整、企業常用
  • 架構:支援 BGP 與 Overlay,彈性高
  • 特色
    • 支援 NetworkPolicy,能做細粒度安全控管
    • 效能佳,可與雲端 VPC 整合
  • 適合場景:需要安全性與規模化管理的生產環境

3. Cilium

  • 定位:新世代基於 eBPF 的 CNI
  • 特色
    • 使用 Linux eBPF 提供高效能封包處理
    • 支援 L3/L4/L7 的 NetworkPolicy(不只控管 IP/Port,還能限制 API 路徑)
    • 提供 Hubble 可視化網路拓樸與流量監控
  • 適合場景:微服務架構、需要高可觀測性與高性能的環境

總結比較表

| 插件   | 架構           | 是否支援 NetworkPolicy | 效能 | 特點              |
|--------|----------------|-------------------------|------|--------------|
| Flannel | VXLAN Overlay | 否                      | 中等 | 簡單、快速上手  |
| Calico  | BGP/Overlay   | 是                      | 高   | 廣泛用於生產環境 |
| Cilium  | eBPF          | 是 (L3-L7)              | 高   | 先進、可觀測性強 |

實作範例:安裝 Flannel CNI

由於 Flannel 最簡單,這裡我們用它來做一個小範例,快速體驗 CNI 的安裝與驗證。

1. 建立 Kubernetes Cluster

以 kind 為例:

kind create cluster --name cni-demo
  1. 安裝 Flannel
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
  1. 驗證 Pod 網路

建立兩個 Pod 測試連通性:

kubectl run pod-a --image=busybox -it --rm --restart=Never -- sh

在 Pod 內安裝 ping 並測試另一個 Pod 的 IP:

ping <pod-b IP>

若能正常回應,即表示 Flannel 運作成功。


延伸思考

在下一篇 Day 15: 多環境部署 中,我們會探討 Dev、Staging、Prod 的隔離方式。
實際上,這些環境往往會有不同的網路策略需求,例如:

  • Dev 環境流量較開放,方便測試
  • Prod 環境必須嚴格控管 Pod 之間的通訊(NetworkPolicy)

這也正是選擇 CNI 插件(特別是 Calico 與 Cilium)時需要考量的關鍵。

結語

  • CNI 插件是 Kubernetes 網路的基石,沒有它,Pod 之間無法通訊。
  • Flannel:簡單快速,適合測試環境
  • Calico:功能完整,適合生產環境
  • Cilium:新世代方案,強調高性能與可觀測性

下一篇,我們將進入 Day 15: 多環境部署,看看如何在 Dev、Staging、Prod 中落實不同程度的網路與環境隔離。


上一篇
Day13: Ingress 與 Ingress Controller:管理 HTTP/HTTPS 流量
下一篇
Day 15: 多環境部署:Dev、Staging、Prod 隔離方式
系列文
新創視角下的 DevOps × AI 探索15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言