flannel详细介绍

一、前言

    Flannel 是一个简单、高效的容器网络解决方案,适用于需要在多个主机上运行容器的场景。它通过虚拟网络技术和 IP 地址管理来实现容器之间的通信和跨主机连接,为容器平台提供了可靠的网络基础设施,flannel有三种模式,分别是udp、vxlan、host-gw,每种模式的性能都不一样,下面就来介绍一下三种模式的性能以及原理

二、模式解析

讲解前先来了解一下veth pair,veth pair 是 Linux 内核中的一种网络设备,它由两个相互连接的虚拟网络接口组成。这两个接口成对出现,数据从一个接口进来,会从另一个接口出去。通常,一个接口连接到一个网络命名空间(如容器或 Pod),另一个接口连接到主机的网络命名空间或一个桥接设备(bridge),veth pair 只是简单地转发数据包,不进行任何网络层的处理,在k8s集群的节点中,每个节点都有一个cni0的虚拟网卡,这个就是veth pair网桥设备

udp

udp是flannel最早使用的一种模式,但是性能却是最差的,现已被弃用

1.在k8s集群中使用udp模式部署flannel时,会在所有节点生成一个flannel0的虚拟网卡,并且每个虚拟网卡会生成一个网段就是一个子网,而这个 flannel0 它是一个 TUN 设备,TUN 设备是一种工作在三层的虚拟网络设备,它的功能就是在操作系统内核和用户应用程序之间传递 IP 包,flannel会将所有节点的flannel0的网段信息与其对应的宿主机ip地址形成key-value对,并将key-value对存储到etcd集群中

这里使用node01的pod访问node02的pod的工作过程来说一下udp的原理,流程如下图所示

2.10.244.4.5容器访问10.244.3.5容器时会根据容器中的默认路由将数据包发送到cni0网桥中

3.网桥通过内核态中的路由表查询转发到flannel0中

4.flannel0会将这个数据包转给flannel进程,flannel进程通过该数据包目的地址的子网到etcd中查询,前面有说到集群创建新的节点时flannel会将所有节点的flannel0的网段信息与其对应的宿主机ip地址形成key-value对存储到etcd中,在etcd中通过子网地址查询到所属的node节点的地址

5.flannel就会用查询到的宿主机地址作为目的地址,本地地址作为源地址,并且用flannel端口作为目的端口将原ip包封装为一个udp包,并将udp包传递到内核态中,通过宿主机的网卡发送到目的宿主机的8285端口,即flannel进程的端口

6.node2宿主机的flannel进程接收到数据包后,就会拆解数据包,解析到ip包后将该包转发到flannel0,flannel0转发给内核态

7.内核态根据路由表转发到cni0网桥中

8.cni0网桥会查找数据包的目标ip地址,并确定该ip地址的端口记录,如果有,就从该端口发送数据包,如果没有记录就通过arp协议广播帧,得到应答后就能知道端口与ip的映射关系,从而将数据包发往该端口 

通过以上工作流程会发现期间存在多次的用户态和内核态之间的数据拷贝

1.容器进程发送ip包到cni0网桥进入内核态

2.flannel0将ip包发送到用户态的flannel进程

3.flannel进程将ip包封装为udp包后发送到宿主机网卡进入内核态

4.目的宿主机的网卡接收到udp包后发送到用户态的flannel进程

5.flannel进程接收udp包后拆包,将拆出的ip包发送到flannel0进入内核态

6.cni0将ip包发送到容器进程

其实用户空间和内核空间之间的上下文切换会增加处理数据包的延迟和系统开销,这也是udp性能差的主要原因,而且用户态封装包通常需要通过系统调用(如 sendto、recvfrom)将数据包传递给操作系统内核进行发送和接收

vxlan

VXLAN(Virtual Extensible LAN)是一种用于在现有网络基础设施上创建虚拟网络的隧道协议,用于在第2层网络上创建虚拟化的第2层网络(即虚拟局域网)。它通过将第2层以太网帧封装在第4层 UDP 数据包中,从而在第3层网络上进行传输

vxlan模式就是减少用户态的使用,将封装包和拆解包都在内核态上,从而优化性能,原理是通过一个大的二层网络将地址段覆盖,使其处于同一个子网内,然后再从这个大的子网下面分出小的子网

通过配置文件我们可以看到,flannel的子网是10.244.0.0/16

而每个节点的容器地址范围就处于10.244.1.0/24、10.244.2.0/24等这些网段中

在 Flannel 的 VXLAN 模式下,每个节点(主机)都会创建一个 VXLAN 隧道接口,用于在不同节点之间传输容器流量,即flannel.1也叫VTEP,VTEP的作用是将ip包封装成二层数据帧,然后再将二层数据帧加上vxlan的头,再加上目的地址封装为一个udp包,且还作为一个网桥,转发udp包到宿主机的网卡上

1.在k8s集群中使用vxlan模式部署flannel时,会在所有节点生成一个flannel.1的虚拟网卡,并且每个虚拟网卡会生成一个子网的IP地址,flannel会将每个节点的flannel.1的地址和mac地址信息发送到其它节点上存储,即ARP记录,同时每个节点将其余节点的宿主机地址与之对应的flannel.1的mac地址绑定存储在一个叫做FDB的转发数据库中

这里使用node01的pod访问node02的pod的工作过程来说一下vxlan的原理,流程如下图所示,实际上和udp的工作流程没太大区别,主要就是在flannel.1的区别上

2.10.244.4.5容器访问10.244.3.5容器时会根据容器中的默认路由将数据包发送到cni0网桥中

3.cni0网桥通过路由信息将ip包转发到flannel.1上,同时获知下一跳网关是10.244.3.0,这个网关就是对端vtep的地址

 4.我们知道flannel.1就是vtep,他的作用就是封装包,先通过下一跳的网关地址查询arp表获取对端vtep的mac地址,将ip包用获取到的对端vtep ip地址和mac地址封装成二层数据帧

5.二层数据帧不能直接转发到对端的vtep中,还需要在封装一层作为udp包,才可以用于转发,在封装udp包前,需要先加一个vxlan的头部信息,这样对端的node节点接收到数据包后,才知道这是一个vxlan的数据帧,在vxlan的头部信息中有一个重要的数据是vni,在flannel中vni的默认值是1,只有vni相同的网络才能解包,实际vni的值就是flannel.1中的1,封装为udp包还需要知道目的地址,这时就需要通过对端的vtep的mac地址到FDB转发数据库中查询,查询到目的地址后就可以封装为udp包

6.flannel.1作为网桥将udp数据包转发到宿主机网卡中,发送到对端宿主机中

7.对端宿主机的内核态接收到数据包后,发现有vxlan header以及vni标记是1,就将vxlan包发送到本机的vni也为1的flannel.1上

8.flannel.1进行解包,取出目的地址,然后根据路由表将数据包发送到cni0网桥中

9.cni0网桥会查找数据包的目标ip地址,并确定该ip地址的端口记录,如果有,就从该端口发送数据包,如果没有记录就通过arp协议广播帧,得到应答后就能知道端口与ip的映射关系,从而将数据包发往该端口 

通过以上工作流程可以发现,vxlan减少了在用户态上处理ip包的过程,封装包和拆解包都是在内核态中,减少了用户空间和内核空间之间的上下文切换从而大大提升了性能

host-gw

host-gw 模式是一种使用主机间的直接路由来实现容器网络通信的模式。它不依赖于封装技术(如 VXLAN),而是通过在每个主机上配置静态路由,使得每个节点可以直接将数据包发送到目标节点上的容器网络,即每个主机都作为网关,减少了包的封装和拆解,很大程度的优化了性能

host-gw 模式下,Flannel 使用路由表条目来确保不同主机上的容器能够互相通信,每个节点会被分配一个唯一的子网,容器的 IP 地址从这个子网中分配,Flannel 在每个节点上都配置到其余节点的静态路由,使得节点之间可以直接路由数据包,在大规模的集群中,路由表会很庞大

host-gw模式也有限制,就是集群中的所有节点都必须处于一个二层连通的环境中

1.在k8s集群中使用host-gw模式部署flannel时,flannel会将每个node节点的ip地址,以及分配的对应的容器子网,写入到etcd中存储,flannel取出其它节点的ip地址以及对应的容器子网以静态路由的方式写入到每个node节点的路由表中,将node节点的ip地址作为下一跳网关

这里使用node01的pod访问node02的pod的工作过程来说一下host-gw模式的原理,流程如下图所示,host-gw模式以node节点的ip地址作为网关直接使用了路由的方式

2.10.244.4.5容器访问10.244.3.5容器时会根据容器中的默认路由将数据包发送到cni0网桥中

3. cni网桥根据路由信息将数据包由宿主机网卡转发到对端主机中

 4.数据包来到node2主机的网卡上后,根据路由表转发到cni0上

5.cni0网桥会查找数据包的目标ip地址,并确定该ip地址的端口记录,如果有,就从该端口发送数据包,如果没有记录就通过arp协议广播帧,得到应答后就能知道端口与ip的映射关系,从而将数据包发往该端口 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14、24年--信息系统管理——管理方法

主要考选择题,2分左右,案例涉及的概率很低,论文写作不会单独考。 1、管理基础 1.1 层次结构 信息系统是对信息进行采集、处理、存储、管理和检索,形成组织中的信息流动和处理,必要时能向有关人员提供有用的信息的系统。它是由人、技术、流程和数据资源组成的人机系统,目…

【Python】—— 公共的方法

目录 (一)公共操作 1.1 公共操作之运算符加号 1.2 公共操作之运算符乘号 1.3 公共操作之运算符判断数据是否存在 (二)公共方法 2.1 公共方法-len 2.2 公共方法-del 2.3 公共方法-max和min 2.4 公共方法-range 2.5 公共方…

Potree点云手册

兄弟们整理和收集资料不容易,请关注手册!! Potree 以其高显示速度而脱颖而出,使其成为处理大量点云数据集的绝佳选择。 我们的重点将是 Potree 提供的多样化导航和显示选项。 如果你遇到任何问题,请随时尝试其他浏览器…

算法2:滑动窗口(上)

文章目录 长度最小子数组无重复字符的最长子串[最大连续 1 的个数III](https://leetcode.cn/problems/max-consecutive-ones-iii/description/)将x减到0的最小操作数 长度最小子数组 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {in…

聚观早报 | 拼多多第一季度营收;苹果2024款彩虹表带上市

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 5月24日消息 拼多多第一季度营收 苹果2024款彩虹表带上市 小米汽车智驾将提速 iPhone 16 Pro Max将用最大屏幕 …

【hive和spark】hive on spark和spark读取hive metastore配置

HIVE ON SPARK 和 SPARK READ HIVE METASTORE 具体hadoop 和 hive单机版本安装请参考单节点搭建hadoop和hive 此文是基与这篇基础上升级而来。 零、版本说明&#xff1a; 本例使用的版本&#xff0c;hive和spark版本对标Cloudera 公司的 cdh6.2.0 版本&#xff0c;hdfs图省事…

vscode 插件开发指南

1安装nodejs、vscode 2安装插件脚手架 npm install -g yo generator-code 3使用命令创建插件项目 yo code 4在vscode中打开项目 5运行调试&#xff0c;按F5键 6在新打开的窗口中按shiftctrlp 然后执行命令 7配置右键菜单命令 遇到问题&#xff1a; 1.package.json中vsc…

高性能负载均衡的分类及架构分析

如何选择与部署适合的高性能负载均衡方案&#xff1f; 当单服务器性能无法满足需求&#xff0c;高性能集群便成为提升系统处理能力的关键。其核心在于通过增加服务器数量&#xff0c;强化整体计算能力。而集群设计的挑战在于任务分配&#xff0c;因为无论在哪台服务器上执行&am…

STM32_HAL_RTC时钟

1. RTC 时钟简介 STM32F407 的实时时钟&#xff08;RTC&#xff09;是一个独立的定时器。 STM32 的 RTC 模块拥有一组连续计数的计数器&#xff0c;在相对应的软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设置系统的当前时间和日期。 RTC 模块和时钟配…

2024年电工杯数学建模A题思路分享 - 园区微电网风光储协调优化配置

# 1 赛题 A 题&#xff1a; 园区微电网风光储协调优化配置 园区微电网由风光发电和主电网联合为负荷供电&#xff0c;为了尽量提高风光电量的 负荷占比&#xff0c;需配置较高比例的风光发电装机容量&#xff0c;但由于园区负荷与风光发电功 率时序不匹配&#xff0c; 可能导致…

SaToken+SpringBoot+Redis前后端分离登录认证

目录 前言一、创建工程项目&#x1f38d;1.1 创建后端工程1.2 创建前端工程 二、业务代码&#x1f38a;后端代码前端代码 三、测试参考资料 前言 Sa-Token 是一款 Java 语言的权限认证框架&#xff0c;提供了灵活、高效、易用的权限认证和会话管理功能。它是 SpringBoot、Spri…

华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇

本文作者&#xff1a;郑岩&#xff08;华为云AI变革首席专家&#xff09;全文约3313字&#xff0c;阅读约需8分钟&#xff0c;请仔细看看哦~ 前阵子&#xff0c;我在公司内部发了一篇Sora的科普贴&#xff0c;本来只是个简单的技术总结&#xff0c;但让我意外的是&#xff0c;…

vue.js对接海康威视摄像头web开发包

一、登录海康开放平台下载web开发包&#xff0c;下载需要先登录海康账号&#xff0c;没有的需先注册一个。 这里的appkey、ip、port、secret 和cameraIndexCodeasd是自己去申请的 appkey: "****", ip: "****", port: **, secret: "****", //必填…

torch配置时出现问题

torch配置时出现如下问题&#xff1a; 可能原因&#xff1a; 1、下载的whl文件中python版本与本机上的python版本不匹配&#xff1b; 2、上图中的文件是64位的&#xff0c;而本机python是32位的&#xff0c;也无法匹配&#xff1b; 3、cuda的版本不匹配。

AI在线免费音乐生成工具:suno、udio、stableaudio

文生音乐 1、suno https://app.suno.ai/ 2、udio https://www.udio.com/ 3、stableaudio https://stableaudio.com/live https://www.stableaudio.com/?utm_campaignstableaudio_promo&utm_mediumcta_button&utm_sourcestability_ai 4、其他MusicGen https://…

新书推荐:6.1 if语句

计算机语言和人类语言类似&#xff0c;人类语言是为了解决人与人之间交流的问题&#xff0c;而计算机语言是为了解决程序员与计算机之间交流的问题。程序员编写的程序就是计算机的控制指令&#xff0c;控制计算机的运行。借助于编译工具&#xff0c;可以将各种不同的编程语言的…

Springboo基础入门

一、SpringBoot概述 SpringBoot的诞生背景可以追溯到对传统Spring框架的改进需求&#xff0c;在过去&#xff0c;使用spring框架构建应用程序需要大量的配置和设置&#xff0c;这无形中层架了开发者的工作量并且&#xff0c;肯能造成一些配置上的错误&#xff0c;因此springboo…

【EI会议】2024年测绘、地质与遥感国际会议(SGRS 2024)

2024年测绘、地质与遥感国际会议 2024 International Conference on Surveying, Geology, and Remote Sensing 【1】会议简介 2024年测绘、地质与遥感国际会议&#xff0c;将于不久后隆重召开&#xff0c;这将是一场汇聚全球顶尖专家学者、探讨测绘、地质与遥感领域最新技术、发…

vue3项目+TypeScript前端项目 ———— elemnet-plus,svg图标配置,sass,mock数据

一.集成element-plus 官网地址 安装 pnpm install element-plus 引入 // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vueconst app createApp(App)app.use(ElementPlus) app.…

Element表格之表头合并、行合并和列合并

el-table合并表头handerMethod_el-table表头合并-CSDN博客 Element表格之表头合并、行合并和列合并_element表格表头合并-CSDN博客 一、合并表头 话不多说&#xff0c;先看效果图&#xff1a; 表格结构如上&#xff0c;其中:header-cell-style对表头做了一些处理。 headFirst…