【Kubernetes从入门到精通】第45篇:Calico——高性能的纯三层网络方案,BGP才是真男人的浪漫
上一篇【第44篇】Flannel——最简单的K8s网络方案下一篇【第46篇】K8s DNS——CoreDNS的黄页服务摘要上一讲我们聊了Flannel——一个能跑就行的买菜车。它用VXLAN把Pod包打包封装丢到物理网络上传输。简单是简单但封装/解封装是有性能损耗的带宽一般要打9折。今天要讲的Calico完全是另一种思路。它压根不走overlay封装而是直接把Pod的IP宣告到物理网络的路由表里让Pod IP成为真正可路由的三层地址。用一个词概括BGP直连裸奔到底。Calico的核心魅力有三点(1)性能几乎等于物理网络没有隧道开销(2)NetworkPolicy支持最完整是零信任网络的标配(3)可观测性、可调试性极强——因为Pod IP就在路由表里你用ip route就能看到一切。不过Calico也有门槛它要求你对底层网络有一定掌控力至少得让BGP能通。如果你在公有云上动不了路由器那Calico的BGP模式可能玩不转只能退而用IPIP/VXLAN封装。读完这篇你就知道为什么大型生产集群基本都选Calico——以及它和Flannel到底差在哪。一、Calico的架构——三个组件各司其职1.1 全景图Calico不像Flannel那样一个二进制搞定一切它的组件分得更细【Calico 核心组件全景】 ┌──────────────────────────────────────────────────────────┐ │ Control Plane │ │ │ │ ┌────────────────┐ ┌────────────────┐ │ │ │ Typha │ │ kube-controllers│ │ │ │ (大规模优化) │ │ (同步K8s资源) │ │ │ └────────────────┘ └────────────────┘ │ └───────────────────────────────┬────────────────────────────┘ │ 读取/下发配置 ▼ ┌──────────────────────────────────────────────────────────┐ │ 每个 Node 上的 守护三剑客 │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Felix │ │ BIRD │ │ confd │ │ │ │ (安全执行者) │ │ (BGP路由守护) │ │ (模板渲染) │ │ │ │ │ │ │ │ │ │ │ │ • 写iptables │ │ • 跑BGP协议 │ │ • 监听etcd │ │ │ │ • 写路由表 │ │ • 宣告Pod路由 │ │ • 渲染BIRD配置│ │ │ │ • 执行Network │ │ • 学习邻居路由 │ │ │ │ │ │ Policy │ │ │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ └──────────────┘ │ │ │ │ │ └─────────┼──────────────────┼────────────────────────────────┘ ▼ ▼ ┌──────────────────┐ ┌──────────────────────────────────────┐ │ Linux 路由表 │ │ BGP 邻居 (其他Node的BIRD) │ │ (Pod CIDR路由) │ │ 我这台机器上有这些Pod听我说 │ └──────────────────┘ └──────────────────────────────────────┘要点Calico的核心是Felix和BIRD。Felix负责在每个节点上落地——写iptables规则实现NetworkPolicy、写路由表BIRD是一个标准的BGP客户端负责把我这台机器上有哪些Pod这件事通过BGP协议告诉其他节点。confd负责把etcd里的配置渲染成BIRD的配置文件。三者配合就实现了Pod IP全网可路由。1.2 为什么需要三个组件你可能会问Flannel一个二进制就搞定了Calico搞这么复杂干嘛答案是——因为Calico要做两件Flannel做不了的事【Flannel vs Calico 能力对比】 Flannel: • 只管Pod包怎么到对端 → 一个二进制够用 • 不管网络策略 → 没有iptables规则要维护 • 不做路由宣告 → 不需要BGP Calico: • 管Pod包怎么到对端 → Felix写路由 BIRD宣告 • 还要管哪些Pod能通哪些不能 → Felix写一大堆iptables • 还要管动态学习路由 → BIRD跑BGP → 事情多了自然要分工二、BGP——Calico性能神话的源头2.1 BGP是什么——“路由界的八卦协议”BGPBorder Gateway Protocol本来是互联网的核心路由协议用来在各大运营商之间交换路由信息。你可以把它理解成**“路由界的八卦协议”**——每个路由器都在喊“我能到这些网段走我这儿”Calico把这套机制搬到了K8s集群里【Calico BGP 路由宣告——Pod IP长腿了自己跑】 Node1 (10.0.0.1) Node2 (10.0.0.2) ┌────────────────────┐ ┌────────────────────┐ │ Pod A: 10.244.1.5 │ │ Pod C: 10.244.2.5 │ │ Pod B: 10.244.1.6 │ │ Pod D: 10.244.2.6 │ └─────────┬──────────┘ └─────────┬──────────┘ │ │ BIRD 宣告: BIRD 宣告: 10.244.1.0/24 10.244.2.0/24 经过我 10.0.0.1 经过我 10.0.0.2 │ │ └────────── BGP 交换 ────────────────┘ │ ▼ Node1 的路由表现在多了 10.244.2.0/24 via 10.0.0.2 Node2 的路由表现在多了 10.244.1.0/24 via 10.0.0.1 → Pod A 访问 Pod C 时包直接走物理路由没有任何封装要点这是Calico和Flannel最本质的区别。FlannelVXLAN模式把Pod包塞进UDP包里再发CalicoBGP模式直接让Pod IP成为物理网络的可路由地址。前者多了一层封装约50字节开销内核处理后者几乎没有开销。在中大规模集群、高吞吐场景下这个差距会被放大得很明显。2.2 BGP vs VXLAN 性能对比维度Calico BGP (Direct)Flannel VXLANCalico IPIP是否封装❌ 无封装✅ VXLAN封装✅ IPIP封装额外字节开销0~50字节~20字节走物理路由✅ 是❌ 走隧道❌ 走隧道性能极高(≈裸网)中等(打折)高(略打折)对底层网络要求高(需BGP可达)低(只要IP通)低跨网段/跨云受限(需支持BGP)✅ 任意IP可达✅ 任意IP可达调试难度低(路由表可见)高(隧道难追)中三、Calico的三种模式——什么时候用什么3.1 IPIP / VXLAN / Direct 怎么选Calico很贴心给了你三种封装模式按底层网络能力挑# 查看当前Calico的封装模式kubectl get ippool-oyaml|grep-Eencapsulation|vxlanMode|ipipMode# 三种模式配置示例# 1. IPIP模式 (跨子网时封装同子网直连)kubectl edit ippool default-ipv4-ippool# ipipMode: CrossSubnet ← 同二层广播域直连跨子网才封装# ipipMode: Always ← 永远封装(最稳但最慢)# ipipMode: Never ← 完全不封装(就是纯BGP要求网络可达)# 2. VXLAN模式 (不需要BGP纯overlay)# vxlanMode: CrossSubnet / Always# 3. 纯BGP (Direct) —— ipipMode: Never 且 vxlanMode: Never# 性能最好但要求所有Node之间IP层直接可达(无NAT、无防火墙挡BGP)【Calico 三种模式决策树】 你的底层网络能跑BGP吗(Node间能直接交换路由) │ ├─ 能 → 选 Direct (ipipMode: Never) │ ✅ 性能最佳Pod IP全网可路由 │ ⚠️ 要求无NAT、防火墙放行BGP(179端口)、二层可达 │ ├─ 不能但同子网内可达 → 选 IPIP: CrossSubnet │ ✅ 同子网直连(快)跨子网才封装(兜底) │ └─ 完全不可控(公有云/跨VPC) → 选 VXLAN / IPIP: Always ✅ 任意IP可达环境都能用 ❌ 有封装开销性能略降3.2 一张表总结模式封装性能适用场景关键配置Direct (BGP)无⭐⭐⭐⭐⭐自建机房/可控网络/性能敏感ipipMode: NeverIPIP CrossSubnet部分⭐⭐⭐⭐混合网络(同子网多)ipipMode: CrossSubnetIPIP Always全⭐⭐⭐跨VPC/公有云ipipMode: AlwaysVXLAN全⭐⭐⭐不要BGP又要overlayvxlanMode: Always四、NetworkPolicy——Calico的杀手锏4.1 为什么Calico的政策最完整这是Calico和Flannel拉开差距的地方。Flannel根本不支持NetworkPolicy——它只管连通不管隔离。而Calico从一开始就把网络策略当成核心能力。# Calico 实现的高性能 NetworkPolicy 示例apiVersion:networking.k8s.io/v1kind:NetworkPolicymetadata:name:deny-all-except-dnsnamespace:prodspec:podSelector:{}# 选中该namespace所有PodpolicyTypes:-Ingressingress:-ports:-port:53# 只允许DNS出站(否则Pod连名字都解析不了)protocol:UDP-port:53protocol:TCP# Calico 还支持更强大的 GlobalNetworkPolicy (集群级)kubectl apply-f-EOF apiVersion: crd.projectcalico.org/v1 kind: GlobalNetworkPolicy metadata: name: default-deny-all spec: selector: all() types: - Ingress - Egress EOF# ↑ 这条规则会默认拒绝一切——典型零信任起点要点Calico的NetworkPolicy不是用iptables暴力实现的那会像Flannel其他插件那样规则爆炸而是用** Felix ipset** 高效实现的。ipset把大量IP放进一个集合iptables只需一条规则就能匹配整个集合性能比纯iptables链好太多。这也是为什么大规模集群的网络策略首选Calico。4.2 Felix写规则的过程【Felix 把 NetworkPolicy 翻译成 iptables】 你写: NetworkPolicy 只允许frontend访问backend:8080 │ ▼ Calico API (etcd/datastore) 通知 Felix │ ▼ Felix 计算: backend Pod IP集合 {10.244.2.5, 10.244.2.6} frontend Pod IP集合 {10.244.1.5, 10.244.1.6} │ ▼ Felix 调用 ipset 创建集合 ipset create cali-s:src frontend-ips ipset add cali-s:src 10.244.1.5 ipset add cali-s:src 10.244.1.6 │ ▼ Felix 写一条iptables规则搞定 -A FORWARD -m set --match-set cali-s:src src \ -m set --match-set cali-d:dst dst \ -p tcp --dport 8080 -j ACCEPT五、实战装一个Calico并验证BGP5.1 安装kubeadm场景# 下载官方manifestcurlhttps://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml-O# 按需修改 CIDR要和 kubeadm --pod-network-cidr 一致# 然后一把梭安装kubectl apply-fcalico.yaml# 等所有 calico-node 变成 Runningkubectl get pods-nkube-system-w|grepcalico5.2 验证BGP邻居建立# 进到某个 calico-node 容器里看BGP邻居kubectlexec-nkube-system calico-node-xxxxx --\calicoctlnodestatus# 输出示例:# Calico process is running.# IPv4 BGP status# ---------------------------------------------------------------# | PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |# ---------------------------------------------------------------# | 10.0.0.2 | node-to-node mesh | up | 10:23:11 | Established |# | 10.0.0.3 | node-to-node mesh | up | 10:23:12 | Established |# ---------------------------------------------------------------# ↑ 看到 up / Established 就说明BGP邻居建立成功了# 看路由表确认学到了其他Node的Pod网段iproute show|grepbird# 10.244.2.0/24 via 10.0.0.2 dev eth0 proto bird# 10.244.3.0/24 via 10.0.0.3 dev eth0 proto bird要点看到proto bird的路由就是Calico通过BGP学到的。这说明Pod IP已经上路由了——从这一刻起Pod间的通信走的是纯三层路由没有任何overlay封装。你可以ping一下别的Node上的Pod IP验证连通性。本篇小结Calico的思路和Flannel完全相反它不靠overlay封装而是用BGP把Pod IP宣告成物理网络的可路由地址性能几乎等于裸网。它的三大组件Felix写规则/路由、BIRD跑BGP、confd渲染配置配合默契其中Felixipset实现的高效NetworkPolicy是它最硬的杀手锏。选模式时记住决策树网络可控就Direct最猛公有云受限就IPIP/VXLAN兜底。后面我们会看到CoreDNS——另一个看不见但离不开的基础设施。上一篇【第44篇】Flannel——最简单的K8s网络方案下一篇【第46篇】K8s DNS——CoreDNS的黄页服务

相关新闻

震惊!各类考试适用的答题卡大揭秘,河北文瀚技术表现如何?

震惊!各类考试适用的答题卡大揭秘,河北文瀚技术表现如何?

在各类考试、测评场景中,答题卡的质量至关重要,它不仅影响着考生填涂的体验,更关系到机器识别的准确性。为了帮助对答题卡质量有需求的人群更好地了解相关产品,本次对包括河北文瀚技术等厂家的答题卡进行了测评。本次参与测评的产…

2026/9/30 13:46:18 阅读更多 →
深入了解 AiPy(爱派):当桌面 AI 不再只是聊天

深入了解 AiPy(爱派):当桌面 AI 不再只是聊天

在人工智能持续进化的当下,我们面对的不是模型太少,而是工具过于零散。大多数人每天要在不同的网页标签和客户端之间来回切换,把同一个问题重复问给不同的 AI,却得不到一个真正落地执行的结果。如果你正在关注国内开源桌面AI助手软…

2026/10/11 12:08:16 阅读更多 →
免费Steam创意工坊下载器WorkshopDL完整上手记录:三步下载Steam模组,跨平台玩家也能玩到创意工坊内容

免费Steam创意工坊下载器WorkshopDL完整上手记录:三步下载Steam模组,跨平台玩家也能玩到创意工坊内容

免费Steam创意工坊下载器WorkshopDL完整上手记录:三步下载Steam模组,跨平台玩家也能玩到创意工坊内容 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 先…

2026/10/7 1:51:02 阅读更多 →

最新新闻

LeetCode 543:二叉树直径的高效解法与JS实现

LeetCode 543:二叉树直径的高效解法与JS实现

1. 题目理解与需求分析今天要解决的是LeetCode第543题"二叉树的直径"。这是一道经典的二叉树遍历问题,题目描述很简单:给定一棵二叉树,你需要计算它的直径长度。二叉树的直径是指树中任意两个结点间最长路径的长度,这条…

2026/10/14 0:50:56 阅读更多 →
Python爬虫实战:漏洞库数据抓取与MySQL入库全流程

Python爬虫实战:漏洞库数据抓取与MySQL入库全流程

简介:这是一份面向网络安全初学者与Python爬虫实践者的综合项目源码包,围绕CNVD、CNNVD、CVE三大权威漏洞库的数据采集、存储与可视化展开,适合想打通爬虫、数据库与GUI开发链路的学习者。包内共72个文件,以py脚本、toc与spec打包…

2026/10/14 0:50:56 阅读更多 →
虚拟商城系统模块化拼装:八套模块选型与支付交付实战

虚拟商城系统模块化拼装:八套模块选型与支付交付实战

简介:友价在线虚拟商城最新版是一套面向源码交易、域名交易等虚拟商品买卖场景的综合性电商系统,适合个人站长、开发者及中小团队快速搭建可运营的交易平台。系统采用模块化设计,涵盖商品管理、订单处理、用户管理、支付接口集成与安全保障等…

2026/10/14 0:50:56 阅读更多 →
Python 3.6.5 Linux离线安装全攻略:从依赖到虚拟环境

Python 3.6.5 Linux离线安装全攻略:从依赖到虚拟环境

简介:这份资源是面向Linux离线环境的Python 3.6.5集成安装包,专为内网服务器、无外网权限或需要快速搭建Python开发环境的用户准备。包内已集成NumPy、Pandas、TensorFlow 1.10等科学计算与机器学习库,Django 2.1、djangorestframework 3.8、…

2026/10/14 0:50:56 阅读更多 →
课堂行为检测数据集VOC+YOLO双格式解析与训练避坑指南

课堂行为检测数据集VOC+YOLO双格式解析与训练避坑指南

简介:一份面向学生课堂行为检测的VOCYOLO格式数据集,整体覆盖5622张图片、7个行为类别(dk、dx、js、tt、xt、zl、zt),适合目标检测学习者及教育AI研究者用于课堂行为识别模型训练与评测,整体设计贴近真实教…

2026/10/14 0:50:56 阅读更多 →
51单片机矩阵键盘与数码管动态显示:完整电路、代码与调试指南

51单片机矩阵键盘与数码管动态显示:完整电路、代码与调试指南

矩阵键盘按键识别加数码管动态显示,这个组合在51单片机学习里属于“怎么绕都绕不开”的项目之一。很多人第一次看到“矩阵键盘”“数码管”“动态显示”这几个词凑在一起就有点慌,觉得既要读键盘又要刷新屏幕,逻辑会不会很乱。其实这个项目的…

2026/10/14 0:49:56 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →