首页 > 其他分享 >2.flannel的vxlan模式

2.flannel的vxlan模式

时间:2023-04-25 15:25:11浏览次数:43  
标签:VTEP IP flannel.1 模式 10.244 MAC k8s vxlan flannel

环境介绍

两Pod的ip和mac信息

两节点物理网卡和flannel.1的ip和mac信息

原理解析

我们使用k8s-1上的pod cni-w4q8t 去ping k8s-2上的pod cni-m9l94 对于pod cni-w4q8t 要去的目的地址10.244.1.5 和自己10.244.0.3并不是同一个网段: 我们需要进行路由查询

需要查询Gateway 10.244.0.1所对应的MAC地址

此时数据包送到ROOT NS中,那么就开始走ROOT NS的逻辑。 查询宿主机路由表可得

需要注意的是:多条路由条目时候,除了网关很重要以外,出接口也非常的重要,每一个出接口都有对应的MAC地址。如要发送请求需要知道 由上述路由信息,我们可以得到两条重要信息: 1: 网关是10.244.1.0 该地址是k8s-2节点上的flannel.1(VTEP)的地址。 2. 数据的出接口为flannel.1。也就是说数据包要从此接口发出。 这里的转发:需要查询到地址10.244.1.0对应的MAC地址(flannel网络中,为避免地址冲突,将VTEP设备中flannel.1网卡IP都设为.0地址,正常情况下IP是从1开始,所以不会有任何IP跟flannel.1冲突)。 根据路由表信息我们知道了目的VTEP设备的IP地址,而根据三层IP地址查询二层MAC地址正是ARP表的功能。 而这里用ARP表的记录,也就是flanneld进程在k8s-2节点启动时,自动添加到API-server和k8s各节点上的,所以此时ARP就自动在k8s-1的节点上缓存下来了,也就意味着此时k8s-1不再需要查询ARP了。 #################### 所以此时的数据报文形式为: S_IP: 10.244.0.3 S_MAC: $k8s-1_flannel.1_MAC # [06:85:e5:d3:67:f1] D_IP: 10.244.1.5 D_MAC: $k8s-2_flannel.1_MAC # [e2:49:6e:06:0d:d0] 在flannel.1网卡抓包显示

注意:源MAC地址是当前网卡的MAC(当前节点VTEP网卡flannel.1),目的MAC为下一跳MAC(对端节点flannel.1的MAC),但源IP与目的IP不变,仍是pod对应IP   2.3:由于flannel.1在此环境中同时还扮演VxLAN VTEP的角色,所以需要对应的方式去封装VxLAN的数据报文。 此时涉及到Inner和Outer的IP和MAC信息问题:[注意:此时的封装数据包是在flannel.1这个VTEP设备的指导下做数据报文的封装----非常重要] 那么对于k8s-1上的这个VTEP flannel.1它现在知道它所在宿主机上的Outer的S_IP和S_MAC。也知道Inner的S_IP和S_MAC 和 D_IP和D_MAC。 但是唯独不知道的是Outer的D_IP。也就是说不知道10.244.1.0这个地址下的flannel.1在哪一个节点上。 在Linux内核里面,网桥设备进行二层转发的依据来自FDB表的转发数据库。这个flannel网桥对应的FDB信息,就是flanneld进程维护的。   所以我们查询: bridge fdb show | grep $10.244.1.0's_MAC [root@k8s-1 ~]# bridge fdb show | grep e2:49:6e:06:0d:d0 e2:49:6e:06:0d:d0 dev flannel.1 dst 172.12.1.12 self permanent [root@k8s-1 ~]# 由fdb转发信息,我们可以得出10.244.1.0此vtep所在node是172.12.1.12 到此k8s-1上的VTEP flannel.1获得了所有的封装包信息: 然后此时外部的IP信息为:S_IP:172.12.1.11 D_IP:172.12.1.12 封包后需要再次查询路由表信息:

在ens33网卡抓包显示

标签:VTEP,IP,flannel.1,模式,10.244,MAC,k8s,vxlan,flannel
From: https://www.cnblogs.com/lijin543/p/17352684.html

相关文章

  • 抽象工厂模式
    抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类。抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要知道或关心实际生产出的具体产品是什么。这样客户就可以从具体产品中被解耦。///<summary>///下面以绝味鸭脖连锁......
  • 工厂模式
    工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。namespac......
  • VMware kali2023 桥接模式 联网 局域网主机发现
    1.配置VMware网络 2.配置虚拟机网络设置(虚拟机硬件层面) 3.配置虚拟机网络2(虚拟机软件层面)3.1查看物理机上桥接的网卡的信息和虚拟机奇加网网卡的信息       记下了,方便下一步配置实验我要配置的网卡名是  eth2网关和DNS一样:192.168.43.1子网掩码......
  • 单例模式
    确保一个类只有一个实例,并提供一个全局访问点///<summary>///单例模式的实现///</summary>publicclassSingleton{//定义一个静态变量来保存类的实例privatestaticSingletonuniqueInstance;//定义一个标识确保线程同步privatestaticre......
  • JAVA设计模式学习10——组合模式
    组合模式(Composite)就是把部分和整体的关系用树形的结构来表示,从而使客户端能够把部分对象和组合起来的对象采用同样的方式来看待。树图结构一般包含一个根节点,若干个树枝和叶子节点。如下图:树结构的类图,其实就是组合模式的简略类图,最上面为抽象节点,左下方为叶子节点,右下方为树......
  • 装饰器模式:动态给一个对象添加一些额外的职责
    当我们想要在不改变原有对象的结构和功能的基础上,动态地给一个对象添加一些额外的行为或职责时,可以使用装饰器模式。在装饰器模式中,通常会定义一个抽象装饰器类和具体的装饰器类。抽象装饰器类和被装饰对象实现同样的接口,而具体的装饰器类则包含了一个指向被装饰对象的引用,并且在......
  • Java设计模式-简单工厂模式
    简介在软件开发过程中,设计模式是一种被广泛应用的实践,它是通过总结、归纳和提炼出软件设计经验,从而使得设计更加优雅、高效。简单工厂模式是设计模式中最基本、最简单的一种模式,它能够有效地封装对象的创建过程,简化代码结构。简单工厂模式又称为静态工厂方法模式,它是通过定义一......
  • Frida官方文档-操作模式
    Frida通过其强大的用C语言编写的工具核心Gum提供了动态工具。由于这种工具逻辑易于更改,因此您通常希望用脚本语言编写它,以便在开发和维护它时获得简短的反馈循环。这就是GumJS发挥作用的地方。仅需几行C语言,您就可以在可以完全访问GumAPI的运行时中运行一段JavaScript,从而允许您......
  • 设计模式之模板模式(1)
    定义定义一个操作中的算法骨架而将一些步骤延迟到子类中,模板模式使得子类可以在不改变一算法的结构即可重定义该算法的某些特定步骤。使用场景通用的增删改查代码先来看一下外部jar包的导入。在design上右击选择Properities选择AddExternalJars…导入需要的JAR包这里先写一......
  • 【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介代理模式(ProxyPattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问......