【Kubernetes】二进制部署k8s集群(中)之cni网络插件flannel和calico

news2024/12/26 21:53:32

!!!继续上一篇实验部署!!!

目录

一.k8s的三种网络模式

1.Pod 内容器与容器之间的通信

2.同一个 Node 内 Pod 之间的通信

3.不同 Node 上 Pod 之间的通信

二.k8s的三种接口

三.Flannel 网络插件

1.UDP 模式(8285端口)

2.VXLAN 模式

四.VLAN 和 VXLAN 区别(拓展)

1.使用场景不同

2.数量不同

3.mac表中的记录不同

五.部署 flannel

1.在 master01 节点上操作

1.1.上传文件并解压

1.2.复制到2个node节点

1.3.部署 CNI 网络

2.在 node01 节点上操作

2.1.查看并导入镜像

2.2.创建目录并解压

2.3.检查端口

3.在 node02 节点上操作

3.1.查看并导入镜像

3.2.创建目录并解压

3.3.检查端口

注意

六.Calico 网络插件

1.k8s 组网方案对比

flannel方案

calico方案

2.Calico 的模式

3.Calico 主要由以下几个部分组成

4.Calico 工作原理:

IPIP 模式

BGP 模式

七.Flannel 和 Calico 对比

1.flannel

2.calico

3.总结

4.Calico的IPIP模式对比Flannel的VXLAN模式的优势(补充)

4.1.性能和效率

4.2.协议支持

4.3.总结


一.k8s的三种网络模式

k8s集群中pod网络通信分类

1.Pod 内容器与容器之间的通信

在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它

们在同一台机器上一样,可以用 localhost 地址访问彼此的端口

2.同一个 Node 内 Pod 之间的通信

每个 Pod 都有一个真实的全局 IP 地址,同一个 Node 内的不同 Pod 之间可以直接采用对方 Pod

的 IP 地址进行通信,Pod1 与 Pod2 都是通过 Veth 连接到同一个 cni0/docker0 网桥,网段相同,

所以它们之间可以直接通信

3.不同 Node 上 Pod 之间的通信

Pod 地址与 docker0 在同一网段,docker0 网段与宿主机网卡是两个不同的网段,且不同 Node 之

间的通信只能通过宿主机的物理网卡进行

要想实现不同 Node 上 Pod 之间的通信,就必须想办法通过主机的物理网卡 IP 地址进行寻址和通

信。因此要满足两个条件:Pod 的 IP 不能冲突;将 Pod 的 IP 和所在的 Node 的 IP 关联起来,通

过这个关联让不同 Node 上 Pod 之间直接通过内网 IP 地址通信

总结:因此引入了cni网络插件的核心原因实际上就是为了解决不同node节点上的不同pod之间的

通信,即pod跨主机通信

关于k8s的三种类型网络IP

  • 节点网络:nodeIP---node节点的物理网卡ip,实现node节点之间的通信
  • Pod网络:PodIP---Pod与Pod之间通过PodIP进行通信
  • service网络:clusterIP---k8s集群内部,service资源的clusterIP实现对Pod集群的网络代理

Overlay Network

叠加网络,在二层或者三层基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链

路隧道连接起来。

通过Overlay技术(可以理解成隧道技术),在原始报文外再包一层四层协议(UDP协议),通过

主机网络进行路由转发。这种方式性能有一定损耗,主要体现在对原始报文的修改。目前Overlay

主要采用VXLAN。

VXLAN 即 Virtual Extensible LAN(虚拟可扩展局域网)

是一种网络虚拟化技术,它使用一种隧道协议,将二层以太网帧封装在四层UDP报文中,通过三层

网络传输,组成一个虚拟大二层网络,到达目的地后由隧道端点解封装并将数据发送给目标地址。

从而实现分布在不同的宿主机上的虚拟机或者容器就像在同一个局域网(LAN)里那样自由通信。

二.k8s的三种接口

  • CRI:容器进行时接口,连接容器引擎--docker、containerd、cri-o、podman
  • CNI:容器网络接口,用于连接网络插件如:flannel、calico、cilium
  • CSI:容器存储接口,如nfs、ceph、gfs、oss、s3、minio

三.Flannel 网络插件

Flannel 的功能是让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟 IP 地址。

Flannel 是 Overlay 网络的一种,也是将 TCP 源数据包封装在另一种网络包里面进行路由转发和通

信,目前支持 UDP、VXLAN、Host-gw 3种数据转发方式

1.UDP 模式(8285端口)

  1. 原始数据包从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel0虚拟接口
  2. flanneld服务会监听flannel0接口收到的数据,并会将原始数据包封装到UDP报文里
  3. flanneld服务会根据在etcd中维护的路由表查到目标Pod所在的nodeIP,并在UDP报文外封装nodeIP头部、MAC头部等,再通过物理网卡发送到目标node节点
  4. UDP报文通过8285端口送达到目标node节点的flanneld服务进程解封装获取原始数据包,数据报文再根据本地路由规则通过flannel0接口发送到cni0网桥,再由cni0发送到目标Pod容器

etcd 之 Flanneld 提供说明

存储管理 Flannel 可分配的IP地址段资源

监控 etcd 中每个 Pod 的实际地址,并在内存中建立维护 Pod 节点路由表

由于在 UDP 模式下 flanneld 进行网络的封包和解包工作,而 VXLAN 模式下封包解包的工作由内

核完成,因此性能上 UDP 模式会比在内核态做转发的 VXLAN 模式差

2.VXLAN 模式

VXLAN 模式是 Flannel 默认和推荐的模式,flannel 会为每个节点分配一个 24 位子网,并在每个

节点上创建两张虚机网卡:cni0 和 flannel.1 。 cni0 是一个网桥设备,类似于 docker0 ,节点上所

有的 Pod 都通过 veth pair 的形式与 cni0 相连。 flannel.1 则是一个 VXLAN 类型的设备,充当

VTEP 设备(VXLAN Tunnel Endpoint)的角色,实现对 VXLAN 报文的封包解包。

在 VXLAN 模式下,flanneld 启动时先确保 VXLAN 设备已存在,如果不存在则创建,存在则跳

过。并将 VTEP 设备的信息上报到 etcd 中,当 flannel 网络有新节点加入集群时并向 etcd 注册,

各节点上的 flanneld 会从 etcd 得到通知。

Flannel VXLAN 模式跨主机的工作原理

  1. 原始数据帧从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel.1虚拟接口
  2. flannel.1接口收到数据帧后添加VXLAN头部,再由内核将原始数据帧封装到UDP报文里
  3. 根据在etcd中维护的路由表查到目标Pod所在的nodeIP,并在UDP报文外封装nodeIP头部、MAC头部等,再通过物理网卡发送到目标node节点
  4. UDP报文通过8472端口送达到目标node节点的flannel.1接口并由内核解封装获取原始数据帧,数据报文再根据本地路由规则发送到cni0网桥,再由cni0发送到目标Pod容器

四.VLAN 和 VXLAN 区别(拓展)

1.使用场景不同

  • VLAN主要用于在交换机上逻辑划分广播域,还可以配合STP生成树协议阻塞路径接口,从而避免产生环路和广播风暴
  • VXLAN用作于叠加网络,可以将数据帧封装成UDP报文,再通过网络层传输到其它网络,从而实现虚拟大二层网络的通信

2.数量不同

  • VXLAN支持更多的二层网络:VXLAN最多可支持 2^24 个;
  • VLAN最多支持 2^12 个(4096-2)

3.mac表中的记录不同

  • VXLAN可以防止物理交换机MAC表耗尽:
  • VLAN需要在交换机的MAC表中记录MAC地址;
  • VXLAN采用隧道机制,MAC地址不记录在交换机的MAC表中

五.部署 flannel

1.在 master01 节点上操作

1.1.上传文件并解压

unzip flannel-v0.21.5.zip

1.2.复制到2个node节点

scp flannel*.tar 192.168.80.102:/opt/k8s
scp flannel*.tar 192.168.80.103:/opt/k8s
scp cni-plugins-linux-amd64-v1.3.0.tgz 192.168.80.102:/opt/k8s/
scp cni-plugins-linux-amd64-v1.3.0.tgz 192.168.80.103:/opt/k8s/

1.3.部署 CNI 网络

kubectl apply -f kube-flannel.yml 

kubectl get pods -n kube-flannel

kubectl get pods -A

kubectl get pods -A -owide

kubectl get nodes

ip -d a show flannel.1   #在node上查看flannel.1的端口

2.在 node01 节点上操作

2.1.查看并导入镜像

docker load -i flannel.tar
docker load -i flannel-cni-plugin.tar

2.2.创建目录并解压

mkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin

2.3.检查端口

3.在 node02 节点上操作

3.1.查看并导入镜像

docker load -i flannel.tar
docker load -i flannel-cni-plugin.tar

3.2.创建目录并解压

mkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin

3.3.检查端口

注意

有几个文件中的网段设置需要一致

kube-flannel.yml中的网段设置

controller manager以及kube-proxy脚本中设置的网段需要保持一致

kube-flannel.yml 

 controller manager脚本

 kube-proxy脚本

六.Calico 网络插件

1.k8s 组网方案对比

flannel方案

需要在每个节点上把发向容器的数据包进行封装后,再用隧道将封装后的数据包发送到运行着目标

Pod的node节点上。目标node节点再负责去掉封装,将去除封装的数据包发送到目标Pod上。数据

通信性能则大受影响

calico方案

Calico不使用隧道或NAT来实现转发,而是把每个操作系统的协议栈认为是一个路由器,然后把所

有的容器认为是连在这个路由器上的网络终端,在路由器之间跑标准的路由协议——BGP的协议,

然后让它们自己去学习这个网络拓扑该如何转发

它不使用 cni0 网桥,而是通过路由规则把数据包直接发送到目标节点的网卡,所以性能高

2.Calico 的模式

  • IPIP 模式:在原有 IP 报文中封装一个新的 IP 报文,新的 IP 报文中将源地址 IP 和目的地址 IP 都修改为对端宿主机 IP。Calico 默认使用 IPIP 的模式
  • BGP 模式:将节点做为虚拟路由器通过 BGP 路由协议来实现集群内容器之间的网络访问。
  • cross-subnet(ipip-bgp混合模式):IPIP 模式和 BGP 模式都有对应的局限性,对于一些主机跨子网而又无法使网络设备使用 BGP 的场景可以使用 cross-subnet 模式,实现同子网机器使用 BGP 模式,跨子网机器使用 IPIP 模式

3.Calico 主要由以下几个部分组成

  • Calico CNI插件:主要负责与kubernetes对接,供kubelet调用使用
  • Felix:运行在每一台 Host 的 agent 进程,主要负责在宿主机上维护路由规则、网络接口管理等
  • BIRD:BGP客户端,负责监听 Host 上由 Felix 注入的路由信息,然后通过 BGP 协议广播在集群里分发路由规则信息,从而实现网络互通
  • etcd:分布式键值存储,主要负责网络元数据一致性,确保 Calico 网络状态的准确性

4.Calico 工作原理:

IPIP 模式

  1. 原始数据包从源主机的Pod容器发出,经过 veth pair 设备送达到tunl0接口
  2. tunl0接口收到数据包后,由内核将原始数据包封装到node节点网络的IP报文里,再根据Felix维护的路由规则通过物理网卡发送到目标node节点
  3. IP数据包到达目标节点的tunl0接口后,由内核解封装获取原始数据包,数据报文再根据本地路由规则经过 veth pair 设备发送到目标Pod容器

BGP 模式

本质就是通过路由规则来实现Pod之间的通信

  • 每个Pod都有一个 veth pair 设置,一端接入Pod,另一端接入宿主机网络空间,并设置了一条路由规则
  • 这些路由规则都是 Felix 维护的,由 BIRD(BGP Client) 基于 BGP 动态路由协议分发给其它节点
  1. 原始数据包从源主机的Pod容器发出,经过 veth pair 设备送达到宿主机网络空间,再根据Felix维护的路由规则通过物理网卡发送到目标node节点
  2. 目标node节点收到数据包后,会根据本地路由规则经过 veth pair 设备送达到目标 Pod 容器

七.Flannel 和 Calico 对比

1.flannel

  • 模式: UDP  VXLAN  HOST-GW
  • 默认网段:10.244.0.0/16
  • 通常会采用VXLAN模式,由于用的是叠加网络、IP隧道方式传输数据,传输过程中需要额外的封包和解包,对性能有一点的影响
  • flannel简单易用
  • 不具备复杂的网络策略配置能力,性能方面表现一般

2.calico

  • 模式:IPIP  VXLAN  BGP  CrossSubnet(混合模式)
  • 默认网段:192.168.0.0/16
  • 使用IPIP或VXLAN模式可以实现跨网段通信,但是传输过程中需要额外的封包和解包,对性能有一点的影响
  • 使用BGP模式会把每个节点看作成路由器,通过Felix、BIRD组件来维护和分发路由规则,可实现直接通过路由规则直接发送数据包到目标主机,传输中不需要额外的封包和解包,因此性能较好。但是不能跨网段通信。
  • calico性能较高,具有丰富的网络

3.总结

  • flannel适合规模较小,网络要求简单的K8S集群
  • calico适合规模较大,需要设置网络策略,固定 PodIP 的K8S集群

4.Calico的IPIP模式对比Flannel的VXLAN模式的优势(补充)

4.1.性能和效率

  • IPIP模式使用IP in lP 协议进行隧道封装,
  • VXLAN 模式使用 VXLAN 协议
  • IPIP模式的隧道封装相对较简单(IPIP 模式只是在原始IP数据包的头部再封装一层IP头部,而VXLAN则在原始二层数据帧的头部再封装一个 VXLAN头和UDP头),相对来说IPIP模式的网络开销更少

4.2.协议支持

  • IPIP 模式使用标准的 IP inlP 协议,这意味着它可以在几乎所有的网络环境中使用,并且与各种网络设备和厂商兼容。
  • 相比之下VXLAN模式需要底层网络设备(如交换机、路由器)支持 VXLAN 功能才能正常工作(当然,当前的大多数设备都是支持的)

4.3.总结

  • Calico的IPIP模式对比常规模式仍存在因封包解包而造成的性能损耗,所以,如非必要,建议还是使用常规模式

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

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

相关文章

爆“卷”的AI视频,大厂向左,创企向右

文|白 鸽 编|王一粟 “生成的人物一转身就变成老外,怎么解决呢?” “没有办法,10s中动作大的,人物一致性有问题,只能抽卡,多刷几个,选择一个变化不大的。” 在一个以…

iOS开发过程中经常遇到的GCD的一些问题

目录 前言 1.performSelector相关的一个问题 2.一个崩溃问题 前言 记录GCD使用过程中遇到的一个小问题。 1.performSelector相关的一个问题 输入下面代码的打印结果: - (void)viewDidLoad {[super viewDidLoad];[self gcdDemos01]; } - (void)gcdDemos01{dispa…

语音识别 音码同步声纹分切系统 上海添力

目前主流的语音识别系统,是将语音识别成汉字,会有以下几个问题: 一、一旦识别成汉字,对应语音原有的声音属性都会丢失。在后期的人工智能应用中,仍然需要对识别出的汉字进行人工标注,以区别相同词语的不同情…

【机器学习sklearn实战】线性回归

一 基础概念 广义线性模型(2)线性回归 【机器学习】一文看尽 Linear Regression 线性回归 二 步骤 使用sklearn中的库,一般使用线性回归器 首先,导入包: from sklearn.linear_model import LinearRegression创建模…

PHP回收废品平台系统小程序源码

🌍绿色行动,从“回收废品平台系统”开始!🚚 🚪【家门口的环保站,废品不再无处安放】 你是否曾为家里的旧报纸、空瓶子、废旧电器等废品头疼不已,不知该如何处理?现在,“…

java-数据结构与算法-02-数据结构-07-优先队列

1. 概念 队列是一种先进先出的结构,但是有些时候,要操作的数据带有优先级,一般出队时,优先级较高的元素先出队,这种数据结构就叫做优先级队列。 比如:你在打音游的时候,你的朋友给你打了个电话…

安全基础学习-CRC理解与计算

由于一些任务要求需要了解CRC校验,于是来学习一下。 新人学习,大佬绕路。 前言 CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC&…

《计算机工程与应用》投稿经验

目录 前言期刊简介详细过程第1步:网站投稿第2步:交审稿费第3步:等外审第4步:返修所需材料描述 第5步:外审/复审/录用第6步:录用 前言 记录下投《计算机工程与应用》的正刊投稿经验。 整理了一些投稿期间常…

【C#】 使用GDI+获取两个多边形区域相交、非相交区域

一、使用GDI获取两个多边形区域相交、非相交区域 在 C# 中使用 GDI(Graphics Device Interface Plus)处理图形时,你可以使用 System.Drawing 和 System.Drawing.Drawing2D 命名空间中的类来操作区域(Region)。下面是一…

取图小程序搭建教程,达人+流量主+会员快速部署上线指南

目录 一、取图小程序是什么? 二、搭建教程 (一)前期准备 (二)开发环境搭建 (三)部署与上线 三、部分代码展示 一、取图小程序是什么? 取图小程序以其多元化的功能而著称&…

抖音本地生活城市代理保证金多少?最新标准出炉!

随着本地生活的前景和潜力不断显现,抖音本地生活城市代理的申请热度不断攀升,并逐渐成为众多创业者入局本地生活的首要选择,而与之相关的问题,如抖音本地生活城市代理保证金等更是长居相关社群话题榜的前列。 而就目前的市场情况来…

2024华为数通HCIP-datacom最新题库(H12-831变题更新⑧)

请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了,如果你准备去考试,还是用的之前的题库,切记暂缓。 1、…

抖音开放平台API接口如何开发||抖音相关接口数据采集数据分析 【附实例】

抖音开放平台提供了多种接口,包括授权登录、用户信息、视频管理、评论互动、消息通知、数据分析等。 以下是开发抖音接口的一些步骤: 1. 注册开发者账号:在抖音开放平台上注册开发者账号,获取开发者身份认证。 2. 创建应用&…

学习鸿蒙-利用Code Linter检查代码

如何检查: 1.在已打开的代码编辑器窗口单击右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter > Full Linter执行代码全量检查。 2.通过git 提交,可在commit界面右下角点击齿轮图标…

嵌入式开发问题总汇

1. 事情经过:有天快下班的时候,我们采购经理找到我,说,生成的bin文件通过软件上传烧录时,烧录就会重启,但是其他的板子就不会。最后他换了一个A厂家的flash芯片,就可以了。但是,B厂…

使用 Postman 进行 Trello API 自动化测试的完整指南

文章目录 前言一、自动化测试是什么?二、比较自动化测试与手工测试1. 自动化测试2. 手工测试 三、环境搭建1.创建Collection2.创建环境变量3.添加API请求 四、设计测试用例1. API简单调用2. 获取所有emoji3. 创建一个新看板:4. 获得创建的看板信息5. 在看…

【Git】git 从入门到实战系列(一)—— Git 的诞生,Linus 如何在 14 天内编写出 Git?

<> 博客简介&#xff1a;Linux、rtos系统&#xff0c;arm、stm32等芯片&#xff0c;嵌入式高级工程师、面试官、架构师&#xff0c;日常技术干货、个人总结、职场经验分享   <> 公众号&#xff1a;嵌入式技术部落   <> 系列专栏&#xff1a;C/C、Linux、rt…

【机器学习】决策边界的基本概念以及如何在逻辑回归中找到决策边界

引言 在机器学习中&#xff0c;决策边界是分类算法用来区分不同类别数据点的线、面或超平面。这些边界通常是模型的预测规则&#xff0c;用于将特征空间中的点分配到不同的类别。决策边界可以是线性的&#xff0c;也可以是非线性的&#xff0c;取决于数据的分布和所使用的分类算…

探索开明软件包:应用开发指南轻松掌握,快速上手!

开明软件包格式&#xff0c;是openKylin社区Kaiming SIG为应对传统包格式存在的系统与应用无明确界限、发行版碎片化、兼容性等问题而开发的一款全新软件包格式&#xff0c;满足ISV&#xff08;Independent Software Vendors&#xff09;应用发布和应用独立发布需求&#xff0…

AI绘画:PS+comfyUI 工作流,直接在PS搞AI!

前言 直接在PS搞AI要不要&#xff1f; 大神 Nima Nazari 发布了一个可以无缝链接PS和comfyUI的工作流。 小编对该工作流进行了一个安装使用的测评&#xff0c;该工作流可以无缝与PS进行互联操作&#xff0c;切换模型和修改参数时还是需要在PS和ComfyUI间切换。总体而言&#x…