当前位置:首页 > Web开发 > 正文

必须包含不同的信息

2024-03-31 Web开发

标签:

CNI - Container Network Interface(容器网络接口)

CNI(Container Network Interface)是CNCF旗下的一个项目,由一组用于配置Linux容器的网络接口的规范和库构成,同时还包罗了一些插件。CNI仅关心容器创建时的网络分配,和当容器被删除时释放网络资源。通过此链接浏览该项目:https://github.com/containernetworking/cni。

Kubernetes源码的vendor/github.com/containernetworking/cni/libcni目录中已经包罗了CNI的代码,也就是说kubernetes中已经内置了CNI。

接口界说

CNI的接口中包孕以下几个要领:

type CNI interface { AddNetworkList(net *NetworkConfigList, rt *RuntimeConf) (types.Result, error) DelNetworkList(net *NetworkConfigList, rt *RuntimeConf) error AddNetwork(net *NetworkConfig, rt *RuntimeConf) (types.Result, error) DelNetwork(net *NetworkConfig, rt *RuntimeConf) error }

该接口只有四个要领,添加网络、删除网络、添加网络列表、删除网络列表。 设计考量

CNI设计的时候考虑了以下问题:

容器运行时必需在挪用任何插件之前为容器创建一个新的网络定名空间。

然后,运行时必需确定这个容器应属于哪个网络,并为每个网络确定哪些插件必需被执行。

网络配置给与JSON格局,可以很容易地存储在文件中。网络配置包孕必填字段,如name和type以及插件(类型)。网络配置允许字段在挪用之间转变值。为此,有一个可选的字段args,必需包罗差此外信息。

容器运行时必需按挨次为每个网络执行相应的插件,将容器添加到每个网络中。

在完成容器生命周期后,运行时必需以相反的挨次执行插件(相对付执行添加容器的挨次)以将容器与网络断开连接。

容器运行时不能为同一容器挪用并行操纵,但可以为差此外容器挪用并行操纵。

容器运行时必需为容器订阅ADD和DEL操纵,这样ADD后面总是随着相应的DEL。 DEL可能随着特别的DEL,但是,插件应该允许措置惩罚惩罚多个DEL(即插件DEL应该是幂等的)。

容器必需由ContainerID独一标识。存储状态的插件应该使用(网络名称,容器ID)的主键来完成。

运行时不能挪用同一个网络名称或容器ID执行两次ADD(没有相应的DEL)。换句话说,给定的容器ID必需只能添加到特定的网络一次。

CNI插件

CNI插件必需实现一个可执行文件,这个文件可以被容器打点系统(例如rkt或Kubernetes)挪用。

CNI插件卖力将网络接口插入容器网络定名空间(例如,veth对的一端),并在主机长进行任何须要的转变(例如将veth的另一端连接到网桥)。然后将IP分配给接口,并通过挪用适当的IPAM插件来设置与“IP地点打点”部分一致的路由。

参数

CNI插件必需撑持以下操纵:

将容器添加到网络

参数:

版本。挪用者正在使用的CNI规范(容器打点系统或挪用插件)的版本。

容器ID 。由运行时分配的容器的独一明文标识符。必然不能是空的。

网络定名空间路径。要添加的网络名称空间的路径,即/proc/[pid]/ns/net或绑定挂载/链接。

网络配置。描述容器可以插手的网络的JSON文档。架构如下所述。

特别的参数。这供给了一个替代机制,允许在每个容器上简单配置CNI插件。

容器内接口的名称。这是应该分配给容器(网络定名空间)内创建的接口的名称;因此它必需切合Linux接口名称上的标准限制。

功效:

接口列表。按照插件的差别,这可以包孕沙箱(例如容器或打点措施)接口名称和/或主机接口名称,每个接口的硬件地点以及接口地址的沙箱(如果有的话)的详细信息。

分配给每个接口的IP配置。分配给沙箱和/或主机接口的IPv4和/或IPv6地点,网关和路由。

DNS信息。包罗nameserver、domain、search domain和option的DNS信息的字典。

从网络中删除容器

参数:

版本。挪用者正在使用的CNI规范(容器打点系统或挪用插件)的版本。

容器ID ,如上所述。

网络定名空间路径,如上界说。

网络配置,,如上所述。

特别的参数,如上所述。

上面界说的容器内的接口的名称。

所有参数应与通报给相应的添加操纵的参数不异。

删除操纵应释放配置的网络中供给的containerid拥有的所有资源。

呈报版本

参数:无。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31871.html