首页 > 其他分享 >13-2 k8s网络插件-flannel介绍

13-2 k8s网络插件-flannel介绍

时间:2022-11-15 00:00:45浏览次数:41  
标签:容器 插件 FLANNEL 主机 13 IP地址 k8s 节点 flannel

Flannel
flannel模型:
  host-gw模型
  VxLAN模型

Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。
Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。
Flannel实质上是一种“覆盖网络(overlaynetwork)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持udp、vxlan、host-gw、aws-vpc、gce和alloc路由等数据转发方式,默认的节点间数据通信方式是UDP转发。
Flannel特点:
1.使集群中的不同Node主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
2.建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。覆盖网络是建立在另一个网络之上并由其基础设施支持的虚拟网络。覆盖网络通过将一个分组封装在另一个分组内来将网络服务与底层基础设施分离。在将封装的数据包转发到端点后,将其解封装。
3.创建一个新的虚拟网卡flannel0接收docker网桥的数据,通过维护路由表,对接收到的数据进行封包和转发(vxlan)。
4.etcd保证了所有node上flanned所看到的配置是一致的。同时每个node上的flanned监听etcd上的数据变化,实时感知集群中node的变化。

Flannel对网络要求提出的解决方法
1、互相不冲突的ip
1) flannel利用Kubernetes API或者etcd用于存储整个集群的网络配置,根据配置记录集群使用的网段。
2) flannel在每个主机中运行flanneld作为agent,它会为所在主机从集群的网络地址空间中,获取一个小的网段subnet,本主机内所有容器的IP地址都将从中分配。
如节点的ip分配:
master节点:
# cat /run/flannel/subnet.env 

FLANNEL_NETWORK=10.244.0.0/16

FLANNEL_SUBNET=10.244.0.1/24

FLANNEL_MTU=1450

FLANNEL_IPMASQ=true

node1节点:
# cat /run/flannel/subnet.env 

FLANNEL_NETWORK=10.244.0.0/16

FLANNEL_SUBNET=10.244.1.1/24

FLANNEL_MTU=1450

FLANNEL_IPMASQ=true

在flannel network中,每个pod都会被分配唯一的ip地址,且每个K8s node的subnet各不重叠,没有交集。
2、POD之间互相访问
1) flanneld将本主机获取的subnet以及用于主机间通信的Public IP通过etcd存储起来,需要时发送给相应模块。
2) flannel利用各种backend mechanism,例如udp,vxlan等等,跨主机转发容器间的网络流量,完成容器间的跨主机通信。

Flannel架构:
各个组件的解释:
Cni0:网桥设备,每创建一个pod都会创建一对veth pair。其中一端是pod中的eth0,另一端是Cni0网桥中的端口(网卡)。Pod中从网卡eth0发出的流量都会发送到Cni0网桥设备的端口(网卡)上。
Cni0设备获得的ip地址是该节点分配到的网段的第一个地址。
Flannel.1: overlay网络的设备,用来进行vxlan报文的处理(封包和解包)。不同node之间的pod数据流量都从overlay设备以隧道的形式发送到对端。
Flanneld:flannel在每个主机中运行flanneld作为agent,它会为所在主机从集群的网络地址空间中,获取一个小的网段subnet,本主机内所有容器的IP地址都将从中分配。同时Flanneld监听K8s集群数据库,为flannel.1设备提供封装数据时必要的mac,ip等网络数据信息。

不同node上的pod的通信流程:



1.pod中产生数据,根据pod的路由信息,将数据发送到Cni0

2.Cni0 根据节点的路由表,将数据发送到隧道设备flannel.1

3.Flannel.1查看数据包的目的ip,从flanneld获得对端隧道设备的必要信息,封装数据包。

4.Flannel.1将数据包发送到对端设备。对端节点的网卡接收到数据包,发现数据包为overlay数据包,解开外层封装,并发送内层封装到flannel.1设备。

5.Flannel.1设备查看数据包,根据路由表匹配,将数据发送给Cni0设备。

6.Cni0匹配路由表,发送数据给网桥上对应的端口。

 

标签:容器,插件,FLANNEL,主机,13,IP地址,k8s,节点,flannel
From: https://www.cnblogs.com/skyzy/p/16891030.html

相关文章

  • 3-7 k8s-liveness和readness详解
    k8s-liveness和readness详解健康检查(healthcheck)是用于检测应用实例是否正常工作,对应用状态的监控,保障业务高可用的一种机制。k8s健康检测主要分为以下三种:存活性探......
  • 1-1、kubernetes(k8s)-介绍
    kubernetes(k8s)-安装(二)什么是Kubernetesk8s组件介绍:http://docs.kubernetes.org.cn/703.htmlKubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序......
  • 1-0 K8S基础概念
    K8S基础概念1、NodeNode作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的Kubelet、kube-proxy服务进程,......
  • 1-3 k8s各组件介绍
    k8s各组件介绍master端:apiserver:资源操作的唯一入口,介绍用户的命令,提供认证,授权,api注册和发现等机制scheduler:负责集群资源调度,按照预定的调度策略将pod调度到相......
  • 【Java复健指南13】OOP高级04【告一段落】-四大内部类
    四大内部类一个类的内部又完整的嵌套了另一个类结构。classOuter{//外部类classlnner{//内部类}}classOther{//外部其他类}被嵌套的类称为内......
  • 11.13(P)
    列表While循环rt:for循环rt:    元组rt: 只有一个元素时元组  ......
  • 11.13;周日;复盘
    复盘记录内容,回顾经验编程学习1.学习方法学习初期,用到啥学啥学习20%的功能即可,不必去深究啥火学啥对于作品,是先完成再完美(编程也是一样的)c语言理论知识指针......
  • 创建openssl证书,实现集群外访问k8s api
    创建认证信息首先假设你装好了openssl(没装执行sudoyuminstallopensslopenssl-devel)1、创建一个文件夹叫做openssl-cert/$mkdir-p~/openssl-cert&&cd~/......
  • js无需插件实现复制功能
    constcopy=(item)=>{letcopyInput=document.createElement("input");//创建input元素document.body.appendChild(copyInput);//向页面底部追加输入框c......
  • leetcode1346
    检查整数及其两倍数是否存在Category Difficulty Likes Dislikesalgorithms Easy(43.19%) 78 -TagsCompaniesUnknown给你一个整数数组arr,请你检查是否存在两个整数......