1. Calico 企业级网络工程导论

在 Kubernetes 集群里,Pod 之间要能互相通信、Service 要能把流量转发到后端、NetworkPolicy 要能真正拦住不该通过的连接——这些能力都不是 Kubernetes 自己实现的,而是交给 CNI(Container Network Interface)插件。Calico 就是其中最主流、也是企业生产环境采用率最高的 CNI 之一。理解 Calico,首先要理解它在整个 Kubernetes 网络栈中的位置:它不是一个"附加组件",而是集群网络数据面的实际承担者。

Calico 在 Kubernetes 网络中的定位

Kubernetes 对网络只有三条基本要求:所有 Pod 可以不经过 NAT 直接互通、所有节点可以不经过 NAT 与所有 Pod 互通、Pod 看到的自己的 IP 与别人看到的它一致。Kubernetes 本身不规定怎么实现,只通过 CNI 规范把"给 Pod 分配 IP、配置网卡、设置路由"这些动作委托给插件。Calico 正是实现这套规范的一个完整方案,它同时提供三件事:

  • Pod 网络连通性:为每个 Pod 分配 IP,并保证跨节点可达。
  • 网络策略执行:把 Kubernetes NetworkPolicy 以及 Calico 自己的 GlobalNetworkPolicy 翻译成数据面的实际过滤规则。
  • 可观测与安全能力:流量日志、连接追踪、加密、DNS 策略等企业级特性。

换句话说,Calico 既是"网络管道",也是"网络防火墙",还是"网络观测点"。这三重身份决定了它在企业集群里往往处于非常核心的位置。

核心组件与数据面

Calico 的架构可以分成控制面与数据面两部分。控制面负责"决定网络应该长什么样",数据面负责"真正转发和过滤报文"。

控制面的核心是 calico-kube-controllers 与各节点上的 calico-node 中的 Felix、BIRD 等进程。Felix 监听 Kubernetes API 与 Calico 的 CRD 资源,把策略和路由意图转换成节点上的实际规则;BIRD 负责在节点之间交换路由信息,让每个节点知道"哪些 Pod IP 在哪个节点后面"。数据面则有两种主流模式:

  • iptables 模式:Felix 把策略写成 iptables/ipset 规则,兼容性最好,但在大规模集群中规则数量会显著增长。
  • eBPF 模式:用 eBPF 程序在网卡层直接处理转发与策略,性能更好、可观测性更强,但对内核版本有要求。

此外还有 calico-typha,它在大规模集群中作为 API 的缓存代理,避免每个节点的 Felix 都直接压到 API Server 上。企业集群动辄几百上千节点,Typha 几乎是必选项。

与 CNI 的关系

很多人会把 Calico 和 CNI 混为一谈。准确地说,CNI 是一份接口规范,Calico 是这份规范的一个实现。当 kubelet 创建 Pod 时,它会调用 CNI 插件二进制(Calico 安装后通常是 /opt/cni/bin/calico 或通过 calico-cni 配置调用),插件再与节点上的 calico-node 协作,完成 IP 分配、veth 网卡创建、路由下发。所以 Calico 的安装本质上是在集群里部署一套 DaemonSet 加若干控制器,并写入 CNI 配置文件。

判断一个集群是否在用 Calico,最直接的方法是查看 /etc/cni/net.d/ 下的配置文件,以及 kubectl get pods -n kube-system 中是否有 calico-node、calico-kube-controllers、calico-typha 等 Pod。

企业级场景下的价值与挑战

企业选择 Calico,通常不是因为"它能通",而是因为它在通的基础上还能管、能看、能控。典型价值包括:用 NetworkPolicy 实现租户隔离与微服务最小权限;用 BGP 或 VXLAN 灵活适配不同底层网络;用 eBPF 提升转发性能;用流量日志和指标支撑安全审计与故障定位。

但企业级也意味着挑战。第一是规模:节点数、Pod 数、策略数增长后,iptables 规则膨胀、BGP 会话抖动、Typha 负载都会成为问题。第二是网络模式选择:Underlay 环境适合 BGP 直连,Overlay 环境常用 VXLAN 或 IP-in-IP,选错会带来 MTU 和性能问题。第三是策略语义:Kubernetes NetworkPolicy 是"默认拒绝、显式允许",但很多团队习惯先放通再收紧,迁移过程中容易出现业务中断。第四是排障复杂度:一个连接不通,可能涉及 CNI 分配、路由、策略、kube-proxy、DNS 多个环节。

下面这张图把 Calico 在 Kubernetes 中的关键对象、组件与数据流关系梳理出来,帮助建立整体认知:

Calico 在 Kubernetes 网络中的组件与数据流 Kubernetes API Server Pod / NetworkPolicy / CRD calico-typha API 缓存代理(大规模集群) Node 1 calico-node Felix + BIRD kubelet 调用 CNI 插件 数据面 iptables / eBPF 转发与策略执行 Pod A 10.244.1.5 Pod B 10.244.1.6 Node 2 calico-node Felix + BIRD kubelet 调用 CNI 插件 数据面 iptables / eBPF 转发与策略执行 Pod C 10.244.2.7 Pod D 10.244.2.8 BGP / VXLAN 跨节点 Pod 通信(经数据面转发) 图例 控制面 / API Calico 节点组件 数据面转发 Pod 工作负载

从图中可以看到,Calico 的控制面从 API Server 获取期望状态,经 Typha 分发到各节点的 calico-node,Felix 把策略和路由意图落到数据面;数据面负责实际的报文转发与过滤;节点之间通过 BGP 或 VXLAN 交换路由,使跨节点 Pod 通信成为可能。理解这条链路,是后续学习 IP 池规划、BGP 配置、NetworkPolicy 编写和故障排查的基础。

学习路径建议

本课程后续会沿着"部署与模式选择 → IP 池与路由 → 策略与安全 → 性能与可观测 → 大规模运维"这条主线展开。建议在动手前先明确自己集群的底层网络条件:是云上 VPC、自建 Underlay,还是纯 Overlay;节点规模是几十还是上千;是否已有安全合规要求。这些前提会直接决定 Calico 的数据面模式、路由方案和策略粒度,也是企业级网络工程与"能跑就行"的分水岭。