首页 > 其他分享 >1.UDP模式

1.UDP模式

时间:2023-06-26 11:26:20浏览次数:28  
标签:flannel0 UDP flanneld 报文 模式 网卡 pod

不同节点pod间通信(UDP模式)

发送流程

1.发送数据报文,发现是不同网段,但找不到路由,转给默认网关cni0 2.cni0查看宿主机路由表:去往目的pod所在网段转给tun设备flannel0,而后由flanneld进程截获,由它指导内核封装数据报文,由于flanneld进程在启动之初会收集各pod网段与k8s节点网卡对应关系并传给apiserver或etcd集群,同时规定flanneld进程凡是收到pod的数据报文都要转给对应的节点网卡,flanneld查询到源pod和目的pod所在的节点网卡地址后,指导内核生成路由规则,将报文转给本节点网卡 3.报文从物理网卡进入公网传给对端物理网卡

接收流程

1.物理网卡对报文外层进行解封,将原始报文暴露出来 2.物理网卡将解封后的原始报文转交给flanneld进程(凡是给pod的报文都交由flanneld进程)而后指导内核将报文转给对应的flannel0 3.flannel0查看路由表后,发现目的pod所在网段的网关为cni0 4.cni0将报文转给pod

发送过程解析

到达宿主机以后,宿主机启动路由表查询过程。 #5.3.1:在k8s-1节点上查询:

#5.3.2:flannel0为tun设备,发送给flannel0接口的RAW IP包(无MAC信息)将被flanneld进程接收到,flanneld进程接收到RAW IP包后在原有的基础上进行UDP封包.UDP封包的形式为:172.12.1.11:src port -> 172.12.1.12:8285。 此时在flannel0上抓包:

#抓包的wireshark解包格式为:

#5.3.3:flanneld在启动时会将该节点的网络信息通过api-server保存到etcd当中,故在发送报文时可以通过查询etcd得到10.244.1.7这个容器的IP属于172.12.1.12。 #5.3.4:flanneld将封装好的UDP报文从用户空间发往Linux内核协议栈,然后经ens33发出,从这里可以看出网络包在通过ens33发出前先是加上了UDP头(8个字节),再然后加上了IP头(20个字节)进行封装,这也是为什么flannel0的MTU要比ens33的MTU小28个字节的原因(防止封装后的以太网帧超过ens33的MTU而在经过ens33时被丢弃) #此时在ens33上抓包:

#wireshark 解开包的形式如上。 此过程中flanneld的作用:   #UDP封包解包   #节点上的路由表的动态更新

UDP模式的缺点

相比于两台宿主机之间的直接通信,基于 Flannel UDP 模式的容器通信多了一个额外的步骤,即 flanneld 的处理过程。而这个过程,由于使用到了 flannel0 这个 TUN 设备,仅在发出IP包的过程中,就需要经过三次用户态与内核态之间的数据拷贝,如下所示:

第一次:用户态的容器进程发出的 IP 包经过 docker0 网桥进入内核态; 第二次:IP 包根据路由表进入 TUN(flannel0)设备,从而回到用户态的 flanneld 进程; 第三次:flanneld 进行 UDP 封包之后重新进入内核态,将 UDP 包通过宿主机的 eth0 发出去。 此外,Flannel 进行 UDP 封装和解封装的过程,也都是在用户态完成的。在 Linux 操作系统中,上述这些上下文切换和用户态操作的代价其实是比较高的,这也正是造成 Flannel UDP 模式性能不好的主要原因。

标签:flannel0,UDP,flanneld,报文,模式,网卡,pod
From: https://www.cnblogs.com/lijin543/p/17505149.html

相关文章

  • 07.生成器模式(Builder)
    使用生成器模式来解决问题定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式的结构和说明Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作。ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Produ......
  • 设计模式之适配器模式--新能源的发展
    前言本文主要讲述适配器模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。一.什么是适配器模式适配器模式是23种设计模式中结构型模式的一种,将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类......
  • Win32k 是 Windows 操作系统中的一个核心组件,它负责处理图形显示、窗口管理和用户交互
    Win32k是Windows操作系统中的一个核心组件,它负责处理图形显示、窗口管理和用户交互等功能。在Windows中,Win32k.sys是一个内核模式驱动程序,它提供了访问图形子系统的接口。因此,Win32k具有较高的权限和特权。作为一个内核模式驱动程序,Win32k有比普通用户程序更高的权限级别......
  • 单例模式的N种写法
    1.饿汉式优点:写法简单,线程安全缺陷:占用内存高,对象还没有被使用已经被创建出来了。2.懒汉式优点:写法简单,对象使用时才被创建。缺陷:线程不安全。3.加synchronized 优点:写法简单,对象使用时才被创建。缺陷:接口性能下降明显。4.双重检查优点:对象使用时才被创建。缺......
  • 利用chatgpt解决单主机多实例模式Redis主从配置的报错问题:Error condition on socket
    今天在配置redis主从配置时,从实例报错:ErrorconditiononsocketforSYNC:Connectionrefused我是在单体机上配置三个实例,实现redis的一主二从。1.首先,创建三个文件夹,名字分别叫7001、7002、7003(我喜欢将应用安装在tmp下)#进入/tmp目录cd/tmp#创建目录mkdir70017......
  • 迭代器模式
    迭代器模式这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。思考问题:如何实现顺序访问且不知道集合底层表示?例子:迭代接口packageorg.kouhao.design.patterns.迭代模式;/***@authoradmin*/publicinterfaceIterato......
  • 建造者模式
    建造者模式建造者模式(BuilderPattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。解决问题:当一个类的构造函数超过4个,而且某些参数是可选的,我们通常有两个方法来构建他的对象。publicclassCompute......
  • 模板模式
    模板模式在模板模式(TemplatePattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。适用场景:一些固定化流程,比如JdbcTemplate.思考问题:为什么用抽象类而不用接口呢?......
  • 责任链模式
    责任链模式责任链模式(ChainofResponsibilityPattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。使用登录例子:成员定义packageorg.kouhao.design.patterns.责任链模式;/***@auth......
  • VMware中切换命令行和桌面模式
    在虚拟机中,一般通过以下步骤来切换命令行和桌面模式:进入虚拟机中的操作系统。按下Ctrl+Alt+F1键,在虚拟机中切换到命令行模式。输入用户名和密码,登录到命令行模式下的操作系统。在命令行中执行需要的操作,例如安装软件、配置网络等。当需要返回到桌面模式时,可以按下Ctrl+Alt+F......