原文连接: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. C# 版 防止 DNS 污染,获取域名真实 IP 地址

    using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Net. ...

  2. php中Http请求方法和响应状态码整理教程

    HTTP请求报文由请求行(request line).请求头部(header).空行和请求数据4个部分组成,格式如下 可见请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格 ...

  3. Python 中 global、nonlocal的使用

    1.在学习python过程中很重要的一点需要记住:如果在函数内部定义了跟全局变量同名的变量,那么该变量将是局部变量,而全局变量的引用在该函数范围内将失效. x = 9 def a(): x = 10 ...

  4. Make Docker Image On Ubuntu17.10

    1.拉取基础镜像 docker pull ubuntu 2.查看镜像 docker images 3.启动一个容器 docker run -it ubuntu 4.查找运行的容器ID docker p ...

  5. MongoDB 连接数高产生原因及解决

    MongoDB Sharding架构下连接数很容易达到很高,这里连接数分为几个概念:tcp 连接数 netstat可以统计的,一般这个是最高.如果mongod/mongos在同一台服务器,更明显.参考 ...

  6. python eval() hasattr() getattr() setattr() 函数使用方法详解

    eval() 函数 --- 将字符串str当成有效的表达式来求值并返回计算结果. 语法:eval(source[, globals[, locals]]) ---> value 参数: sour ...

  7. poj 3680(最小费用最大流)

    题目链接:http://poj.org/problem?id=3680 思路:因为N<=200,而区间范围为[1,100000],因此需要离散化,去重,然后就是建图了相连两点连边,容量为k,费用 ...

  8. WPF DataGrid 获取选中的当前行某列值

    方法一: DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; ]ToString(); 方法二: var a = ...

  9. [Junit] 测试方法执行顺序

    Junit 4.11里增加了指定测试方法执行顺序的特性测试类的执行顺序可通过对测试类添加注解 “@FixMethodOrder(value)” 来指定,其中value 为执行顺序三种执行顺序可供选择: ...

  10. Domino Web中隐藏附件选择框

    只要在Web Form的最后加入以下代码,并选择Pass-Tru HTML,即可隐藏默认的附件选择框. <div id=attach Style="display:none" ...