CNI 選型評估 → 安裝 Cilium → 開啟 Hubble 可觀測性 → 連通性測試。
面向 | Cilium | Calico |
---|---|---|
核心資料平面 | eBPF 為主;可選 kube-proxy replacement | 傳統 iptables/BPF 混合;亦提供 eBPF 模式(可取代 kube-proxy) |
網路型態 | VXLAN / BGP / 原生路由等 | VXLAN / BGP / IPIP 等 |
加密 | WireGuard / IPsec(原生支援) | WireGuard / IPsec |
可監控性 | Hubble(即時 flow、Service Map、UI) | Flow logs / 第三方;商業版工具較多 |
生態與文件 | eBPF 原生、雲商支援廣泛 | 歷史悠久、BGP/路由場景成熟 |
本系列要在瀏覽器中低延遲操作模擬(Selkies / WebRTC),需要對延遲、封包路徑與丟包有極高能見度;因此先選 Cilium,並啟用 Hubble 以快速觀察流量與除錯。Calico 也會在後續章節補充替代方案與異同。
NotReady
(尚未安裝 CNI)屬正常。以下步驟在 Control Plane
cp1
執行,kubectl
已指向Cluster。
# 取得 cilium CLI 最新穩定版
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64; [ "$(uname -m)" = "aarch64" ] && CLI_ARCH=arm64
curl -L --fail --remote-name-all \
https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvf cilium-linux-${CLI_ARCH}.tar.gz -C /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
# 安裝 hubble CLI(Monitor用)
HUBBLE_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/hubble/master/stable.txt)
HUBBLE_ARCH=amd64; [ "$(uname -m)" = "aarch64" ] && HUBBLE_ARCH=arm64
curl -L --fail --remote-name-all \
https://github.com/cilium/hubble/releases/download/${HUBBLE_VERSION}/hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
sha256sum --check hubble-linux-${HUBBLE_ARCH}.tar.gz.sha256sum
sudo tar xzvf hubble-linux-${HUBBLE_ARCH}.tar.gz -C /usr/local/bin hubble
rm hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
# 驗證版本
cilium version --client
hubble version
先以「最安全預設」啟動:IPAM 使用
kubernetes
、保留 kube-proxy,之後再考慮切換 kube-proxy-free。
# 安裝(會自動偵測你的環境與版本)
cilium install
# 等待就緒
cilium status --wait
kubectl get pods -n kube-system -l k8s-app=cilium -o wide
kubectl get nodes -o wide # Node 應轉為 Ready
若你的叢集使用 cgroup v2、或 kernel 模組限制,需要額外值(如
--set cgroup.autoMount
、--set bpf.hostRouting
等),可在稍後進階章節調整;一般 Ubuntu/RHEL 9 預設即可。
Hubble 是 Cilium 的可觀測層:能看到 L3/L4/L7 流量、Service Map、封包被哪條 Policy 擋下等。
# 啟用 Hubble(預設會部署 Relay;加上 --ui 會裝前端)
cilium hubble enable --ui
# 取得 Hubble Relay 與 UI 狀態
kubectl -n kube-system get deploy hubble-relay
kubectl -n kube-system get svc hubble-ui
# 本機 port-forward(在你的操作端開瀏覽器看 UI)
kubectl -n kube-system port-forward svc/hubble-ui 12000:80
# 瀏覽 http://localhost:12000 看到 Service Map
若節點有防火牆,請於每個裝有 Cilium 的節點放行 TCP 4244(Hubble Relay)。
# 1) 內建連線測試(會暫時建立多個測試 Pod/Service)
cilium connectivity test
# 2) 即時監控最近 20 則 flow(可查看來源/目的、Verdict)
hubble observe --last 20
# 3) 簡單效能測試
a. cilium connectivity perf --help # 先看說明
b. # 或用 netshoot 做手動 iperf
kubectl run netshoot --image=nicolaka/netshoot -it --rm -- bash
# 進容器後可安裝 iperf3 / mtr 進行測速與路徑檢查
cilium connectivity test
完成後請清理(工具會自動清除資源)。若失敗,通常是節點間 L3 互通、防火牆或 kube-proxy 與 Cilium 設定衝突,Day 4 之後我們會逐步加上監控以利定位。
Cilium 可用 eBPF 直接接手 Service 負載平衡,取代 kube-proxy。切換步驟包含:
kubeadm init --skip-phases=addon/kube-proxy
(新叢集)或先停用 kube-proxy DaemonSet(既有叢集)。cilium install --set kubeProxyReplacement=true
(或更嚴格的 strict
)。--set k8sServiceHost=<APISERVER_IP> --set k8sServicePort=6443
。本来、クラスターはまだ構築中なのですが、やむを得ず文章についてGPTに助力を仰ぎました。ここまでお読みいただき、誠にありがとうございます。これまで記した内容の多くがこの場しのぎとなってしまい、誠に申し訳ございません。後ほど、一部のサーバーで実演いたします。