原文链接: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系列(三)插件实现相关推荐

  1. 前端工程师和设计师必读文章推荐【系列三十三】

    <Web 前端开发精华文章推荐>自2011年6月20号发布第一期以来,历经三年半,总共发布了30多期.今天这篇是2015年第2期(总第33期),希望你能在这里发现有用的资料. 梦想天空专注 ...

  2. 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量...

    当团队对系统业务和数据库进行了细致的梳理,确定了切分方案后,接下来的问题就是如何去实现切分方案了,目前在sharding方面有不少的开源框架和产 品可供参考,同时很多团队也会选择自主开发实现,而不管是 ...

  3. 前端工程师和设计师必读文章推荐【系列三十六】

    <Web 前端开发精华文章推荐>自2011年6月20号发布第一期以来,历经五年半,总共发布了30多期.今天这篇是2017年第2期(总第36期),希望你能在这里发现有用的资料. 梦想天空专注 ...

  4. Web 开发人员和设计师必读文章推荐【系列三十】

    <Web 前端开发精华文章推荐>2014年第9期(总第30期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  5. Web开发和设计精华文章推荐【系列三】

    这篇文章继续向大家分享Web开发和设计精华文章,文章主要来自今年七月份发布在梦想天空博客的博文.梦想天空博客专注于分享Web开发技术.资源和教程,展示最新 HTML5 和 CSS3 技术应用,分享实用 ...

  6. 后端如何发出请求_gRPC系列(三) 如何借助HTTP2实现传输

    本系列分为四大部分: gRPC系列(一) 什么是RPC? gRPC系列(二) 如何用Protobuf组织内容 gRPC系列(三) 如何借助HTTP2实现传输 gRPC系列(四) 框架如何赋能分布式系统 ...

  7. 数据库MYSQL学习系列三

    数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...

  8. PMP考前复习题 系列三

    PMP考前复习题 系列三 转载于:https://blog.51cto.com/fishvsfrog/778280

  9. [ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器

    原文:[ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器 上一章 [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis  介绍了Red ...

  10. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

最新文章

  1. android代码修改excel文件格式,Android实现类似execel的表格 能回显并能修改表格内容的方法...
  2. python 选择结构教学设计_初中信息技术_信息技术初一下册《Python选择结构if-else》教学设计学情分析教材分析课后反思...
  3. css中实现div的显示和隐藏
  4. 介绍一个好用的静态图片合成为 gif 动画的在线网站
  5. redis watch使用场景_redis不得不会的事务玩法
  6. srs10流程图_高效的SRS资源指示方法与流程
  7. boot整合redis
  8. 兼容各种浏览器的自动左右滚动兼左右点击滚动代码
  9. 【BZOJ 1047】[HAOI2007]理想的正方形
  10. C#曲线分析平台的制作(二,echarts前后台数据显示)
  11. Mysql 按 create_time 排序导致的问题
  12. 2020-11-25
  13. 深入浅出 RPC - 浅出篇
  14. LeetCode不浪费原料的汉堡制作方案
  15. 2018ICPC焦作站 B - Ultraman vs. Aodzilla and Bodzilla(贪心)
  16. 最强大的电子书管理软件 calibre 资源
  17. 2021年度训练联盟热身训练赛第一场 A.Weird Flecks, But OK (最小覆盖圆)
  18. 计算机算法对程序设计的作用,【程序设计论文】高中算法与程序设计教学意义及有效性(共3796字)...
  19. 【layui】图片查看器
  20. Express项目中用javascript实现连接mysql数据库

热门文章

  1. Python快速过一遍,重要知识点简单记录
  2. 微博社交圈子挖掘所面临的困难
  3. 2.Cairo图形库-定义
  4. ORACLE WHER条件的执行顺序是不是自右向左
  5. 一文解读广告投放全攻略,提升拓客效率
  6. 如何在java中添加照片_Java如何将图片添加到PPT幻灯片中?
  7. 【海岛吉他7】吉他琴弦间音程度数关系
  8. 奥斯汀页眉怎么设置_word奥斯汀样式页眉怎么下拉
  9. LVS三种工作方式八种算法
  10. SQL Server数据库作业:连接查询