Calico 项目功能分析:聚焦转发面
项目概述
Project Calico 是由 Tigera 维护的开源项目,是容器网络和安全领域的主流解决方案,每天为全球 166 个国家的 800 多万个节点提供支持。它为 Kubernetes、虚拟机和裸机工作负载提供网络连接和网络安全策略 enforcement 功能,凭借灵活的架构和丰富的功能,成为云原生环境中广泛采用的网络方案。
核心功能
- 网络连接:实现工作负载之间的网络连通性,支持多种网络模式和部署环境。
- 网络安全策略:不仅支持完整的 Kubernetes 网络策略功能,还提供更丰富的 Calico 网络策略特性。
- 服务实现:通过 eBPF 提供优化的 Kubernetes Service 实现。
- 多网络选项:在公有云或本地部署中,支持非叠加网络和基于 IPIP 或 VXLAN 的叠加网络。
- CNI 插件:为 Kubernetes 提供高效的 pod 网络和 IP 地址管理(IPAM)。
- BGP 路由栈:能够向物理网络基础设施通告工作负载和服务 IP 地址的路由。
转发面(数据平面)深度分析
转发面是 Calico 处理数据包转发的关键部分,其设计直接影响网络性能和功能灵活性,Calico 提供了多种数据平面技术选择:
1. eBPF 数据平面
- 启用方式:通过设置 bpfEnabled: true 启用,默认禁用。
- 优势:
-
- 高性能:基于 eBPF 技术,能够在 Linux 内核中高效处理网络数据包,减少用户态与内核态之间的切换开销,提升网络性能。
-
- 优化的 Service 实现:使用 eBPF 实现 Kubernetes Service,提高服务访问的效率。
- 相关配置:
-
- bpfDisableUnprivileged:默认启用,设置 kernel.unprivileged_bpf_disabled 系统控制项,禁用非特权用户对 BPF 的使用,确保 Calico 的 BPF 映射不被非特权用户访问,防止其插入自己的 BPF 程序干扰 Calico。
-
- bpfEnforceRPF:控制是否在所有安装 BPF 程序的主机接口上强制严格的反向路径过滤(RPF),取值可以是 Disabled、Strict 或 Loose,默认值为 Loose。
-
- bpfExcludeCIDRsFromNAT:指定一系列 CIDR,这些 CIDR 将被排除在 NAT 解析之外,以便主机进行处理,典型用途是节点本地服务。
-
- bpfLogLevel:可设置为 debug 等级别,用于调试 BPF 相关功能。
2. 标准 Linux 数据平面
- 基础:依赖 Linux 内核的网络栈和相关工具(如 iptables、nftables 等)实现数据包转发和策略 enforcement。
- nftables 支持:当环境变量 FELIX_FV_NFTABLES 设为 "Enabled" 时,启用 nftables 模式。在该模式下,需要确保 iptables 配置为默认允许,否则默认的丢弃动作会覆盖 nftables 的允许裁决。从提供的 cali-nftables-dump.txt 可以看到,Calico 会创建 calico 表以及相关的链(如 mangle-PREROUTING、filter-FORWARD 等)和集合(如 cali40this-host、cali40all-ipam-pools 等),用于处理网络流量。
- sysctl 配置:在配置主机侧 veth 对时,会对 IPv4 和 IPv6 相关的 sysctl 进行设置,例如启用路由到本地主机、禁用代理 ARP 延迟、启用代理 ARP/NDp、启用 IP 转发等,以确保网络功能的正常实现。
3. Windows HNS 数据平面
针对 Windows 环境,利用 Windows Host Networking Service(HNS)实现容器网络的转发和管理,适应 Windows 容器的网络需求。
4. VPP 数据平面
集成 Vector Packet Processing(VPP)技术,VPP 是一个高性能的数据包处理框架,能够为网络密集型工作负载提供更高的吞吐量和更低的延迟。
转发面相关组件
- Felix:Calico 的代理组件,运行在每个节点上,负责配置底层的网络转发规则(无论是 eBPF、iptables、nftables 还是其他数据平面技术)、维护网络策略状态等,确保节点上的网络按照预期工作。
- BGP 路由栈:Calico 的 BGP 路由栈能够在集群内以及与外部物理网络之间交换路由信息,使得数据包能够正确路由到目标工作负载,支持动态路由,提高网络的灵活性和可扩展性。
总结
Calico 项目的转发面是其核心功能的重要组成部分,通过提供 eBPF、标准 Linux、Windows HNS 和 VPP 等多种数据平面技术,满足了不同场景下的网络需求。无论是追求高性能的云原生环境,还是需要适应特定操作系统的部署,Calico 都能提供灵活且高效的网络转发解决方案,同时结合其强大的网络策略和路由功能,成为容器网络领域的领先选择。