首页 > 其他分享 >在K8S中,你用的flannel是哪个工作模式及fannel的底层原理如何实现数据报文转发的?

在K8S中,你用的flannel是哪个工作模式及fannel的底层原理如何实现数据报文转发的?

时间:2024-08-14 08:54:27浏览次数:12  
标签:UDP 封装 fannel 报文 flannel K8S 数据包 节点 Flannel

在Kubernetes(K8S)中,Flannel是一个广泛使用的容器网络接口(CNI)插件,它提供了一种简单而有效的方法来为集群中的每个容器分配网络,并确保它们可以互相通信。Flannel支持多种工作模式来实现数据报文的转发,其中最常见的是VXLAN、UDP和HOST-GW三种模式。

1. Flannel的工作模式
  1. VXLAN模式:
    • 简介:VXLAN(Virtual eXtensible Local Area Network)是Flannel的默认后端驱动,也是推荐使用的模式。它采用L2overL4(MAC-in-UDP)的报文封装模式,将二层报文用三层协议进行封装,实现二层网络在三层范围内的扩展。
    • 原理:当数据包需要跨节点通信时,Flannel会将原始数据包封装在VXLAN头部中,然后使用UDP协议将封装后的数据包发送到目标节点的flanneld服务。目标节点的flanneld服务解封装数据包,并将其转发给目标容器。
    • 优点:性能较强,原生内核支持,集群可以由不同网段的主机组成。
  2. UDP模式:
    • 简介:UDP模式通过UDP封装数据包,在网络中创建隧道以实现容器间的通信。
    • 原理:与VXLAN类似,但性能较差。数据报文在发送实际物理网络之前,通过flanneld进行一层UDP封装,然后作为payload发送给对端。对端收到UDP报文后,flanneld通过解包得到真正的数据报文,再转发至最终的服务端。
    • 缺点:使用设备flannel.0进行封包解包,原生内核不支持,上下文切换较大,性能非常差。主要用于调试目的。
  3. HOST-GW模式:
    • 简介:HOST-GW模式不需要flannel.1这样的中间设备,直接将宿主机的IP当作子网的下一跳地址。
    • 原理:当数据包需要跨节点通信时,Flannel直接利用宿主机的路由表将数据包转发到目标节点,目标节点的flanneld服务再将其转发给目标容器。
    • 优点:性能最强,因为减少了额外的封装和解封装步骤。
    • 限制:要求所有宿主机都在一个局域网内,跨局域网无法进行路由。
2. Flannel的底层原理

Flannel的底层原理主要基于以下几个关键组件和步骤:

  1. 节点注册与子网分配:
    • 每个节点都会注册到etcd(分布式键值存储系统)中,并分配一个唯一的子网段。
    • Flanneld守护进程在每个节点上运行,负责管理节点之间的路由表,并将路由表信息存储在etcd中。
  2. 虚拟网络创建:
    • Flannel使用overlay network技术创建虚拟网络,该网络覆盖在底层节点网络之上。
    • 当容器需要跨节点通信时,Flannel会在节点间创建虚拟网络连接。
  3. 数据包封装与转发:
    • 根据配置的后端驱动(如VXLAN、UDP、HOST-GW),Flannel会对数据包进行相应的封装。
    • 封装后的数据包通过物理网络发送到目标节点。
    • 目标节点的flanneld服务解封装数据包,并将其转发给目标容器。
  4. 路由表管理与更新:
    • Flannel使用etcd来同步集群中所有节点的网络配置信息,包括子网分配和路由表。
    • 当集群中的节点或网络配置发生变化时,etcd会实时感知并更新相应的路由表信息。
  5. 安全性与策略控制:
    • Flannel本身不提供网络策略支持,但可以与Kubernetes的网络策略或其他安全工具结合使用,以实现容器间的安全通信。

综上所述,Flannel通过虚拟网络覆盖技术和多种后端驱动模式,为Kubernetes集群中的容器提供了一种简单而有效的网络解决方案。在选择后端驱动时,应根据实际场景和需求进行权衡和选择。

标签:UDP,封装,fannel,报文,flannel,K8S,数据包,节点,Flannel
From: https://www.cnblogs.com/huangjiabobk/p/18358121

相关文章

  • 在K8S中,说⼀下Pod状态有哪些?
    在Kubernetes(K8S)中,Pod的状态反映了Pod及其内部容器的运行情况。以下是Pod可能出现的主要状态及其含义:Pending(等待)Pod已经被KubernetesAPI接受,但其容器镜像还未被拉取,或者Pod所需的节点资源(如CPU、内存等)还未满足。在这个状态中,Pod是不可调度的。Runni......
  • 在K8S中,node数量增多会有什么影响吗?
    在Kubernetes(K8S)中,增加节点的数量会对集群产生多方面的影响。这些影响既包括正面的也有负面的,具体取决于集群的具体配置和工作负载的需求。以下是一些主要的影响:1.正面影响提高可用性增加节点数量可以提高系统的冗余性,即使某些节点出现故障,其他节点仍然可以继续处理请......
  • 关于k8s的Pod控制器
    目录1.Pod控制器及其作用2.pod控制器类型2.1ReplicaSet:2.2Deployment2.3DaemonSet2.4StatefulSet2.5Job2.6Cronjob3.Pod与控制器之间的关系3.1Deployment3.2SatefulSet3.3 DaemonSet3.4job3.5cronjob1.Pod控制器及其作用Pod控制器,又称之为工作......
  • 在K8S中,如何扩容和缩容K8s集群?
    在Kubernetes(K8S)中,扩容和缩容通常指的是调整集群中工作节点(WorkerNodes)的数量或者调整Deployment、StatefulSet、DaemonSet等资源中Pod副本的数量。以下是扩容和缩容的详细步骤:1.扩容集群增加工作节点:如果你使用的是云服务提供商提供的Kubernetes服务(如EKS、GKE、AKS等),通......
  • 在K8S中,镜像的拉取策略有哪些?
    在Kubernetes中,镜像拉取策略(ImagePullPolicy)定义了何时从容器镜像仓库拉取或更新容器镜像。这些策略对于管理容器化应用的部署和更新非常重要。Kubernetes提供了以下几种镜像拉取策略:Always:无论本地是否存在该镜像,总是尝试从远程仓库拉取最新的镜像。这可以确保使用的是最......
  • 在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
    在Kubernetes(K8s)中,Service是一种抽象,它定义了一组逻辑上相同的服务实例(即Pod)以及访问它们的策略。Service可以将外部客户端的流量路由到后端的一个或多个Pod。Kubernetes提供了几种不同类型的Service,每种都有其特定的用途:ClusterIP描述:这是默认的Service类型。Cl......
  • 在K8S中,Jenkins如何集成K8S集群?
    在Kubernetes(K8s)中集成Jenkins是一个常见场景,尤其是在持续集成/持续部署(CI/CD)流程中。以下是详细的步骤和说明,介绍如何在Kubernetes集群中部署和配置Jenkins。1.准备Kubernetes集群确保你有一个运行良好的Kubernetes集群,并且你有权限在这个集群上执行操作。如果你还......
  • flannel容器启动失败,日志报错“Failed to find any valid interface to use: failed t
    现状k8s部署,flannel容器起不来,不断重启,查看日志报错"Failedtofindanyvalidinterfacetouse:failedtogetdefaultinterface:Unabletofinddefaultroute"排查过程根据报错提示,可能是网卡名称奇怪导致,或者没有默认路由查看默认路由很显然是有默认路由的查......
  • k8s设置某台机器不调度
    在Kubernetes中,你可以通过给节点打上NoSchedule或NoExecute污点(taint)来阻止新的Pod调度到该节点上。以下是如何设置某台机器不调度的具体步骤:1.查看节点列表首先,查看当前的节点列表,确定你想要设置为不可调度的节点的名称:kubectlgetnodes2.给节点打污点(Tain......
  • 在K8S中,陈述⼀下Pod的声明周期?
    在Kubernetes(K8S)中,Pod的声明周期是指Pod从创建到终止的整个过程,它涵盖了Pod的多个状态和阶段。以下是Pod声明周期的详细解释:一、Pod的声明周期概述Pod的声明周期通常包括以下几个主要阶段:创建、初始化(可选)、运行、终止。在这些阶段中,Pod会经历不同的状态和事件,这些状态和事件共......