【k8s】10.网络插件

news2024/12/30 1:38:35

文章目录

  • 一、etcd详解
    • 1、etcd的特点
    • 2、准备签发证书的环境
  • 二、网络插件原理
    • 1、flannel
      • 1.1 UDP模式(性能差)
      • 1.2 VXLAN模式(性能较好)
      • 1.3 host-gw模式(性能最高)
    • 2、calico插件
    • 3、总结

一、etcd详解

etcd是Coreos团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,etcd内部采用作为一致性算法,etcd是go语言编写。

1、etcd的特点

etcd作为服务发现系统,有以下的特点:

  • 简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单。
  • 安全:支持SSL证书验证。
  • 快速:单实例支持每秒2K+读操作。
  • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性。

etcd目前默认使用2379端口提供HTTP API服务。2380端口和peer通信,(这两个端口已被IANA官方预留给etcd)

#简单来说
etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器内部通讯。

etcd在生产环境中一般推荐集群方式部署,由于etcd的leader选举机制,要求至少为3台或以上的奇数台。

2、准备签发证书的环境

CFSSL是CloudFlare 公司开源的一款 PKI/TLS 工具,CFSSL包含一个命令行工具和一个用于签名、验证和捆绑TLS证书的HTTP API 服务。使用go语言编写。

  • CFSSL使用配置文件生成证书,因此自签之前,需要生成它识别的json格式的配置文件,CFSSL提供了方便的命令行生成配置文件。

CFSSL用来为etcd提供TLS证书,它支持三种类型的证书。

  • client 证书: 服务端连接客户端时携带的证书,用于客户端验证服务端身份,如kube-aoiserver访问etcd

  • server证书: 客户端连接服务端时携带的证书,用以服务端验证客户端身份,如etcd对外提供服务。

  • peer证书: 相互之间连接使用的证书,如etcd节点之间进行验证和通信。

etcd安装步骤
1、准备CA证书和私钥文件,使用CA签发服务端证书和私钥文件
2、使用CA证书、服务端证书和私钥文件加上etcd集群配置文件并且启动etcd服务。
3、复制etcd工作目录和服务管理文件,到灵台几个节点上,修改etcd集群配置文件没并且启动etcd服务,
4、使用v3版本接口执行etcdctl + 证书选项 + (endpoint health | endpoint status | member list)
5、查看etcd集群节点状态

二、网络插件原理

kubernets中网络通信

#Pod内容器与容器之间的通信
在同一个Pod内的容器(Pod内的容器是不会跨主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样。可以使用localhost地址访问彼此的端口,完成通信。

#同一个Node内Pod之间的通信
每个Pod都有一个真实的全局IP地址,同一个Node内的不同Pod之间可以直接采用对方的Pod的ip地址进行通信,Pod1和Pod2都是通过Veth连接到同一个docker0/cni0网桥,网段相同,所以他们之间可以直接通信。

#不同Node上Pod之间的通信
Pod地址与docker0在同一网段,docker0网段与宿主机网卡是两个不同的网段,且不同的Node之间的通信只能通过宿主机的物理网卡进行。
要想实现不同Node上Pod之间的通信,就必须想办法通过主机的物理网卡IP地址进行通信。
//因此要满足两个要求。
1、Pod的IP不能冲突
2、将Pod的IP和所在的Node的IP关联起来,通过这个关联让不同Node上Pod之间直接通过内网IP地址通信。

下面就将介绍两种可以使得不同Node上的Pod相互通信的插件

1、flannel

由CoreOS开发的项目Flannel,可能是最直接和最受欢迎的CNI插件,它是容器编排系统中最成熟的网络结构实例之一。

Flannel实质上是一种“ 覆盖网络(overlay network)”,也就是将TCP数据包装载另一个网络里面进行路由转发和通信。

#覆盖网络(overlay network)
//重叠网是节点和逻辑链接的虚拟网络,他们建立在现有的网络之上。
使用重叠网,可以创建多层网络抽象以运行虚拟化的网络,这些物理层均受物理基础架构的支持,重叠网的目的是在无需重新配置整个网络设计的情况下启用新服务或功能。

//简单来说,重叠网就是在现有网络基础上,抽象一层逻辑网络。可以使用逻辑网络进行传输。

flannel有三种网络工作模式

  • UDP模式: 使用设备flannel.0进行封包解包,不是内核原生支持,上下文切换较大,性能非常差。

  • vxlan模式: 使用flannel.1 进行封包解包,内核原生支持,性能较强。

  • host-gw模式: 无需flannel.1这样的中间设备,直接随主机当做子网的下一跳地址,性能最强。

1.1 UDP模式(性能差)

  • 核心就是通过TUN设备flannel0实现(TUN设备是工作在三层的虚拟网络设备,功能是:在操作系统内核和用户应用程序之间传递IP包

  • 相比两台宿主机直接通信,多了flanneld的处理过程,这个过程,使用了flannel0这个TUN设备,仅在发出IP包的过程中就要经过了三次用户态到内核态的数据拷贝,(linux的上下文切换代价比较大),所以性能非常差。

image-20220925163546244

上图数据流向原理说明

  • 在flannel管理的容器网络里,一台宿主机上的所有容器,它们被分配一个共用 “ 子网 ”,子网与宿主机的对应关系,存在Etcd中。(例如: Node1的子网是100.96.1.0/16,containner-1的ip地址是:100.96.1.2)

  • 当flanneld进程处理flannel传入的IP包时,就可以根据目的地址(如100.96.2.3),匹配到对应的子网(比如:100.96.2.0/16),从etcd中找到这个子网对应的宿主机的IP地址(10.168.0.3/24)

  • 然后flanneld在收到container-1给container-2的包后,把这个包直接封装在UDP包里,发给Node2(UDP包的源地址是Node1,目的地址是Node2)

  • 每台宿主机的flanneld都监听着8285端口,所以flanneld只要把UDP发给node2的8285端口就行了,然后Node2的flannel再把IP包发给他所管理的TUN设备flannel0,flannel0设备再发给docker0

#简单来说

1、在Node1和Node2上面再部署了一个叠加网络,这个网络给每一个node分配一个虚拟网络设备(TUN)。这个设备主要是处理系统内核和用户之间传递IP包。

2、etcd中会存储每个pod网段(namespace)和主机ip的路由信息表。
   存储管理Flannel可分配的IP地址段资源
   监控 ETCD 中每个 Pod 的实际地址,并在内存中建立维护 Pod 节点路由表

3、当Node1的containner-1向Node2的containner-2发送请求时。首先数据包会到达Node1的docker0上面,因为docker0相当于它的网关,然后再发给flannel0这个虚拟网络,虚拟网络将数据包发送给flanneld进程,它根据etcd中存储的路由表信息,将数据包通过物理主机网卡发送到对应的物理主机上的响应的8285端口上。

4、对应主机收取到后,进行解压,解压后,将UDP包发送给docker0,最后根据目标地址转发给对应的containner-2

1.2 VXLAN模式(性能较好)

VXLAN(Virtual Extensible LAN)是一种网络虚拟化技术,他使用一种隧道协议,将二层以太网帧封装在四层UDP报文中,通过三层网络传输,组成一个虚拟大二层网络。

什么是VXLAN?

  • VXLAN是linux本身支持的一种网络虚拟化技术,VXLAN可以在内核态实现封装和解封装工作,从而通过 “ 隧道 ”机制,构建出覆盖网络。

vlan和VXlan的区别?

  • vlan
vlan(虚拟局域网),将交换机网络进行隔离,解决广播风暴的危险。
#缺点

1、Vlan技术最多支持4096的Vlan,已无法满足需求。

2、公有云提供商的业务要求将实体网络租借给多个不同的用户,这些用户的网络有可能出现IP地址、MAC地址重叠,传统的vlan仅仅解决广播域的问题,而解决不了网络地址重叠问题。

3、由于虚拟化的出现,交换机的负担增加,每台交换机需要承受多台虚拟机的MAC地址,从而影响交换机的转发性能
  • vxlan
vxlan(虚拟扩展局域网),采用MAC-in-UDP报文封装模式,通过将二层报文使用三层协议封装实现二层网络在三层范围内扩展,满足数据中心大二层虚拟机迁移和多租户需求。

#相比valan的优势
124位长度的VNI字段可以支持更多数量的虚拟网络,解决了vlan数目上限4094的局限性。

2VXLAN技术通过隧道技术在物理的三层网络中虚拟二层网络,处于VXLAN网络的终端无法察觉到VXLAN的通信过程,这样也就使得逻辑网络拓扑和物理网络拓扑实现了一定程度的解耦,网络拓扑的配置对于物理设备的配置的依赖程度有所降低,配置更灵活更方便。

3VLAN技术仅仅解决了二层网络广播域分割的问题,而VXLAN技术还具有多租户支持的特性,通过VXLAN分割,各个租户可以独立组网、通信,地址分配方面和多个租户之间地址冲突的问题也得到了解决。

VXLAN模式核心思想

  • Vxlan模式使用比较简单,flannel会在各个节点生产各行一个flannel.1的VXLAN网卡(VTEP设备,负责VXLAN的封装和解封装)。
  • VXLAN模式下封包与解包的工作是由内核进行的。flannel不转发数据,仅动态设置ARP表和MAC表项。
  • UDP模式的flannel0网络是三层转发,使用flannel0时在物理网络之上构建三层网络,属 于 ip in udp ;VXLAN模式是二层实现,overlan是数据帧,属于mac in udp。
image-20220925173309017

上图解释说明:

  • 数据帧从Node1上的Pod的源容器发出后,经由所在主机的docker0/cni0 网络接口转发到flannel.1接口。
  • flannel.1 收到数据帧后添加VXLAN头部,封装在UDP报文中。
  • Node1通过物理网卡发送封包到Node2的物理网卡中。
  • Node2的物理网卡通过VXLAN默认的端口4789转发到flannel.1接口进行解封装
  • 解封装以后,内核将数据帧发送到cni0.最后由cni0发送到桥接到此接口的Node2中的容器。

1.3 host-gw模式(性能最高)

这是一种纯三层络的方案,性能最高

image-20220925175647165

  • 就是将每个Flannel子网的下一跳,设置成了该子网对应的宿主机的IP地址,也就是说 ,宿主机(host)充当了这条容器通信路径的“网关”(Gateway), 这正是host-gw的含义
    所有的子网和主机的信息,都保存在Etcd中,flanneld只需要watch这些数据的变化 ,实时更新路由表就行了。
  • 核心是IP包在封装成数据帧的时候,使用路由表的“下一跳”设置上的MAC地址,这样可以经过二层网络到达目的宿主机

2、calico插件

原理:

一台主机可以理解成一个路由器,每个虚拟机上面的容器通过veth将请求发送到本机网卡上,然后通过 veth pair设备传输到另外一台设备上面的veth pair设备,然后通过veth传输到本机的容器。

每台设备通过路由器进行转发路由信息,路由条目主要是静态路由和BGP路由。

image-20220928083740021

flannel方案

  • 需要在每个节点上把发向容器的数据进行封装后, 再用隧道将封装后的数据包发送到运行着目标Pod的node节点上,目标node节点再负责去掉封装,将取出封装的数据包发送到目标Pod上。数据通信性能则大受影响。

calico方案

  • calico不使用隧道或NAT来实现转发,而是把Host当做internet中的路由器,使用BGP同步路由,并使用iptables来做安全访问策略,完成跨Host转发。
  • 采用直接路由的方式,这种方式性能锁好最低,不需要修改报文数据,但是如果网络比较复杂场景下,路由表会很复杂,对运维同时提出了较高的要求。

calico主要由三个部分组成

  • calico CNI插件: 主要负责与kubernetes对接,共kubelet调用使用。
  • Felix : 负责额维护宿主机上的路由规则,FIB转发信息库等。
  • BIRD: 负责分发路由规则,类似路由器
  • Confd: 配置管理组件

calico工作原理

  • calico 是通过路由表来维护每个pod的通信。calico的CNI插件会为每个容器设置一个veth pair设备,然后把另一点接入到宿主机网络空间,由于没有网桥,CNI插件还需要在宿主机上为每个容器的veth pair设备配置一条路由规则,用于接收传入的IP包。

  • 有了这样的veth pair 设备以后,容器发出的ip包就会通过veth pair 设备到达宿主机, 然后宿主机根据路由规则的下一跳地址,发给正确的网关,然后到达目标宿主机,再到达容器。

  • 这些路由规则都是Felix 维护的,而路由信息则是calico BRED 组件基于BGP分发而来。

  • calico 实际上是将集群里的所有的节点都当做边界路由器来处理,他们一起组成了一个全互连的网络,批次之间通过BGP交换路由,这些节点我们叫做 BGP Peer。

3、总结

目前比较常用的CNI网络组件是flannel和calico。

  • flannel的功能比较简单,不具备复杂的网络策略配置能力,
  • Calico是比较出色的网络管理插件,但具备复杂网络配置能力的同时,往往意味着本身的配置比较复杂,所以相对而言,比较小而简单的集群使用flannel,考虑到日后扩容,未来网络可能需要加入更多设备,配置更多网络策略,则使用calico更好。

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

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

相关文章

Redis_第二章_实战篇_第一节_ 短信登录

Redis_第二章_实战篇_第一节_ 短信登录 文章目录Redis_第二章_实战篇_第一节_ 短信登录短信登录1.1、导入黑马点评项目1.1.1 、导入SQL1.1.2、有关当前模型1.1.3、导入后端项目1.1.4、导入前端工程1.1.5 运行前端项目:1.2 、基于Session实现登录流程1.3 、实现发送短信验证码功…

ANDI数据集介绍|补充信息|2022数维杯国际赛C题

目录 1.患者基本信息 2.生物标记物量化值 3.认知评估 4.解剖结构量化值 5.Other 6.上述各信息的bl值 1.患者基本信息 RID (Participant roster ID) ex. 2、PTID (Original study protocol) ex. 011_S_0002、VISCODE (Visit code) ex. bl、SITE ex. 11、COLPROT (Study p…

服务拆分和远程调用(微服务)

博客主页:踏风彡的博客 博主介绍:一枚在学习的大学生,希望在这里和各位一起学习。 所属专栏:SpringCloud 文章创作不易,期待各位朋友的互动,有什么学习问题都可在评论区留言或者私信我,我会尽我…

课程设计 | 教学设备管理系统

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

SpringCloud微服务(二)——Eureka服务注册中心

Eureka服务注册中心 SpringCloud组件,Eureka已停更。 内容简介 1、Eureka是什么 Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件,以实现中间层服务器的负载平衡和故障转移。服务注册:将服务…

[杂记]算法: 单调栈

0. 引言 单调栈, 顾名思义就是从栈底到栈顶元素单调递增或者单调递减的栈. 往往, 我们在解决寻找一个元素前面/后面的最远/最近处满足某条件的另一个元素的时候可以用到单调栈. 也是用两道算法题作为例子. 在这之前, 先简单写一下构造单调栈的模板. 如果我们需要从一个数组中…

ES6 入门教程 18 Iterator 和 for...of 循环 18.7 for...of 循环

ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录ES6 入门教程18 Iterator 和 for...of 循环18.7 for...of 循环18.7.1 数组18.7.2 Set 和 Map 结构18.7.3 计算生成的数据结构18.7.4 类似…

供应叶酸PEG试剂Folic acid-PEG-Azide,FA-PEG-N3,叶酸-聚乙二醇-叠氮

1、名称 英文:Folic acid-PEG-Azide,FA-PEG-N3 中文:叶酸-聚乙二醇-叠氮 2、CAS编号:N/A 3、所属分类:Azide PEG Folic acid(FA) PEG 4、分子量:可定制,FA-PEG-N3 5…

Web安全之CTF测试赛

Web安全之CTF测试赛 1.000-我是谁 题目描述: 找到诈骗网站bsde.cn的域名注册人及邮箱,将域名注册人的126邮箱填写到下方答案框并点击送出 考察点:whois查询 whois查询网址: https://x.threatbook.com/ //微步在线 http://wh…

ES6 入门教程 17 Promise 对象 17.11 Promise.reject() 17.12 应用 17.13 Promise.try()

ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录ES6 入门教程17 Promise 对象17.11 Promise.reject()17.12 应用17.12.1 加载图片17.12.2 Generator 函数与 Promise 的结合17.13 Promise…

ES6 入门教程 15 Proxy 15.2 Proxy 实例的方法 15.2.2 set() 15.2.3 apply()

ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录ES6 入门教程15 Proxy15.2 Proxy 实例的方法15.2.2 set()15.2.3 apply()15 Proxy 15.2 Proxy 实例的方法 拦截方法的详细介绍。 15.2.…

【附源码】Python计算机毕业设计天润律师事务所管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

〖全域运营实战白宝书 - 运营角色认知篇③〗- 运营的底层逻辑是什么?

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

【笔试题】【day24】

文章目录第一题(完全二叉树的最多结点个数)第二题(哈夫曼树的带权路径长度)第三题(堆的重建)第四题(哈希映射的冲突)第一题(完全二叉树的最多结点个数) 一棵…

UE4 几种蓝图通信的方法

根据视频(UE4 几种蓝图通讯的方法)所做笔记 目录 方法一:通过公有变量 方法二:通过“获取类的所有actor”节点 方法三:通过蓝图接口 关卡蓝图与蓝图通信 方法一:通过公有变量 步骤: 1.新建…

一款php开发的非常好的OA办公管理系统源码

一款基于TP5 HAdmin Mysql打造的简单实用的开源的企业办公系统框架。可以帮助解决企业办公项目60的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。使用本系统可以简单快速地开发出企业级的…

如何将 MATLAB 源代码导出成 Java 的 JAR 包

文章目录编写 MATLAB 源文件安装 Java制作 JAR 包找到 MATLAB 的 JAR 包运行环境: MATLAB R2022a Java 8(1.8.0_311) Windows 10 教育版 64位 使用混合编程通常都不是好主意,但是有时候会遇到极端的情况。Java 擅长网络编程&am…

vivo霍金实验平台设计与实践-平台产品系列02

vivo 互联网平台产品研发团队 - Bao Dawei 本篇介绍了vivo霍金实验平台的系统架构以及业务发展过程中遇到的问题以及对应的解决方案。 《平台产品》系列文章: 1.vivo平台化实践探索之旅-平台产品系列01 一、前言 互联网企业经历过野蛮生长的开拓红利期之后&#xf…

UE4 TCP通信 (UE客户端与网络调试助手服务端、python服务端通信)

目录 一、使用UE4建立TCP客户端 二、使用网络调试助手建立服务端 三、基于网络调试助手的服务端与UE客户端通信 四、基于python的TCP服务端与UE客户端通信 一、使用UE4建立TCP客户端 1.在虚幻商城中搜索socket来下载TCP Socket Plugin插件 2.安装到引擎,目前…

面向对象分析与设计_类图

判断题 类与对象之间的关系,可以理解为模板与具体实例之间的关系 T 类是现实世界中客观存在的事物或实体。 F 类是具有相同属性和服务的一组对象的集合 T 对象的属性都有值,类的属性没有值 T 类的可见性描述了其属性和操作是否对于其他类可见&…