CNI 负责什么
容器网络接口插件负责两件事:给每个 Pod 分配地址,并保证这些地址跨节点可达。Kubernetes 本身不实现网络,只约定模型:每个 Pod 有独立地址、Pod 之间不做地址转换直接互通、节点与 Pod 之间也互通。插件选型会直接影响转发性能、策略能力与可观测性。
基本信息
| 适用平台 | 自建集群需自行安装,托管集群通常提供有限选项 |
|---|---|
| 配置目录 | /etc/cni/net.d |
| 二进制目录 | /opt/cni/bin |
| 核心职责 | 分配地址、配置路由、执行网络策略 |
| 选型依据 | 是否需要策略、是否需要可观测性、对转发开销的容忍度 |
典型使用场景
- 自建集群初始化后必须先装插件,否则 Pod 长期停在等待网络状态
- 需要按命名空间限制东西向流量,必须选支持策略执行的插件
- 大流量场景关注转发开销,评估覆盖网络与三层直通的差别
- 排查跨节点不通:先确认插件副本正常、节点路由正确
- 更换插件前做迁移规划,避免节点进入异常状态
节点与接口检查
节点与接口检查
kubectl get pods -n kube-system -o wide | grep -i cni # 插件副本是否就绪
ip -br addr | grep -E 'cni|cali|cilium|flannel' # 节点上的网络接口
ip route | head -20 # 跨节点路由是否写入
kubectl run net-test --rm -it --image=busybox -- ping -c2 10.244.1.3 # 跨节点连通性常见插件对比
| 插件 | 数据面特点 | 备注 |
|---|---|---|
| Flannel | 覆盖网络,配置简单 | 默认不含策略执行能力 |
| Calico | 三层路由或覆盖网络 | 策略与网络诊断工具较完整 |
| Cilium | 基于内核可编程数据面 | 可观测与七层策略能力丰富 |
| 云厂商插件 | 与云上私有网络集成 | 地址直接从子网分配 |
网络策略是否真正生效,取决于插件有没有实现执行逻辑。插件不支持时,策略对象能创建成功却不会限制任何流量。
自建集群更换插件需要清理旧配置与节点上的路由残留,操作不当会让节点进入不可用状态。务必先在测试环境完整演练。