Calico 项目功能分析:聚焦转发面

Calico 项目功能分析:聚焦转发面

项目概述

Project Calico 是由 Tigera 维护的开源项目,是容器网络和安全领域的主流解决方案,每天为全球 166 个国家的 800 多万个节点提供支持。它为 Kubernetes、虚拟机和裸机工作负载提供网络连接和网络安全策略 enforcement 功能,凭借灵活的架构和丰富的功能,成为云原生环境中广泛采用的网络方案。

核心功能

  1. 网络连接:实现工作负载之间的网络连通性,支持多种网络模式和部署环境。
  1. 网络安全策略:不仅支持完整的 Kubernetes 网络策略功能,还提供更丰富的 Calico 网络策略特性。
  1. 服务实现:通过 eBPF 提供优化的 Kubernetes Service 实现。
  1. 多网络选项:在公有云或本地部署中,支持非叠加网络和基于 IPIP 或 VXLAN 的叠加网络。
  1. CNI 插件:为 Kubernetes 提供高效的 pod 网络和 IP 地址管理(IPAM)。
  1. 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 是一个高性能的数据包处理框架,能够为网络密集型工作负载提供更高的吞吐量和更低的延迟。

转发面相关组件

  1. Felix:Calico 的代理组件,运行在每个节点上,负责配置底层的网络转发规则(无论是 eBPF、iptables、nftables 还是其他数据平面技术)、维护网络策略状态等,确保节点上的网络按照预期工作。
  1. BGP 路由栈:Calico 的 BGP 路由栈能够在集群内以及与外部物理网络之间交换路由信息,使得数据包能够正确路由到目标工作负载,支持动态路由,提高网络的灵活性和可扩展性。

总结

Calico 项目的转发面是其核心功能的重要组成部分,通过提供 eBPF、标准 Linux、Windows HNS 和 VPP 等多种数据平面技术,满足了不同场景下的网络需求。无论是追求高性能的云原生环境,还是需要适应特定操作系统的部署,Calico 都能提供灵活且高效的网络转发解决方案,同时结合其强大的网络策略和路由功能,成为容器网络领域的领先选择。

相关推荐
bobz9652 小时前
tcp 状态机
后端
阿杆3 小时前
文心快码 3.5S 发布!实测插件开发,Architect 模式令人惊艳
前端·后端·文心快码
文心快码BaiduComate3 小时前
我用Comate搭建「公园找搭子」神器,再也不孤单啦~
前端·后端·微信小程序
计算机毕业设计指导4 小时前
基于Spring Boot + Vue 3的社区养老系统设计与实现
vue.js·spring boot·后端
拾忆,想起4 小时前
Redisson 分布式锁的实现原理
java·开发语言·分布式·后端·性能优化·wpf
几颗流星4 小时前
Rust 常用语法速记 - 解构赋值
后端·rust
我想当数字游民4 小时前
Go的切片是什么?一些小细节和容易错的地方
后端·golang
肖焱4 小时前
Java中的集合类有哪些?如何分类的?
后端
野生程序员y4 小时前
Spring DI/IOC核心原理详解
java·后端·spring