CNI设计的时候考虑了以下问题
容器运行时必须在调用任何插件之前为容器创建一个新的网络命名空间。
然后,运行时必须确定这个容器应属于哪个网络,并为每个网络确定哪些插件必须被执行。
网络配置采用JSON格式,可以很容易地存储在文件中。网络配置包括必填字段,如name和type以及插件(类型)。网络配置允许字段在调用之间改变值。为此,有一个可选的字段args,必须包含不同的信息。
容器运行时必须按顺序为每个网络执行相应的插件,将容器添加到每个网络中。
在完成容器生命周期后,运行时必须以相反的顺序执行插件(相对于执行添加容器的顺序)以将容器与网络断开连接。
容器运行时不能为同一容器调用并行操作,但可以为不同的容器调用并行操作。
容器运行时必须为容器订阅ADD和DEL操作,这样ADD后面总是跟着相应的DEL。 DEL可能跟着额外的DEL,但是,插件应该允许处理多个DEL(即插件DEL应该是幂等的)。
容器必须由ContainerID唯一标识。存储状态的插件应该使用(网络名称,容器ID)的主键来完成。
运行时不能调用同一个网络名称或容器ID执行两次ADD(没有相应的DEL)。换句话说,给定的容器ID必须只能添加到特定的网络一次。