知识卡片
CNM与CNI因目标完全重叠而只能是你死我活的竞争关系
内容
容器网络标准要解决的核心问题是把网络功能从容器运行时或编排系统内部 剥离出去,做成外部可扩展的插件——网络的专业性和针对性极强,自己什么 都做既费时又讨不到好。CNM(Container Network Model,Docker 2015年 通过libnetwork项目提出)和CNI(Container Networking Interface,后来 成为容器网络事实标准)都采用插件式设计,把协议栈、网络接口、网络分别 抽象成一组资源(CNM叫Sandbox/Endpoint/Network;CNI也有Sandbox/Network 但依托Kubernetes资源模型,结构更轻便),插件能力都分为”网络的创建删除 管理”和”IP地址分配回收”两类(CNM定义了十个编程接口,CNI只需实现网络 增删两个操作即可,接口设计明显更精简)。这两套规范的关系和同期出现的 CRI(容器运行时接口)与OCI(开放容器交互标准)不同——CRI和OCI目标不 一样,有足够空间和平共处;但CNM和CNI在目标上几乎完全重叠,都想成为 “容器网络的统一标准”,这就注定了两者只能是竞争关系而非互补关系,最终 必有一个被淘汰。理解”两个规范的关系是竞争还是互补”取决于它们解决问题 的目标是否重叠,这是判断技术标准之间能否共存的一个简单但有效的判断 标准。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第12章"容器间网络"12.2.1节
"CNM与CNI"(源文件:_epub-src对应OEBPS/Text/chapter150.xhtml)
- 结论依据:原文说明CNM和CNI在目标上几乎完全重叠,因此只能是"你死我活"
的竞争关系,与CRI和OCI"目标不一样、有空间和平共处"形成对比,并详述
两者插件抽象方式和接口复杂度的差异,直接支撑本卡片结论。
- 原始内容:如今CNM与容器网络的事实标准CNI在目标上几乎是完全重叠的,
由此决定了CNM与CNI之间只能是"你死我活"的竞争关系,这与容器运行时中
提及的CRI和OCI的关系明显不同。