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

【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 面试题汇总

 


http://www.kler.cn/a/321039.html

相关文章:

  • 【PIP】完整指南:Python `pip install` 和 `pip uninstall` 命令详解与清理技巧
  • docker部署bitnami/etcd:latest
  • 【数据库系列】 Spring Boot 集成 Neo4j 的详细介绍
  • 如何保证MySQL与Redis缓存的数据一致性?
  • 如何优化Kafka消费者的性能
  • 如何修改npm包
  • 《深度学习》—— ResNet 残差神经网络
  • 【OSS安全最佳实践】降低因账号密码泄露带来的未授权访问风险
  • 【小程序】微信小程序课程 -2 快速上手
  • 论文不会写怎么办?推荐这5款AI论文工具帮你一键搞定!
  • 【隐私计算篇】利用多方安全计算MPC实现VGG16人脸识别隐私推理
  • C++学习笔记(34)
  • 【MySQL】字符集与Collation
  • MySQL 预处理语句:强大的数据库工具
  • en造数据结构与算法C# 用Unity实现简单的群组行为算法 之 分散
  • 运算符两边的数据类型
  • [数据库] Redis学习笔记(一):介绍、安装、基本数据结构、常见命令
  • 在Windows系统上安装的 zstd C++ 库
  • ADB 安装教程:如何在 Windows、macOS 和 Linux 上安装 Android Debug Bridge
  • Spring 事务与 MySQL 事务:深度解析与实战指南
  • 使用docker创建zabbix服务器
  • 2024华为杯E题成品文章已出!
  • 使用Crawler实例进行网页内容抓取
  • 制造企业为何需要PLM系统?PLM系统解决方案对制造业重要性分析
  • Python Web 分布式系统性能监控与链路追踪技术解析
  • vue实现鼠标滚轮控制页面横向滑动