kubeneters-循序渐进Cilium网络(一)
文章目录
- 概要
- 传统网络
- 不同的网络(或子网)之间通信
- Kubernetes 中的网络
- 在同一栋大楼内的公寓之间通信
- 跨大楼的通信
- 总结
概要
本文通过“封包追踪”方法,深入解析 Kubernetes 网络通信过程。基于 eBPF 的 Cilium 工具,直观展示了数据包在 Pod 间传递的每一步,内容从传统网络的基础知识入手,并逐步解释了相关概念
传统网络
IP 地址:网络接口的数字地址,用于设备(如笔记本电脑)连接 Wi-Fi 或互联网。
MAC 地址:硬件制造商烧录在网络接口上的唯一地址,与 IP 地址不同。
IP 子网(IP Subnet)和子网掩码(Subnet Mask):IP 地址通过子网掩码计算所属的子网群组,相同子网的 IP 地址会得到相同的计算结果,就像一个社区。
房子可以象征一台计算机、一台服务器或一台虚拟机。房子的大小与其 CPU 和内存的配置相关,但为了简化起见,可以假设所有房屋规格相同。每座房子都有一扇门,代表网络接口。这扇门的序列号即为 MAC 地址,而门上的门牌号则是 IP 地址。只有在更换门时,序列号(MAC 地址)才会改变。然而,门牌号(IP 地址)由社区的网络管理员分配,可能因重新分配或网络设计调整而发生变化。
编号为 10 到 19 的蓝色社区属于同一组(同一个 IP 子网),而编号以 20 开头的绿色社区则归属于另一组。每个组包含五座房子,预留了一定的扩展空间。在每个社区中,所有的门通过专用路径直接连接到一个喷泉,喷泉代表交换机(Switch)。喷泉处有一块指示牌,显示通往每扇门的路径。需要注意的是,喷泉并不识别门牌号(IP 地址),它仅依赖门的序列号(MAC 地址)。为了便于人类理解,一张映射表(ARP 表)被用于提供门牌号(IP 地址)与门的序列号(MAC 地址)之间的对应关系。
当位于 14 号房子需要访问 15 号房子时,必须先沿路径到达喷泉。喷泉会通过指示牌提供路径信息,而映射表则显示与目标房子门牌号对应的门序列号。随后,可沿着通往 15 号房子的路径到达目的地。在这一星型拓扑结构中,所有访问操作均需先到达喷泉,因为房子之间不存在直接连接的路径。社区内的这些路径构成了二层(Layer 2)链路,通过这些路径无法到达其他社区。
不同的网络(或子网)之间通信
假设当前在 14 号房子,计划前往 24 号房子。由于 24 号房子位于另一个社区,这意味着 14 号房子的 IP 地址与子网掩码的组合与 24 号房子的结果不同。事实上,第 10 社区与第 20 社区属于不同的网络。因此,可以确定目的地在另一个社区。在这种情况下,需要首先通过喷泉(交换机)找到所在社区的看门人,也就是默认网关,他的住址是 11 号房子。根据网络规则,任何目标地址不在当前社区范围内的请求,都需要先发送给默认网关处理。
默认网关拥有通往第 20 社区的地图(路由表),并且知道通往目标的路径(第三层路由,因为需要离开社区)。根据这张地图,要到达第 20 社区的 24 号房子,需要通过另一个门。此处的“门”代表网络接口。换言之,默认网关所在的 11 号房子实际上还有另一个门,编号为 101。这个门也有其独特的序列号(MAC 地址)。
从 101 号门离开后,可以沿着路径抵达第 20 社区。该社区也有自己的看门人,他居住在 21 号房子。这位看门人的地图(路由表)会指引如何找到目标地址。通过这张地图,可以确定通往目标房子的路径,而第 20 社区内的喷泉会协助完成剩下的路程。喷泉处还可以通过另一张映射表(ARP 表)找到目标房子门的具体路径。从这里开始,只需沿路径前往 24 号房子即可。
返回时,同样可以沿着原路径反向行进,轻松回到 14 号房子。
Kubernetes 中的网络
在掌握了网络的基础知识后,将进一步了解 Kubernetes 中的网络运行机制。尽管它稍显复杂,但通过逐步解析并结合下方的图片,可以更清晰地理解其工作原理:
现在,房子被替换成了大楼。大楼之间的网络结构与传统网络类似,中心由一个交换机或喷泉连接。每栋大楼的入口都有一扇门,门上标有对应的大楼编号(即其 IP 地址),并归属于第 1000 社区。在 Kubernetes 集群中,每栋大楼代表一个节点。
Kubernetes 是一款功能强大的容器编排工具,其中每个容器都被封装在一个 Pod 中。为了简化描述,可以假设每个 Pod 仅包含一个容器,因此在此情境下,两者可以视为等同。Pod 可以被比作大楼中的一套公寓,是大楼内部的独立空间。公寓的大小各不相同,例如可能是两居室、三居室或四居室,这对应于容器在节点上所需的 CPU 和内存资源。有些公寓可能是空置的,意味着大楼还有剩余容量。
在 Kubernetes 中,Pod 的创建和删除是根据实际需求动态调整的。这种动态行为类似于大楼中,当需要时可以新增一套两居室公寓,而在公寓不再被需要时则将其拆除。如果大楼有足够空间,还可以根据需求创建一套五居室公寓。这种灵活性使得 Kubernetes 能够根据资源需求高效地分配和管理集群内的工作负载。
在每栋大楼中,容器(Pod)各自拥有独立的社区(IP 子网)。在 Kubernetes 中,容器网络接口(CNI)的主要功能是为 Pod 分配编号(IP 地址),以实现它们之间的互联通信。默认情况下,Cilium 会为每栋大楼分配一个独立的社区。当一个公寓(Pod)被创建时,Cilium 会为其分配一个编号;当公寓被删除并重新创建时,将获得新的编号,因此这些编号是短暂的。在此示例中,蓝色社区使用的是以 10 开头的编号范围,而绿色社区则使用以 20 开头的编号范围。需要注意的是,这些社区的编号范围与大楼的编号范围是相互独立的,正如kubernetes cluster中node与pod之间分别使用不同的网络范围
这种网络设计被称为覆盖网络(Overlay Network),它是 Kubernetes 中一种常见的网络模型。当然,也存在其他网络设计方案,但覆盖网络因其灵活性和普遍适用性而广泛采用。覆盖网络(Overlay Network)实质上是在节点网络之上构建的一个 Pod 网络。
在同一栋大楼内的公寓之间通信
假设当前位于 12 号公寓,计划前往 14 号公寓进行访问。类似于传统网络中的数据传输过程,这里以数据包的视角模拟这一流程。首先,数据包需要通过自身公寓的出口(即网络接口)离开。但与传统网络的场景不同,此时并未离开整栋大楼,而仅是离开当前的公寓,仍处于大楼的内部网络中。随后,数据包沿着一条专属通道(即内部网络路径)前行,最终到达目标公寓的入口(即 LXC 接口)。
这扇门通向大楼的公共区域,该区域负责路由和调度功能,被称为 Cilium 大厅(蓝色矩形部分)。当选择 Cilium 作为 Kubernetes 集群的网络通信解决方案时,每栋大楼的 Cilium Agent 会部署并管理这一大厅。每栋大楼都配备一个 Cilium Agent,专门负责处理与网络相关的所有事务。
在大厅内,有一位负责路由的守门者,他不属于任何公寓,而是驻守在大厅的中央区域。他带领一支团队,这些团队成员分布在大楼内的不同出入口,为需要导航的请求提供路径指引。这种高效的路由能力得益于 Cilium 使用的 eBPF(增强型伯克利数据包过滤器)技术,这是一种优化网络传输和路由的先进工具,可显著提升通信效率和性能。
当抵达走廊尽头的门时,有一名驻守的助手,负责处理目的地请求。你向其表明需要前往 14 号公寓,助手会通过手中的 eBPF 路由表查找与 14 号对应的路径,并直接指引你到达右上角的走廊出口。无需经过大厅,助手通过优化路径为你提供了更高效的传输方案,使你能够直接抵达目标位置。随后,你通过指定的路径进入目标公寓。在返回 12 号公寓时,系统将沿着相同的路径和流程反向执行,以确保通信的完整性与对称性。
这种调度机制区别于传统的交换方式,借助 eBPF 路由表,能够实现更高效的流量调度和路径优化,大幅提升了通信性能。
跨大楼的通信
假设当前从 12 号公寓发起请求,目标是位于另一栋大楼的 22 号公寓。初始流程与此前一致:从 12 号公寓出发,通过走廊到达尽头,并向驻守在出口的助手寻求路径指引。然而,由于目标地址 22 属于另一个独立的网络子网(社区),助手会将请求引导至该大楼的核心网络组件,即大厅。
在大厅中,路由任务交由网络控制器(门卫)处理。控制器通过查询其路由表,确定到达目标地址 22 的最优路径,并指定出口节点 11(cilium_host)作为传输数据的下一跳。通过这种方式,实现了不同大楼(子网)之间的高效通信。
当您打开那扇门后,会看到另一道门,这是一种蓝色三角形标识的接口,称为 VXLAN 接口。该接口连接至一条虚拟的隧道,该隧道通过建筑物的主出口延伸至外部。在这一过程中,隧道为通信数据提供了封闭保护,避免外部环境的干扰,同时实现了不同网络之间的互联。
到达目标建筑后,通信数据通过 VXLAN 隧道的终点(绿色三角形标识的接口)进入目标网络,并由此被交给驻守在该接口的网络组件。此组件通过 eBPF 路由映射确定目标地址(22号地址)所对应的路径,并引导数据直接通过对应的网络通道到达目标所在的具体子网和位置。
在返回源位置时,数据将沿着相同的路径完成逆向传输,确保通信过程的高效性和稳定性。这种设计通过 VXLAN 隧道有效解决了跨子网通信的复杂性,同时保证了通信的可靠性和安全性。
这属于网络层(Layer 3)的路由操作,因为目标子网与源子网并不相同。在 Kubernetes 中,由于引入了容器网络接口(CNI)和虚拟网络等机制,相较于传统路由,该类型的路由过程具有更高的复杂性。
总结
最后,将上述场景中的元素映射到 Kubernetes 的关键角色或组件:
- 大楼
对应 Kubernetes 的 Node(节点),每栋大楼代表一个物理或虚拟节点,是 Kubernetes 集群中的计算单元。 - 公寓
对应 Kubernetes 的 Pod,每个公寓代表一个 Pod,Pod 是 Kubernetes 中最小的部署单元,通常包含一个或多个容器。 - 公寓内的房间
对应 Pod 内的容器,每个房间表示 Pod 中运行的单个容器。多个容器可以共享 Pod 的资源和网络。 - 门
对应网络接口(Network Interface),每个门表示一个网络接口,负责 Pod 或容器之间的网络连接。 - 走廊对应本地通信路径,走廊表示同一 Node 内 Pod 之间的网络路径或通信通道。
- 助手
对应 Cilium 的 eBPF 数据路径或本地路由规则,助手通过 eBPF 路由表,直接为同一节点内的通信提供最优路径。 - 地图
对应 Cilium 中的 eBPF 程序和路由表,这张地图是 Cilium 的核心,通过 eBPF 技术实现高效的数据包路由与调度。 - 大厅
对应 Kubernetes Node 的 Overlay Network 部分(如 Cilium 的 BPF 实现),大厅是跨 Pod 或跨 Node 通信的汇聚点,体现了 Cilium 在节点上构建的 Overlay 网络逻辑。 - 门卫
- 对应 Cilium Host 或 VXLAN 网关功能,门卫负责跨节点通信时的路由选择和数据包转发,相当于传统网络中的网关角色。
- 大楼的主门
对应 Kubernetes Node 的主入口(如主网卡或 Cilium 的 cilium_host),主门表示数据进入节点的入口点,与外部网络相连。 - 三角形区域
- 对应 VXLAN 接口或 Overlay Network 隧道端点
蓝色或绿色三角形表示 VXLAN 接口,用于跨节点的 Overlay 网络隧道的起点和终点。
通过上述映射,可以清晰地理解这些比喻背后 Kubernetes 网络组件的实际角色和功能。
kubeneters-循序渐进Cilium网络(一)
kubeneters-循序渐进Cilium网络(二)
kubeneters-循序渐进Cilium网络(三)
[kubeneters-循序渐进Cilium网络(四)
相关文章:

kubeneters-循序渐进Cilium网络(一)
文章目录 概要传统网络不同的网络(或子网)之间通信Kubernetes 中的网络在同一栋大楼内的公寓之间通信跨大楼的通信总结 概要 本文通过“封包追踪”方法,深入解析 Kubernetes 网络通信过程。基于 eBPF 的 Cilium 工具,直观展示了数…...

elasticsearch中IK分词器
1、什么是IK分词器 ElasticSearch 几种常用分词器如下: 分词器分词方式StandardAnalyzer单字分词CJKAnalyzer二分法IKAnalyzer词库分词 分词∶即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库…...
Qt之http客户端类
一、HTTP客户端类功能: 1、POST请求发送: 支持发送JSON格式的数据自动处理请求头设置提供上传进度监控、 2、GET请求发送: 简单的GET请求实现支持下载进度监控 3、状态监控: 通过信号槽机制监控上传/下载进度错误处理和状态回调 /…...
18.C语言文件操作详解:指针、打开、读取与写入
目录 1.文件指针2.fopen3.标准流4.fclose5.EOF6.freopen()7.fgetc与getc8. fputc与putc9.fprintf10.fscanf11.fgets12.fputs13.fwrite14.fread15.feof16.fseek17.ftell18.rewind19.fgetpos()与fsetpos20.ferror与clearerr21.remove22.rename 1.文件指针 本篇原文为:…...
深入浅出 OpenResty
1. 引言 1.1. OpenResty简介 OpenResty 是一个基于 Nginx 的高性能 Web 平台,它集成了大量模块,并原生支持 Lua 脚本。这使得开发者能够以非常灵活的方式实现复杂的逻辑,而无需重新编译或扩展 Nginx 核心。OpenResty 的主要特点包括&#x…...

在 .NET 9 中使用 Scalar 替代 Swagger
前言 在.NET 9发布以后ASP.NET Core官方团队发布公告已经将Swashbuckle.AspNetCore(一个为ASP.NET Core API提供Swagger工具的项目)从ASP.NET Core Web API模板中移除,这意味着以后我们创建Web API项目的时候不会再自动生成Swagger API文档了…...

ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技
本文核心 正常跑步动画端枪动画跑起来也端枪 正常跑步动画 端枪动画的上半身 跑起来也端枪 三步走: 第一步制作动画蒙太奇和插槽 第二步动画蓝图选择使用上半身动画还是全身动画,将上半身端枪和下半身走路结合 第三步使用动画蒙太奇 1.开始把&a…...

多活架构的实现原理与应用场景解析
一、多活架构为何如此重要? 企业的业务运营与各类线上服务紧密相连,从日常的购物消费、社交娱乐,到金融交易、在线教育等关键领域,无一不依赖于稳定可靠的信息系统。多活架构的重要性愈发凸显,它宛如一位忠诚的卫士,为业务的平稳运行保驾护航。 回想那些因系统故障引发的…...
一 rk3568 Android 11固件开发环境搭建 (docker)
一 目标 搭建 rk3568 android 系统内核 及固件开发编译调试环境, 支持开发环境导出分享 基于荣品 rk3568 核心板 系统环境: ubuntu22.04 /ubuntu20.04 64位桌面版 编译环境: docker + ubuntu20.04 , 独立的容器隔离环境,不受系统库版本冲突等影响,无性能损耗, 可…...
小结:华为路由器常用的操作指令
以下是华为路由器常用的操作指令(适用于华为企业级路由器,基于VRP操作系统): 1. 基本操作命令 进入用户视图模式 <Huawei> (默认进入用户视图) 进入系统视图模式 <Huawei> system-view [Huawe…...
旅游网站设计与实现
文末附有完整项目代码 在当今数字化时代,旅游网站成为人们获取旅游信息的重要途径。本文将详细介绍旅游网站的设计与实现,让你轻松了解其中的技术奥秘! 一、项目背景 随着社会经济的发展,人们对精神消费愈发重视,旅游…...

【AI大模型】BERT GPT ELMo模型的对比
目录 🍔 BERT, GPT, ELMo之间的不同点 🍔 BERT, GPT, ELMo各自的优点和缺点 🍔 小结 学习目标 理解BERT, GPT, ELMo相互间的不同点理解BERT, GPT, ELMo相互比较下的各自优点和缺点 🍔 BERT, GPT, ELMo之间的不同点 关于特征提取…...

qt 快捷功能 快速生成 setter getter 构造函数 父类虚函数重写 成员函数实现 代码框架 查看父类及父类中的虚函数
qt 快速生成 setter getter 构造函数 父类虚函数重写 成员函数实现 代码框架 1、找到要实现的头文件 2、鼠标移动到在头文件中的类定义的类名上,右键进行选择。 这是插入父类虚函数(父类虚函数重写) 选项弹出来的结果。可以查看到所有父类及父类中的所有的虚函数...

【计算机网络】深入浅出计算机网络
第一章 计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成一种重要的信息服务基础设施 CNNIC 中国互联网网络信息中心 因特网概述 网络、互联网和因特网 网络(Network)由若干结点(Node)和连接这些结点的链路…...

springMVC---resultful风格
目录 一、创建项目 pom.xml 二、配置文件 1.web.xml 2.spring-mvc.xml 三、图解 四、controller 一、创建项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi…...

汽车基础软件AutoSAR自学攻略(三)-AutoSAR CP分层架构(2)
汽车基础软件AutoSAR自学攻略(三)-AutoSAR CP分层架构(2) 下面我们继续来介绍AutoSAR CP分层架构,下面的文字和图来自AutoSAR官网目前最新的标准R24-11的分层架构手册。该手册详细讲解了AutoSAR分层架构的设计,下面让我们来一起学习一下。 Introductio…...
IntelliJ IDEA 主题插件
在 IntelliJ IDEA 中,有很多优秀的主题插件可以帮助你改变 IDE 的外观和配色方案,使得开发过程更加愉悦和高效。以下是一些非常受欢迎和实用的 主题插件,以及如何安装和使用它们的步骤: 🌟 流行主题插件推荐 1️⃣ Ma…...

2025最新JAVA面试八股文【基础篇】
1、面向对象和面向过程的区别 2、标识符的命名规则 3、Java自动装箱与拆箱 4、 方法重载和方法重写的区别 5、 equals与 的区别 6、 Hashcode的作用 7、 String、StringBuffer 和 StringBuilder 的区别是什么? 8、ArrayList和linkedList的区别 9、 HashMap和HashTabl…...
element plus 使用 el-tree 组件设置默认选中和获取所有选中节点id
1. 设置默认选中: 使用 default-checked-keys 属性,设置默认要选中的节点,以数组形式,如下: <el-treeref"treeRef":data"data"show-checkboxnode-key"id":props"defaultProps…...
高级java每日一道面试题-2025年01月09日-数据库篇-视图是什么?
如果有遗漏,评论区告诉我进行补充 面试官: 视图是什么? 我回答: 在Java高级面试中,当讨论到数据库中的视图(View)时,通常指的是一种虚拟表或逻辑表。视图并不存储实际数据,而是基于SQL查询定义的一种数据表示形式。…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...