CNI Proposal 摘要
原文连接:https://github.com/containernetworking/cni/blob/master/SPEC.md
General consideration
CNI的想法是先让容器runtime为每个容器创建一个新的network namespace,之后再决定容器应该属于哪个network。而对于每个network,需要决定执行哪个插件。
CNI Plugin
Overview
每个CNI插件都是一个可执行文件,能被例如Docker这样的容器管理系统直接调用。通常,CNI插件用于将一个网卡插入容器的network namespace,并且在宿主机中做一些必要的配置。之后,还要给网卡赋上IP,并且通过调用合适的IPAM插件来建立和IP Address Management section一致的路由规则。
Parameters
ContainerID:该项是可选的但是必须的。不一定是实际的ContainerID,也可以是Pod ID,但必须保证全局唯一。
Network configuration:一个用于描述容器所加入的网络的JSON文件。
Extra argument:在每个容器的基础配置上提供了额外的灵活性。
Name of the interface inside the container:该名字需要被赋给容器内的网卡,通常,它需要和标准的Linux网卡命名规则一致。
Result
Interfaces list:对于不同的插件,该项有所不同,可能会包含sandbox的网卡名和宿主机网卡的名字,每个网卡的硬件地址,以及网卡所在的sandbox的一些细节。
IP configuration assigned to each interface:sandbox或者宿主机内的网卡的IPv4以及IPv6地址,网关以及路由。
DNS information:包含nameservers,domain,search domain以及其他DNS信息的字典
The executable command-line API使用网络的类型名作为调用的可执行文件的名字。它会在一系列预先定义的目录里面查找可执行文件。一旦找到,它就会用以下的环境变量作为参数调用该可执行文件:
- CNI_COMMAND:表示指定的操作;ADD,DEL或者VERSION
- CNI_CONTAINERID:容器ID
- CNI_NETNS:network namespace文件的路径
- CNI_IFNAME:创建的网卡的名字;plugin必须服从该命名或者返回一个错误
- CNI_ARGS:用户在调用时额外传入的参数。以包含数字和字母,用分号分开的键值对表示;例如,“FOO=BAR;ABC=123”
- CNI_PATH:用于查询CNI可执行文件的路径集合。在Linux中路径名用':'隔开,Windows用';'隔开
JSON形式的网络配置用stdin的方式流入plugin。这意味着它不依赖于磁盘上任何特定的文件,可以在多次的调用中保留配置信息。
Network Configuration
网络配置以JSON格式描述。有如下字段:
....
- name (sring):网络的名字,必须全局唯一
- type (string):plugin可执行文件的名字
- args (dictionary):由容器运行时提供的可选的参数
- ipMasq (boolean):可选的(如果plugin支持的话)。为该网络在宿主机上创建一个IP masquerade。这对于那些无法路由到容器IP,只能将宿主机作为网关的子网是必要的。
- ipam:由IPAM specific values组成的字典:
- type (string):IPAM plugin可执行文件的文件名
- routes (list):CNI plugin必须保证能路由到的一系列子网(以CIDR形式表示)。每个条目都是一个字典,包含:
- dst (string):用CIDR形式表示的子网
- gw (string):网关的IP地址。如果没有制定,那就假设是子网的默认网关(由IPAM plugin决定)
- dns:与DNS相关的字典:
- nameservers (list of strings):按优先级排列的DNS nameserver的列表。每一个表项都是IPv4或IPv6地址字符串
- domain (string):local domain used for short hostname lookups
- search (list of strings):一系列以优先级排列的search domains for short hostname lookup。相比于domain,大多数resolver更喜欢search
- options (list of strings):一系列传递给resolver的options
Plugin可能会定义一些它们自己需要的额外的字段,如果碰到不能识别的字段也可能报错。例外的是args字段,它可以被用于传递任意的数据,但它们可能会被plugin忽略。
IP Allocation
因为大多数plugin都要编写相同的代码用于支持各种用户想要的IP 管理框架(例如,dhcp,host-local)。因此,可以将这部分的内容抽象出来,形成第二种插件——IP Address Management Plugin(IPAM plugin)。IPAM Plugin主要用于确定网卡的IP/子网,网关以及路由,并将这些信息返回给“main” plugin。
IP Address Management(IPAM)Interface
IPAM plugin也以可执行文件的方式被调用。通常IPAM plugin不知道它的parent plugin配置的网卡的相关信息,像dhcp IPAM plugin这样的特别的IPAM除外。
IPAM有host-local和dhcp两种:
- host-local:在一定区域内选择一个未被使用的IP地址
- dhcp:使用DHCP协议获取IP。因为DHCP请求会通过已创建的容器网卡转发,因此相关的网络必须支持广播
CNI Proposal 摘要的更多相关文章
- docker的网络-Container network interface(CNI)与Container network model(CNM)
Overview 目前围绕着docker的网络,目前有两种比较主流的声音,docker主导的Container network model(CNM)和社区主导的Container network in ...
- 论文阅读笔记四十五:Region Proposal by Guided Anchoring(CVPR2019)
论文原址:https://arxiv.org/abs/1901.03278 github:code will be available 摘要 区域anchor是现阶段目标检测方法的重要基石.大多数好的 ...
- 论文阅读笔记二十七:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(CVPR 2016)
论文源址:https://arxiv.org/abs/1506.01497 tensorflow代码:https://github.com/endernewton/tf-faster-rcnn 室友对 ...
- 深度学习论文翻译解析(三):Detecting Text in Natural Image with Connectionist Text Proposal Network
论文标题:Detecting Text in Natural Image with Connectionist Text Proposal Network 论文作者:Zhi Tian , Weilin ...
- 《CNI specification》翻译
Overview 本文提出了一个通用的基于插件的Linux容器网络解决方案,容器网络接口,CNI.它脱胎于旨在满足大多数rtk网络设计的rtk Networking Proposal. 首先,我们对如 ...
- 中文版 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 摘要 最先进的目标检测网络依靠区域提出算法 ...
- Kubernetes(k8s)网络插件(CNI)的基准测试对比
Kubernetes是一个伟大的容器"乐队".但它不管理Pod-to-Pod通信的网络.这是容器网络接口(CNI)插件的使命,它是实现容器集群工具(Kubernetes,Mes ...
- 040.集群网络-CNI网络模型
一 CNM网络模型 1.1 网络模型 生产环境中,跨主机容器间的网络互通已经成为基本要求,更高的要求包括容器固定IP地址.一个容器多个IP地址.多个子网隔离.ACL控制策略.与SDN集成等.目前主流的 ...
- 深度学习论文翻译解析(十三):Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
论文标题:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 标题翻译:基于区域提议(Regi ...
随机推荐
- c++的set_unexpected不起作用
代码是从:http://www.cplusplus.com/referen ... /?kw=set_unexpected找的 // set_unexpected example #include & ...
- windows下安装vundle
windows下安装vundle ## 前言 windows下安装vundle和linux下稍微有些不一样,虽然官网给出了 安装说明,但是有些问题的. E117: Unknown function: ...
- CRM认识的误区
众所周知,CRM,就是平时说的“客户关系管理”,指用CRM来管理 企业与客户之间的关系.纵观整个IT圈子,做CRM的厂商比比皆是,每个厂商都有自己的产品宣言,令人眼花缭乱.但是领很多老板们不解的是,我 ...
- VMWare虚拟机 网络连接模式
这个是rocks 群里面我的一个朋友分享的,我觉很好而且描述的很清楚,这是一个做事的态度问题. 1 VMWare虚拟机bridged.host-only和NAT网络模式的区别和用法 VMWare提 ...
- Matlab之显示输出
0.recommand: fprintf fprintf('%d\n', i); 1.disp disp(['answer = ' num2str(5)]); 2.sprintf sprintf(' ...
- 03 Java图形化界面设计——布局管理器之FlowLayout(流式布局)
前文讲解了JFrame.JPanel,其中已经涉及到了空布局的使用.Java 虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供 ...
- 第二百一十五节,jQuery EasyUI,DateBox(日期输入框)组件
jQuery EasyUI,DateBox(日期输入框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 DateBox(日期输入框)组件的使 ...
- 微软公布带外安全更新MS14-068
11月19日,微软公布了带外更新MS14-068以解决Windows 系统中的一个安全漏洞,该补丁安全等级为"严重". MS14-068 | Kerberos 中的漏洞可能同 ...
- [转]NBehave行为驱动测试关于story和scenarios
原文: Behavior-Driven Development with NBehave 这里模拟了一个"银行账户"的类 一个余额属性,一个存款方法,一个撤销账户的方法,一个转账的 ...
- bash脚本IFS=',' read的意思
IFS is the Input Field Separator, which means the string read will be split based on the characters ...