|
CNI 的规范比较小巧, 规定了一个容器runtgime 和网络插件之间简单的契约. 这个契约通过 JSON 的语法定义了CNI插件所需要提供的输入和输出. 一个容器可以被加入到不同插件锁駆动的多个网络之中. 一个网络有自己对应的插件和唯一的名称. CNI 插件需要提供两个指令: 一个用来将网络接口加入到指定网络, 一个用来将其移除. 这两个接口分别在容器被创建和销毁的时候调用.
在使用CNI 接口是容器runtime 首先需要分配一个网络命名空间以及一个容器ID, 然后联通一些CNI配置参数传给网络驱动. 接着网络驱动会将该容器链接到网络并将分配IP地址以及JSON的格式的返回给容器runtime.
目前 CNI 的功能涵盖了IPAM,L2和L3 , 端口映射(L4) 则用容器runtime 自己负责. CNI 也没有规定端口映射的实现. 这样比较简单的设计对于 Mesos 来讲有些问题. 端口映射是其中之一. 另外一个问题是: 当CNI的配置被改变时, 容器的行为在规范中没有定义. 为此 Mesos 在CNI agent 重启的时候, 会使用该容器与CNI关联的配置. |
|
|