CNI系列(三)插件实现
原文链接:https://www.gogo-dev.com/index.php/2022/04/10/cni03/
说明
上文我们描述了容器运行时是如何调用CNI插件的,本文就开始描述一些简单的CNI插件的实现。
containernetworking/cni项目提供了cni标准在runtime侧的实现,比如containerd就是直接调用了该库从而去调用CNI插件。而contianernetworking/plugins项目里则是容器网络组官方实现的一些简单插件,比如bridge、macvlan等插件。
下文我们就以macvlan插件为例来讲述插件是如何实现CNI标准的。在介绍之前,我们先对macvlan技术做一下简单说明,macvlan技术其实就是在主网卡上创建了一张子网卡。当主网卡收到包的时候,会判断目的mac地址是否是子网卡的,如果是就将报文转入子网卡。了解到这里,我们就基本可以猜测macvlan插件应该就是把子网卡放入容器内部作为容器的网卡使用了,那插件至少需要一个特定参数指定使用哪张网卡作为主网卡,即下文的master参数。至于macvlan子网卡还有不同的模式这里就不做介绍了,有兴趣的可以查阅相关资料。
代码实现
github.com/containernetworking/plugins,版本v1.0.0
我们先来看下plugins项目的目录结构,包含了一些简单的插件,
macvlan插件
主函数主要是调用skel插件库注册了cmdAdd、cmdCheck、cmdDel三个命令接口,
还是以cmdAdd为例,根据CNI标准,该操作会向容器netns内部创建一张网卡,然后配置IP和路由等。首先是解析runtime运行时传入的网络配置,
macvlan插件支持的配置如下,
在解析完网络配置之后,macvlan插件就可以去创建macvlan子网卡,然后将网卡放入容器隔离空间了,
根据CNI标准,macvlan插件也将IPAM委托给了其它插件(layer3模式),因此这里如果是Layer3模式的macvlan接口,就会调用委托调用指定的IPAM插件分配IP,根据返回的结果配置网卡的IP和路由等,
最后插件则返回CNI标准指定的结果格式,
host-local(IPAM插件)
上文我们提到了macvlan插件将IPAM委托给了其他插件,这里我们就以host-local插件为例,该插件实现同样在containernetworking/plugins项目里,在插件的ipam目录下,
cmdAdd接口,
总结
以上内容基于macvlan插件和host-local插件简单的描述了一个CNI插件是如何对CNI标准进行了实现,大家可以对着第一篇文章CNI标准译文进行阅读,应该就可以有一个基本的了解了。也大概能清楚一个CNI插件应该包含哪些东西,如何进行实现。
CNI系列(三)插件实现相关推荐
- 前端工程师和设计师必读文章推荐【系列三十三】
<Web 前端开发精华文章推荐>自2011年6月20号发布第一期以来,历经三年半,总共发布了30多期.今天这篇是2015年第2期(总第33期),希望你能在这里发现有用的资料. 梦想天空专注 ...
- 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量...
当团队对系统业务和数据库进行了细致的梳理,确定了切分方案后,接下来的问题就是如何去实现切分方案了,目前在sharding方面有不少的开源框架和产 品可供参考,同时很多团队也会选择自主开发实现,而不管是 ...
- 前端工程师和设计师必读文章推荐【系列三十六】
<Web 前端开发精华文章推荐>自2011年6月20号发布第一期以来,历经五年半,总共发布了30多期.今天这篇是2017年第2期(总第36期),希望你能在这里发现有用的资料. 梦想天空专注 ...
- Web 开发人员和设计师必读文章推荐【系列三十】
<Web 前端开发精华文章推荐>2014年第9期(总第30期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web开发和设计精华文章推荐【系列三】
这篇文章继续向大家分享Web开发和设计精华文章,文章主要来自今年七月份发布在梦想天空博客的博文.梦想天空博客专注于分享Web开发技术.资源和教程,展示最新 HTML5 和 CSS3 技术应用,分享实用 ...
- 后端如何发出请求_gRPC系列(三) 如何借助HTTP2实现传输
本系列分为四大部分: gRPC系列(一) 什么是RPC? gRPC系列(二) 如何用Protobuf组织内容 gRPC系列(三) 如何借助HTTP2实现传输 gRPC系列(四) 框架如何赋能分布式系统 ...
- 数据库MYSQL学习系列三
数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...
- PMP考前复习题 系列三
PMP考前复习题 系列三 转载于:https://blog.51cto.com/fishvsfrog/778280
- [ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器
原文:[ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器 上一章 [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis 介绍了Red ...
- 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
最新文章
- android代码修改excel文件格式,Android实现类似execel的表格 能回显并能修改表格内容的方法...
- python 选择结构教学设计_初中信息技术_信息技术初一下册《Python选择结构if-else》教学设计学情分析教材分析课后反思...
- css中实现div的显示和隐藏
- 介绍一个好用的静态图片合成为 gif 动画的在线网站
- redis watch使用场景_redis不得不会的事务玩法
- srs10流程图_高效的SRS资源指示方法与流程
- boot整合redis
- 兼容各种浏览器的自动左右滚动兼左右点击滚动代码
- 【BZOJ 1047】[HAOI2007]理想的正方形
- C#曲线分析平台的制作(二,echarts前后台数据显示)
- Mysql 按 create_time 排序导致的问题
- 2020-11-25
- 深入浅出 RPC - 浅出篇
- LeetCode不浪费原料的汉堡制作方案
- 2018ICPC焦作站 B - Ultraman vs. Aodzilla and Bodzilla(贪心)
- 最强大的电子书管理软件 calibre 资源
- 2021年度训练联盟热身训练赛第一场 A.Weird Flecks, But OK (最小覆盖圆)
- 计算机算法对程序设计的作用,【程序设计论文】高中算法与程序设计教学意义及有效性(共3796字)...
- 【layui】图片查看器
- Express项目中用javascript实现连接mysql数据库