众所周知,Kubernetes 支持单一网络接口!Kubernetes网络模型的实现,需要借助一些具有独特的多网络特性的网络方法来实现多个网络接口。
您可以将 Multus CNI 视为在 Kubernetes 中实现多网络接口的方法。基本上,Multus CNI 是一个 Kubernetes CNI 插件,可以在 Kubernetes 中创建额外的 pod 网络接口,并借助 Kubernetes 中的 CRD 对象支持多网络功能。Multus 容器网络接口管理 Kubernetes 中的多个容器网络接口。
Multus CNI 的作用:
Multus CNI 是一个开源插件,它通过充当容器网络中的补充层来帮助实现多接口支持。它将多个网络接口附加到 Kubernetes 中的 pod。你可能知道 Kubernetes 默认只有一个网络接口!通过 Multus,可以轻松创建具有多个网络接口的多宿主 Pod。
Multus CNI 的操作和工作:
Multus 充当其他 CNI 插件的仲裁者。它调用 Flannel、Calico、vHost CNI 或 SR-IOV 来创建网络接口。但是,在配置 Multus 时,应将一个插件标识为主插件来配置和管理 eth0(主网络接口)。
要了解 Multus 的工作原理,深入了解 Kubernetes 网络功能的运作方式至关重要。有两个可用的网络插件,例如 CNI 插件(实现 CNI 规范以提供互操作性)和 Kubelet(使用主机-本地 CNI 插件实现基本桥 cbr0 的主要代理)。
Kubelet 在 Kubernetes 集群中的每个节点上运行。Kubelet 允许将节点注册到 Kubernetes 的控制面板,并为计划在该节点上一个接一个地运行的 Pod 提供有效的生命周期管理。它还为每个 pod 建立网络接口。
Kubelet 使用 Multus CNI 配置文件来设置每个 pod 的网络。在这里,Kubelet 被配置为使用容器网络接口作为其网络插件。Kubelet 在调用它来设置 Pod 时会调用其容器运行时。对于网络配置,Kubelet 为容器运行时提供了一个网络插件包装器(Multus CNI 插件)。
Multus CNI 可以与网络对象、配置文件或文件和对象的组合一起使用。它读取配置并将网络设置任务卸载到其他 CNI 插件,即委托。
关于Multus CNI的安装和使用,可以参考:multus-cni/quickstart.md at master · k8snetworkplumbingwg/multus-cni · GitHub