当前位置: 首页 > news >正文

【Kubernetes】常见面试题汇总(二十九)

目录

 

81.简述你知道的几种 CNI 网络插件,并详述其工作原理。K8s 常用的CNI网络插件(calico && flannel),简述一下它们的工作原理和区别。

特别说明:

题目   1-68   属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。

题目 69-113 属于【Kubernetes】的生产应用题。


81.简述你知道的几种 CNI 网络插件,并详述其工作原理。K8s 常用的CNI网络插件(calico && flannel),简述一下它们的工作原理和区别。

(一)calico 的工作原理:

(1)calico 根据 iptables 规则进行路由转发,并没有进行封包,解包的过程,这和 flannel 比起来效率就会快多。

(2)calico 包括如下重要组件:Felix,etcd,BGP Client,BGP Route Reflector。下面分别说明一下这些组件:

① Felix:主要负责路由配置以及 ACLS 规则的配置以及下发,它存在在每个 node 节点;

② etcd:分布式键值存储,主要负责网络元数据一致性,确保Calico 网络状态的准确性,可以与 kubernetes 共用;

③ BGP Client(BIRD):主要负责把 Felix 写入 kernel 的路由信息分发到当前 Calico 网络,确保 workload 间的通信的有效性;

④ BGP Route Reflector(BIRD):大规模部署时使用,摒弃所有节点互联的 mesh 模式,通过一个或者多个 BGP Route Reflector 来完成集中式的路由分发。

(3)通过将整个互联网的可扩展 IP 网络原则压缩到数据中心级别,Calico 在每一个计算节点利用 Linuxkernel 实现了一个高效的 vRouter 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播小规模部署可以直接互联,大规模下可通过指定的 BGP Route Reflector 来完成。这样保证最终所有的 workload 之间的数据流量都是通过 IP 包的方式完成互联的。

(二)Flannel 的工作原理:

(1)Flannel 实质上是一种 “ 覆盖网络(overlay network)” ,也就是将 TCP 数据包装在另一种网络包里面进行路由转发和通信,目前已经支持 UDP、VxLAN、AWS VPC 和 GCE 路由等数据转发方式。

(2)默认的节点间数据通信方式是 UDP 转发。

工作原理:

数据从源容器中发出后,经由所在主机的 docker0 虚拟网卡转发到 flannel0 虚拟网卡(先可以不经过 docker0 网卡,使用 cni 模式),这是个 P2P 的虚拟网卡,flanneld 服务监听在网卡的另外一端。

(3)Flannel通过 Etcd 服务维护了一张节点间的路由表,详细记录了各节点子网网段。

(4)源主机的 flanneld 服务将原本的数据内容 UDP 封装后根据自己的路由表投递给目的节点的 flanneld 服务,数据到达以后被解包,然后直接进入目的节点的 flannel0 虚拟网卡,然后被转发到目的主机的 docker0 虚拟网卡,最后就像本机容器通信一下的有 docker0 路由到达目标容器。

(5)flannel 在进行路由转发的基础上进行了封包解包的操作,这样浪费了 CPU 的计算资源。


“【Kubernetes】常见面试题汇总” 系列文章,可点击链接查看专栏详情:K8s 面试题汇总

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++第1课——输出、变量和输入(含视频讲解)
  • MySQL深入原理
  • OpenCV特征检测(3)计算图像中每个像素处的特征值和特征向量函数cornerEigenValsAndVecs()的使用
  • 【ShuQiHere】深入理解布尔代数中的 SOP、POS、DNF 和 CNF
  • c# 线程等待变量的值符合条件
  • C++重生之我是001
  • 【django】局域网访问django启动的项目
  • [Java并发编程] synchronized(含与ReentrantLock的区别)
  • 常见的中间件漏洞
  • JVM 调优篇7 调优案例2-元空间的优化解决
  • 【什么是B/S、C/S架构】
  • 408算法题leetcode--第11天
  • nginx架构篇(三)
  • PHP环境搭建
  • 数据结构--第七章查找
  • (三)从jvm层面了解线程的启动和停止
  • 【翻译】babel对TC39装饰器草案的实现
  • css系列之关于字体的事
  • Docker下部署自己的LNMP工作环境
  • extract-text-webpack-plugin用法
  • Git的一些常用操作
  • Js基础——数据类型之Null和Undefined
  • LeetCode18.四数之和 JavaScript
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Webpack 4 学习01(基础配置)
  • 程序员该如何有效的找工作?
  • 创建一种深思熟虑的文化
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 那些被忽略的 JavaScript 数组方法细节
  • 小而合理的前端理论:rscss和rsjs
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • AI算硅基生命吗,为什么?
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​批处理文件中的errorlevel用法
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #pragma once与条件编译
  • (¥1011)-(一千零一拾一元整)输出
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (3)(3.5) 遥测无线电区域条例
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (未解决)macOS matplotlib 中文是方框
  • .jks文件(JAVA KeyStore)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET使用存储过程实现对数据库的增删改查
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Bean有哪些属性
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作