HelloCoder HelloCoder
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
  • 《k8s学习心得》
随笔
关于作者
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
  • 《k8s学习心得》
随笔
关于作者
  • 《从0到1学习Java多线程》

  • 《从0到1搭建服务器》

  • 可观测和监控

  • 玩转IDEA

  • 03-RPC

  • 04-Spring源码

  • 05-《Java日志框架》

  • Flyme公有云平台建设
  • k8s

    • (一)线程是什么
    • 常见疑问
    • 运行一个k8s部署的应用
    • 网络组件
    • docker compose和k8s deployment文件
    • dokcer的网卡
    • k8s-master初始化网段
    • Kubernetes API Service
    • k8s的DNS
    • 什么是 Sandbox
    • 如何访问pod
    • 常见命令
  • 专栏
  • k8s
#网络组件
HaC
2026-06-13
目录

网络组件

在 Kubernetes 的世界里,Flannel 和 Calico 是两款最主流、市场占有率最高的 CNI(容器网络接口)插件。

如果把 K8s 集群比作一个庞大的微服务帝国,那 CNI 就是修筑在容器之间的“高速公路网”。

简单来说:Flannel 是“追求极简的传送门(大二层网络)”,而 Calico 是“功能强悍的专业路由器加安全防火墙(纯三层网络)”。

# 1. 核心技术架构与原理区别

# 🟢 Flannel:经典的 VXLAN 隧道网络(大二层 Overlay 模型)

Flannel 默认采用 VXLAN(Virtual Extensible LAN) 技术。

  • 通信原理: 当跑在 Node 1 上的 Pod A 想要给 Node 2 上的 Pod B 发数据包时,Flannel 会在宿主机内核层把这个“容器数据包”外面再封装上一层普通的 UDP 物理数据包头。
  • 通俗比喻: 就像送快递。原本的信件上写着“寄给容器B(10.244.2.12)”,Flannel 拿过来在外面套了一个大纸箱,写上“寄给虚拟机 Node 2(192.168.1.60)”。数据包到了 Node 2 之后,拆开大纸箱,再把信件送给容器 B。
  • 优缺点:
    • 优点: 对底层网络没有任何要求。不管你的虚拟机是在同一个局域网,还是跨网段、跨云厂商,只要宿主机物理 IP 之间能通,VXLAN 隧道就能通。
    • 缺点: 封包和拆包有明显的性能损耗(大约 5%~10% 的 CPU 和带宽损耗)。

# 🔵 Calico:纯三层路由网络(BGP 三层直连模型)

Calico 默认采用 BGP(Border Gateway Protocol,边界网关协议)。

  • 通信原理: Calico 绝不进行任何封包和拆包!它直接把每一台虚拟机(Node)都变成了一台真正的物理路由器。当你在集群里建一个 Pod,Calico 会通过 BGP 协议广播给全集群的其他机器:“喂!我这儿新来了一个工位 IP,大家都把路由表更新一下!”
  • 通俗比喻: 同样是送快递。信件上写着“寄给容器B(10.244.2.12)”,Node 1 查看自己的内核路由表,发现“去往 10.244.2.0 网段的下一跳是 Node 2”,直接通过物理网络把原装信件投递过去。
  • 优缺点:
    • 优点: 性能近乎裸机(Bare-metal)!因为没有多余的封包拆包过程,网络吞吐量和延迟极其优秀。
    • 缺点: 对底层网络有依赖。如果你的 3 台虚拟机跨了不同的物理网段(三层网络),中间的物理交换机和路由器必须支持并允许 BGP 路由协议协议交互,否则路由学不会,网络就断了(虽然 Calico 也有支持跨网段的 IPIP 隧道模式,但最核心的还是 BGP)。

# 2. 核心功能区别:网络安全策略(NetworkPolicy)

这是两者的分水岭,面试必问。

  • Flannel: 完全不支持网络策略! Flannel 的核心目标就是让“所有人都能和所有人说话”。在 Flannel 集群里,你无法在 K8s 里写规则去禁止“前端 Pod 访问保密的数据库 Pod”。如果你有安全隔离需求,Flannel 束手无策。
  • Calico: 天生的网络安全大师(支持完整的 NetworkPolicy)。Calico 不仅能限制 K8s 内部 Pod 之间的访问权限,甚至能利用 Linux 的 iptables/ipset 限制 Pod 访问集群外部的特定物理机 IP 或域名。

# 3. 选型

在技术选型时,可能会问:“你们团队在做 K8s 架构设计时,是怎么在 Flannel 和 Calico 之间做选型的?”

你可以给出这套教科书级的生产选型逻辑:

对比维度 Flannel (VXLAN 模式) Calico (BGP 模式)
网络模型 Overlay(隧道网络,二层互联) Underlay/Routing(路由网络,三层直连)
数据包损耗 较高(涉及内核层的二次封装与拆包) 极低(纯三层转发,性能几乎等于物理网卡)
网络策略(安全) ❌ 完全不支持 支持(非常强大的多租户隔离与 ACL 控制)
内存/CPU消耗 极低(组件非常轻量) 相对较高(要在本地维护复杂的路由表和 BGP 守护进程)
适用场景 1. 规模较小的测试集群(如你现在的环境) 2. 跨多地域、网络复杂的混合云架构 1. 对网络 I/O 延迟极其敏感的生产业务(如分布式数据库) 2. 严格要求金融级网络隔离的大中型集群

在 K8s 的世界里,网络插件(CNI)有很多种,为了防止大家安装时 IP 冲突,主流的插件在出厂时,都各自硬编码(固定死)了一个默认的专属网段。这就成了行业里的“接头暗号”:

默认网段 代表的底层网络管家 行业地位
10.244.0.0/16 Flannel 最经典、最轻量的老牌 K8s 网络插件。 几乎 90% 的新手自建集群和教学视频,都会选择安装它。
192.168.0.0/16 Calico 大中型企业生产环境最爱的功能级网络插件。
10.88.0.0/16 Podman / Libcontainerd RedHat(CentOS 8)系统自带的单机容器引擎默认网段。

# 🎯 总结(肌肉展示)

“在进行云原生网络选型时,我们主要权衡的是网络拓扑的复杂性、性能损耗以及安全隔离性。

Flannel 适用于中小规模或网络基础拓扑不受控的场景(如跨云部署)。它基于内核的 VXLAN 技术 实现大二层 Overlay 网络,优点是开箱即用、屏蔽底层异构网络,但封包解包带来了不可避免的 CPU 损耗,且天然缺失 NetworkPolicy 的安全管控能力。

而 Calico 则是现代化高性能集群的首选。它在二层互通的环境下,通过 Linux 的 BGP 协议 将宿主机虚拟化为边界路由器,实现了无封包损耗的纯三层扁平路由转发,网络性能无限逼近物理裸机。更重要的是,Calico 提供了强大的 应用层 ACL 策略控制。因此,针对高并发、低延迟且有严苛多租户隔离需求的微服务生产环境,我们倾向于采用 Calico 作为集群的 CNI 底座。”

阅读全文
×

(为防止恶意爬虫)
扫码或搜索:HelloCoder
发送:290992
即可永久解锁本站全部文章

解锁
#网络组件
上次更新: 2026-06-13 17:29:54
最近更新
01
(一)线程是什么
06-14
02
MySQL支持的锁有哪些
06-13
03
HTTP 是不保存状态的协议, 如何保存用户状态
06-13
更多文章>
Theme by Vdoing | Copyright © 2020-2026 HaC
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式