原文连接: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 摘要的更多相关文章

  1. docker的网络-Container network interface(CNI)与Container network model(CNM)

    Overview 目前围绕着docker的网络,目前有两种比较主流的声音,docker主导的Container network model(CNM)和社区主导的Container network in ...

  2. 论文阅读笔记四十五:Region Proposal by Guided Anchoring(CVPR2019)

    论文原址:https://arxiv.org/abs/1901.03278 github:code will be available 摘要 区域anchor是现阶段目标检测方法的重要基石.大多数好的 ...

  3. 论文阅读笔记二十七: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 室友对 ...

  4. 深度学习论文翻译解析(三):Detecting Text in Natural Image with Connectionist Text Proposal Network

    论文标题:Detecting Text in Natural Image with Connectionist Text Proposal Network 论文作者:Zhi Tian , Weilin ...

  5. 《CNI specification》翻译

    Overview 本文提出了一个通用的基于插件的Linux容器网络解决方案,容器网络接口,CNI.它脱胎于旨在满足大多数rtk网络设计的rtk Networking Proposal. 首先,我们对如 ...

  6. 中文版 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 摘要 最先进的目标检测网络依靠区域提出算法 ...

  7. Kubernetes(k8s)网络插件(CNI)的基准测试对比

      Kubernetes是一个伟大的容器"乐队".但它不管理Pod-to-Pod通信的网络.这是容器网络接口(CNI)插件的使命,它是实现容器集群工具(Kubernetes,Mes ...

  8. 040.集群网络-CNI网络模型

    一 CNM网络模型 1.1 网络模型 生产环境中,跨主机容器间的网络互通已经成为基本要求,更高的要求包括容器固定IP地址.一个容器多个IP地址.多个子网隔离.ACL控制策略.与SDN集成等.目前主流的 ...

  9. 深度学习论文翻译解析(十三):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 ...

随机推荐

  1. 安装yii2高级应用模板

    composer global require "fxp/composer-asset-plugin:1.0.0" composer create-project --prefer ...

  2. qt中执行 sql文件的方法

    由于qt中没有原生的执行sql文件的方法.因此我们需要根据sql文件中的流的特点,将其分解成一个个语句单独执行. 1.首先通过Qfile读取sql文件 2.将sql文件中的内容通过“:”进行拆解 3. ...

  3. HTML5自定义属性之data-index

    #使用jquery获取data-index的值 jquery 的版本最好高一些 #html <div id = 'div'><span data-field='demo'>&l ...

  4. lseek,fcntl,ioctl函数

    函数说明:每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾. 当read()或write()时 ...

  5. 最大子矩阵 hdu1081

    To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. Effective Java学习笔记--创建和销毁对象

    创建和销毁对象 一.静态工厂方法代替构造器 静态工厂方法的优缺点 优点: 1.可以自定义名称(可以将功能表述的更加清晰) 2.不必每次调用都创建新的对象(同一对象重复使用) 3.返回的类型可以是原返回 ...

  7. Unix系统编程()main函数的命令行参数

    命令行参数输入双引号是什么效果? 好像可以去空格化.

  8. 打包iOS应用程序

    如果想要将做的iOS应用程序装到自己的iOS设备上测试.或者装在别人的iOS设备上,或者想发布到App Store里,先要给应用签名.签名就要有证书,这就需要申请证书的过程了. 把自己的应用程序装到设 ...

  9. hdu6073 Matching In Multiplication 分析+拓扑序

    Matching In Multiplication Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K ( ...

  10. C++ Scoket的升级版(多态的运用)

    //Socket报文发送c++升级版 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #in ...