2. Calico 架构基础:组件概览与数据路径

在平台门户中实施准入策略性能基准测试之前,必须深入理解 Calico 的架构组件及其数据路径。Calico 采用 纯三层网络模型,结合 iptables/eBPF 实现策略执行,其核心组件包括 Felix、Typha 以及 数据存储后端(etcd 或 Kubernetes API)。本章将逐一拆解这些组件的职责、交互方式以及策略执行的关键路径。

2.1 Calico 核心组件概览

Calico 的控制平面由以下组件构成,它们协同工作以维护网络策略的一致性和高性能。

组件 部署形态 核心职责 性能关键点
Felix DaemonSet(每个节点一个) 策略代理:监听数据存储,将策略转换为 iptables/eBPF 规则,管理路由与端点 规则转换效率、节点级策略更新延迟
Typha Deployment(可选,大规模集群推荐) 数据存储代理:聚合 Felix 对 API Server 的 Watch 请求,降低控制面压力 连接数压缩比、事件分发吞吐量
etcd / K8s API 外部依赖 数据存储:保存策略、端点、IPAM 等所有 Calico 资源对象 读写延迟、Watch 响应速度、资源版本管理
calicoctl / kubectl CLI 工具 管理接口:创建/更新/删除 Calico 资源(NetworkPolicy, IPPool 等) API 调用延迟(非数据面关键路径)
性能测试提示: 在基准测试中,Felix 的规则计算耗时和 Typha 的事件分发延迟是影响策略生效速度的两个主要瓶颈。建议在测试报告中单独记录这两个组件的 CPU 和内存开销。

2.2 组件交互与数据路径

下图展示了 Calico 组件之间的通信关系以及策略从创建到生效的完整数据路径。该路径直接影响准入策略的端到端延迟。

Calico 组件交互与策略执行数据路径 Calico 组件交互与策略执行数据路径 数据存储 etcd / K8s API Typha 事件聚合与分发 Watch Felix (Node-1) iptables / eBPF Felix (Node-2) iptables / eBPF Felix (Node-N) iptables / eBPF 策略/端点更新 Pod / Workload Pod / Workload Pod / Workload 策略执行点 (Policy Enforcement Point) Felix 在宿主机内核层(PREROUTING/FORWARD/OUTPUT 链)注入规则,对进出 Pod 的流量进行匹配

2.3 策略执行点详解

Calico 的策略执行发生在 宿主机内核的 Netfilter 框架(iptables)或 eBPF 中。Felix 作为每个节点上的代理,负责将抽象的 Calico 策略资源转换为内核可执行的规则。其执行点主要分为以下三个阶段:

  1. Ingress 路径(入站流量):流量到达宿主机网卡后,经过 PREROUTING 链,Calico 在 FORWARD 链中插入规则,匹配源端点与策略,决定是否放行。
  2. Egress 路径(出站流量):Pod 发出的流量经过 OUTPUT 链,Calico 在 OUTPUT 或 FORWARD 链中匹配目的端点与策略。
  3. 本地端点路径:对于宿主机本地进程,Calico 在 INPUT 和 OUTPUT 链中插入规则,确保宿主机自身的流量也受策略管控。
基准测试关注点: 策略执行点的规则数量直接影响数据面的吞吐量和延迟。在测试中,应记录不同策略规模(例如 100 条、1000 条、5000 条规则)下,Felix 的规则安装时间以及数据面的 P99 延迟变化。

2.4 组件通信协议与端口

了解组件间的通信协议和端口,有助于在平台门户中进行网络隔离和监控配置。

通信方向 协议 默认端口 用途
Felix → K8s API Server HTTPS 6443 Watch 策略、端点、命名空间等资源
Felix → Typha gRPC over TLS 5473 Felix 通过 Typha 代理获取数据存储事件
Typha → K8s API Server HTTPS 6443 Typha 作为唯一客户端 Watch 数据存储
Felix ↔ 内核 Netfilter Netlink N/A Felix 通过 Netlink 套接字操作 iptables/eBPF 规则

2.5 关键架构决策:Typha 的作用

在大型 Kubernetes 集群(节点数 > 50)中,Typha 是一个关键的性能优化组件。其工作原理如下:

  • 连接聚合:所有 Felix 实例不再直接连接 API Server,而是连接到少数几个 Typha 实例。Typha 作为代理,将 Felix 的 Watch 请求合并为一个连接发送给 API Server。
  • 事件分发:Typha 从 API Server 接收到资源更新事件后,将其广播给所有已连接的 Felix 实例。这大幅降低了 API Server 的连接数和 Watch 负载。
  • 性能收益:在 200 节点集群中,使用 Typha 可以将 API Server 的 Watch 连接数从 200 降低到 2-3 个,显著减少控制面压力,提升策略更新速度。
避坑指南: 在基准测试中,如果未部署 Typha,当集群规模较大或策略频繁变更时,Felix 与 API Server 之间的 Watch 连接可能会成为瓶颈,导致策略生效延迟增加。建议在测试环境中同时部署带 Typha 和不带 Typha 的场景,以量化其性能差异。

2.6 数据路径总结

Calico 的策略执行数据路径可以概括为以下流程:

  1. 策略创建:用户通过 kubectl apply 或 calicoctl create 将 NetworkPolicy 写入数据存储(etcd 或 K8s API)。
  2. 事件通知:数据存储触发 Watch 事件,Typha(如果部署)或 Felix 直接接收到策略变更通知。
  3. 规则计算:Felix 根据新的策略和当前端点信息,计算出一组 iptables 或 eBPF 规则。
  4. 规则注入:Felix 通过 Netlink 将规则写入内核的 Netfilter 框架,插入到对应的链中。
  5. 流量匹配:后续 Pod 间的流量经过宿主机内核时,由 iptables/eBPF 规则进行匹配,执行 Allow 或 Deny 动作。