### Flannel、Calico 和 Cilium 有什么区别

**1. Flannel**

**Flannel** 是一个简单、轻量级的网络解决方案，它主要关注一点：为每个 Pod 分配一个 IP 地址，并确保这些 IP 之间可以路由

- **工作原理**：Flannel 使用一个**覆盖网络（Overlay Network）**来工作。它在每个主机上运行一个代理进程 `flanneld`，这个代理会在 Pod 的 IP 地址之上创建一个虚拟网络。当一个 Pod 发送数据包时，Flannel 会将数据包封装在 UDP、VXLAN 或 Host-Gateway 等协议中，然后通过物理网络发送到目标主机。目标主机上的 Flannel 代理收到数据包后，再将其解封装，传递给目标 Pod
- **特点**：
  - **简单易用**：配置简单，适合初学者或对高级网络功能没有要求的场景
  - **纯路由方案**：Flannel 只负责路由，不提供网络策略（Network Policy）功能。你需要结合其他工具（如 Kubernetes Network Policy）来实现防火墙规则
  - **性能**：由于有封装和解封装的过程，Flannel 的性能通常会比直接路由方案略低

**2. Calico**

**Calico** 是一个更强大、功能更全面的 CNI 插件。它不仅提供网络连接，还内置了强大的网络策略引擎

- **工作原理**：Calico 默认使用 **BGP（Border Gateway Protocol）**来直接路由数据包，而不是使用覆盖网络。每个 Calico 节点都像一个路由器，它会向其他节点广播 Pod 的 IP 地址，从而实现 Pod 间的直接通信。Calico 也可以配置为使用 IP-in-IP 或 VXLAN 模式
- **特点**：
  - **性能高**：由于默认使用 BGP 直接路由，避免了数据包的封装和解封装开销，其性能通常比 Flannel 高
  - **内置网络策略**：Calico 提供了非常细粒度的网络策略功能，你可以像使用防火墙一样控制 Pod 间的通信
  - **适用于大规模集群**：其设计使其非常适合大型、复杂的集群环境

**3. Cilium**

**Cilium** 是一个相对较新但功能强大的 CNI 插件，它的设计理念是基于**eBPF（extended Berkeley Packet Filter）**技术

- **工作原理**：Cilium 使用 **eBPF** 来在 Linux 内核中实现网络和安全功能。它可以在数据包到达网络协议栈之前，在内核层面直接处理和过滤数据包，而无需将数据包从内核空间复制到用户空间。这使得 Cilium 能够提供**超高性能**和**细粒度的安全控制**
- **特点**：
  - **性能卓越**：eBPF 技术使其在性能上优于大多数传统的 CNI 插件
  - **应用层安全**：Cilium 可以在**L7 层**（应用层）实施网络策略。例如，你可以基于 HTTP 请求的路径、方法或 Kafka 消息的主题来设置策略，这比 Calico 的 L3/L4 网络策略更为强大
  - **可观测性**：Cilium 提供了丰富的可观测性工具，可以帮助你追踪数据包的流动和安全策略的执行情况

| 特性/插件 | Flannel              | Calico               | Cilium                               |
| --------- | -------------------- | -------------------- | ------------------------------------ |
| 工作原理  | 覆盖网络 (VXLAN/UDP) | IP 路由 (BGP)        | eBPF in kernel                       |
| 网络策略  | 不提供，需额外配置   | 内置，L3/L4          | 内置，L3/L4/L7                       |
| 性能      | 简单，性能一般       | 高性能               | 极高性能                             |
| 适用场景  | 简单集群，测试环境   | 生产环境，大规模集群 | 需要高吞吐和细粒度安全控制的复杂集群 |
| 优点      | 易于安装和使用       | 功能全面，性能优越   | 性能最佳，支持 L7 策略               |
| 缺点      | 功能单一，无内置策略 | BGP 模式配置复杂     | 技术新，相对复杂                     |