CNM

  1. 由Docker公司提出,在docker项目下的libnetwork项目中被采用。

CNM-1
CNM-2

  1. 工作流程

CNM-workflow

CNI

  1. CNI是由CoreOS提出的容器组网规范,被K8s、Mesos、Cloud Foudry、rkt等项目采用,目前也是CNCF的一个重要项目。

CNI-1

  1. 工作流程

CNI-workflow

CNM vs. CNI

  1. 相同点
    1. 都支持插件化的组网功能。
    2. 二者中的许多概念是相似的。比如CNM的sandbox和CNI的container、CNM的network和CNI的network。
    3. 类似CNM中的endpoint概念,CNI中将其隐含在Add和Delete动作中。
    4. K8s项目下的to_docker工具提供了将CNI调用转换为CNM的方案。
  2. 不同点
    1. CNM的优点
      1. 模式实现更加完善,比较贴近传统的容器网络。
      2. 在Docker/libnetwork中内置了常见的CNM drivers。
      3. 相比CNI plugin的命令行规范,CNM plugin/drivers更友好些,remote plugin通过HTTP请求进行,docker daemon可以通过指定端口与plugin通信。
    2. CNI的优点
      1. 接口规范更简洁,也因此更易扩展。
      2. CNM/libnetwork中隐含了Docker自己的service机制、dns机制等约束,对别的runtime不友好。
      3. 更多的工作在container runtime以及网络的管理者上。

Reference

  1. Design of libnetwork and CNM: https://github.com/docker/libnetwork/blob/master/docs/design.md#the-container-network-model
  2. CNI Specification:https://github.com/containernetworking/cni/blob/master/SPEC.md
  3. Why Kubernetes doesn't use libnetwork:https://kubernetes.io/blog/2016/01/why-kubernetes-doesnt-use-libnetwork/
  4. Container networking landscape:https://thenewstack.io/container-networking-landscape-cni-coreos-cnm-docker/