k8s 集群 Cilium? 替代Flannel?
在 Kubernetes 集群中將 Flannel 替換為 Cilium 需謹慎操作,以下是完整遷移方案及注意事項:
?? ?一、遷移核心流程?
1. ?環境預檢?
- ?內核版本?:Linux ≥ 4.19.57(推薦 ≥ 5.10)?
- ?Flannel 清理?:
kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml rm -rf /var/lib/cni # 清理殘留配置 ?:ml-citation{ref="4,6" data="citationList"} - ?禁用 kube-proxy?(若存在):
kubectl -n kube-system delete ds kube-proxy
2. ?安裝 Cilium?
# 添加 Helm 倉庫 helm repo add cilium https://helm.cilium.io/ helm repo update # 安裝 Cilium(啟用 eBPF 替換 kube-proxy) helm install cilium cilium/cilium -n kube-system \ --set kubeProxyReplacement=strict \ --set tunnel=vxlan \ --set ipam.mode=kubernetes ?:ml-citation{ref="5,10" data="citationList"} 3. ?驗證安裝?
cilium status # 預期輸出:Cilium Agent/Operator 狀態均需為 "OK" ?:ml-citation{ref="5" data="citationList"} </imageScroll>
? ?二、關鍵配置項說明?
| ?參數? | ?作用? | ?推薦值? |
|---|---|---|
kubeProxyReplacement |
完全替代 kube-proxy 功能 | strict ? |
tunnel |
跨節點通信封裝協議(VXLAN/Geneve) | vxlan(兼容性好)? |
ipam.mode |
IP 分配策略(需與 K8s 原生 IPAM 兼容) | kubernetes ? |
hubble.enabled |
啟用網絡可觀測性 | true(建議開啟)? |
?? ?三、遷移風險與解決方案?
1. ?網絡中斷風險?
- ?現象?:Pod 重啟后 IP 變更導致服務不可用
- ?規避方案?:
bashCopy Code
# 分批遷移節點(灰度重啟) kubectl drain <node-name> --ignore-daemonsets kubectl uncordon <node-name> ?:ml-citation{ref="1,6" data="citationList"}
2. ?策略兼容性問題?
- ?Flannel 限制?:僅支持基礎網絡連通,?無 L7 策略能力? ?
- ?Cilium 策略轉換?:
yamlCopy Code
# 示例:HTTP 層訪問控制(Flannel 無法實現) apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy spec: endpointSelector: {role: frontend} egress: - toEndpoints: - matchLabels: {role: backend} toPorts: - ports: [{port: "80", protocol: TCP}] rules: http: [{method: "GET"}] ?:ml-citation{ref="2,13" data="citationList"}
3. ?性能調優建議?
- ?eBPF 加速模式?(需內核 ≥5.10):
bashCopy Code
helm upgrade cilium --set bpf.masquerade=true - ?Native Routing?(替代 VXLAN):
bashCopy Code
--set routingMode=native ?:ml-citation{ref="10,14" data="citationList"}?? 需底層網絡支持 Pod IP 路由可達
</noteList>
?? ?四、架構對比與收益?
| ?能力? | Flannel | Cilium (eBPF) | ?提升效果? |
|---|---|---|---|
| ?網絡性能? | VXLAN 帶寬損失 33% ?315 | 接近裸金屬性能 ?23 | 吞吐 ↑ 40%,延遲 ↓ 30% |
| ?安全策略? | 僅支持基礎隔離 | L3-L7 精細控制 ?213 | 實現 API 級微隔離 |
| ?服務發現? | 依賴 kube-proxy | 內置 eBPF 負載均衡 ?1016 | 規避 iptables 性能瓶頸 |
| ?加密支持? | 不支持 | IPSec/WireGuard ?214 | 實現節點間流量自動加密 |
? ?五、操作驗收清單?
- ?基礎功能驗證?
- ClusterIP 服務互通
- NodePort 外部訪問
- DNS 解析正常
- ?高級特性測試?
- 執行
cilium connectivity test驗證策略生效 ? - 通過 Hubble UI 觀察流日志(端口 12000)?
- 執行
- ?性能壓測?
- 使用
netperf對比 TCP 吞吐量 - 監控
cilium-agentCPU 占用(建議 ≤ 10%)?
- 使用
遷移后業務流量監控需持續 24 小時,重點關注 UDP 服務及 StatefulSet 狀態?
時間是個偉大的作者,必將給出完美的答案。

浙公網安備 33010602011771號