K8S-网络组件 Calico

一、Calico 核心概念与特性

什么是 Calico?

Calico 是一套开源的网络和网络安全方案,专为容器、虚拟机和宿主机之间的网络连接设计,可无缝集成于 Kubernetes、OpenShift、DockerEE、OpenStack 等平台。其核心特点是采用纯三层网络架构,通过路由规则而非 Overlay 隧道控制报文流向,大幅减少额外开销。

核心优势

  1. 高性能:基于原生 TCP/IP 协议栈,无 Overlay 封装开销,转发效率高
  2. 可扩展性:采用与互联网相同的 BGP 路由协议,天然支持大规模集群
  3. 易调试性:无隧道封装,网络路径清晰,可直接在主机上进行调试
  4. 低依赖性:仅需三层路由可达,适配 VM、容器、物理机等混合环境
  5. 安全可控:支持细粒度的网络策略(ACL 规则)实现访问控制

主要局限

  1. 路由规模限制:路由数量与容器数量一致,可能超过网络设备处理能力
  2. 运维复杂度:节点上会生成大量 iptables 规则和路由表项,排障难度较高
  3. 功能限制:不支持 VPC,容器 IP 只能从 Calico 指定网段分配,无流量控制功能
  4. BGP 规模依赖:网络扩张受限于 BGP 协议的最大支持规模

二、Calico 架构与核心组件

Calico 的架构围绕 "纯三层路由 + BGP 协议" 设计,核心组件协同工作实现网络连通与策略控制:

组件 功能说明
Felix 运行在每个节点的核心组件,负责接口管理(配置主机 endpoint 流量处理)、路由规则维护(写入内核 FIB 转发信息库)、ACL 规则管理(写入内核确保安全策略)及状态报告(向 etcd 反馈网络健康状态)
Etcd 分布式数据库,存储集群路由信息和网络策略,保证数据一致性,建议至少 3 节点部署以提高容错性
Orchestrator Plugin 协调器插件(如 Kubernetes CNI 插件),实现 Calico 与容器平台的无缝集成
BIRD BGP 客户端,运行在每个节点,读取 Felix 维护的路由信息并通过 BGP 协议在集群内分发
BGP Router Reflector (RR) 解决大规模集群中 BGP 连接数爆炸问题,所有节点仅与 RR 同步路由,减少连接数(替代全互联模式)
Calicoctl Calico 命令行管理工具,用于配置和监控集群网络

组网核心原理

Calico 将每个节点的操作系统协议栈视为 "虚拟路由器",容器作为连接在路由器上的终端,通过 BGP 协议在路由器之间交换路由信息:

  1. 每个容器 / 虚拟机分配唯一的 workload-endpoint(网络端点)
  2. 节点通过 BGP 协议向集群宣告:"某 IP / 网段在我这里,下一跳是我的 IP"
  3. 所有节点通过 BGP 学习到全网路由,从而实现跨节点通信

三、Calico 网络模式详解

Calico 提供两种主要网络模式,适用于不同的网络环境:

1. BGP 模式:高效的原生路由

BGP(边界网关协议)是互联网核心路由协议,Calico 通过 BGP 自动维护集群路由信息,与 Flannel 的 host-gw 模式原理类似,但路由同步更自动化。

BGP 部署模式

  • 全互联模式(Node-to-Node Mesh):所有节点两两建立 BGP 连接,路由直接交换。优点是简单,缺点是连接数随节点数呈 N² 增长,适合节点数 < 100 的集群。
  • 路由反射模式(RR):指定 1 个或多个节点作为路由反射器,其他节点仅与 RR 建立连接并同步路由。解决大规模集群连接数爆炸问题,建议生产环境采用(至少 2 个 RR 节点保证高可用)。

2. IPIP 模式:跨网段的隧道方案

IPIP 是 Linux 内核的隧道技术,将 IP 包封装在另一个 IP 包中(类似 "IP 层网桥"),解决跨网段通信问题。

工作流程

  1. 容器数据包到达主机后,由 IPIP 驱动(tunl0 设备)封装,源 / 目的 IP 替换为主机 IP
  2. 封装后的数据包通过物理网络路由到目标节点
  3. 目标节点解封装,还原原始 IP 包并转发到目标容器

模式对比

维度 BGP 模式 IPIP 模式
流量处理 路由直接转发,无封装 tunl0 设备封装 / 解封装
适用场景 同网段集群,大型网络 跨网段集群
效率 高(原生路由) 略低(需封装)
网络类型 Underlay(底层网络) Overlay(叠加网络)

四、Pod 通信流程深度解析

1. 同一节点内 Pod 通信

无需经过物理网络,完全依赖主机内核路由:

  1. Pod1 通过 vEth pair(一端在 Pod 内为 eth0,另一端在主机为 caliXXX)将数据包发送到主机
  2. 主机查询路由表,发现目标 Pod2 的 IP 对应本地 cali 设备
  3. 数据包通过对应 cali 设备转发到 Pod2 的 eth0

2. 不同节点间 Pod 通信

依赖 BGP 路由同步和物理网络:

  1. Pod1 数据包通过 vEth 到达 Node-A 主机
  2. Node-A 查询路由表(由 BGP 同步),发现目标 Pod2 所在网段的下一跳是 Node-B 的主机 IP
  3. 数据包通过 Node-A 的物理网卡发送到物理网络,路由至 Node-B
  4. Node-B 接收后查询本地路由表,通过对应 cali 设备转发到 Pod2
  5. 回复包按反向路径返回

BGP 在跨节点通信中的核心作用

  • 路由宣告:每个节点的 Felix 将本地 Pod 网段信息写入 BIRD
  • 路由交换:BIRD 通过 BGP 协议将路由信息宣告给其他节点或 RR
  • 路由学习:接收节点学习到路由后更新内核路由表
  • 动态维护:Felix 持续监控并更新路由,确保正确性

五、总结

Calico 凭借纯三层架构和 BGP 协议,在 Kubernetes 网络方案中展现出高性能、可扩展的优势,尤其适合对网络效率和大规模集群有需求的场景。其核心价值在于:

  • 摒弃 Overlay 隧道,依赖原生路由和 BGP 协议,减少性能损耗
  • 支持细粒度网络策略,满足安全隔离需求
  • 灵活的部署模式(BGP 全互联 / RR、IPIP),适配不同网络环境

无论是中小规模集群的全互联部署,还是大规模集群的路由反射模式,Calico 都能通过简洁的设计提供稳定高效的网络能力,是容器网络方案的优质选择。

相关推荐
元亓亓亓5 小时前
考研408--计算机网络--day8--NAT&ARP&DHCP&ICMP&IPv6
网络·计算机网络·nat·arp
studytosky5 小时前
Linux 基础开发工具(3):Git 控制与 GDB 调试实用指南
linux·运维·服务器·网络·数据库·git
pblh1235 小时前
基于Docker部署测试PySpark
运维·docker·容器
Ares-Wang5 小时前
网络》》生成树 STP
网络
IT_mingY6 小时前
k8S网络概述——详细理论知识
网络·容器·kubernetes
while(1){yan}6 小时前
网络协议TCP
java·网络·网络协议·tcp/ip·青少年编程·电脑常识
yBmZlQzJ6 小时前
财运到内网穿透-群晖NAS安装(docker版本)
运维·经验分享·网络协议·docker·容器
txzz88886 小时前
CentOS-Stream-10 系统安装之Firewalld防火墙配置
linux·运维·网络·计算机网络·centos·firewall-cmd·linux防火墙
白学还是没白学?6 小时前
exec db docker from A to B
数据库·docker·容器