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号