containernetworking / cni

Container Network Interface - networking for Linux containers
https://cni.dev
Apache License 2.0
5.56k stars 1.08k forks source link

How does CNI compare to multus ? #834

Open g-rabah opened 3 years ago

g-rabah commented 3 years ago

Hi everyone,

Can someone please help me understand the diff between Multus and CNI ?

Bests

bboreham commented 3 years ago

CNI is an interface: it allows any kind of network to have a “plugin” to connect things up for a “runtime”.

Suggest viewing one of the “intro to CNI” videos, eg https://m.youtube.com/watch?v=YjjrQiJOyME

Multus is a meta-plugin: it acts as a plugin, and reacts to calls by calling other plugins. It exists primarily to get round limitations in one runtime, Kubernetes.

s1061123 commented 3 years ago

As Bryan mentioned above, CNI is the specification that defines how to create network interface in container, using 'CNI plugin'. Multus is the one of CNI plugin, which implements CNI specification.

One big feature of the multus cni is 'delegate many CNI plugin', by invoking other CNI plugin from multus. Currently most container runtimes, such as podman/kubernetes, support only one CNI plugin. So user cannot create the container which has multiple interfaces. Multus CNI makes it by delegating CNI plugin.

It is similar to the home power outlet. Let's imagine one outlet at home. We can plug-in only one device to the socket (because one outlet support one device), not more than two. If you have a power tap, you can connect two or more devices through power tap. Multus can be 'power tap' of CNI plugin.

mars1024 commented 3 years ago

I think multus is more like a cascading CNI plugin for building multi container interfaces, and it is implemented on a generic interface (or spec) which is CNI.

MikeZappa87 commented 3 years ago

CNI is an interface that defines responsibly for setting up the network between the host and a pod. Multus is a CNI multiplexor that allows the use of multiple cni plugins. This is most used in Kubernetes and is supported by multiple other schedulers (Mesos, Nomad) and multiple container runtimes (not Docker). Speaking which of Nomad, they have a nice way of defining the CNI in jobs