浅谈Multus CNI

        众所周知,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。  
  • 它还支持第三方插件,包括 Weave、Calico、Contiv 和 Cilium。 
  • 此外,它允许将 DPDK/SRIOV 接口附加到 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

multus-cni 是一个 Kubernetes 的多网络 CNI 插件,它是 Kubernetes 上负责多网络管理的代表性插件之一。它允许 Kubernetes 集群中的每个 Pod 拥有多个网络接口,并能针对每个网络接口对应的网络策略和路由进行不同的配置。 multus-cni 的源码主要分为三部分:CNI 插件相关代码、配置文件相关代码和网络资源相关代码。CNI 插件相关代码包括主程序 main.go、CNI 配置解析器 conf.go、IPAM 相关代码和网络审计相关代码。配置文件相关代码包括 multus.conf 和各种 JSON/YAML 配置文件的解析器。网络资源相关代码主要负责通过 Kubernetes API 获取和管理 Pod、NetworkAttachmentDefinition 和 Service 等网络资源信息。 multus-cni 的核心是 CNI 插件相关代码中的 main.go,它主要负责 CNI 插件的初始化和执行。CNI 插件的执行流程大概可以总结为如下三步:首先,multus-cni 解析 CNI 配置文件并获取 Pod 相关的网络资源信息;接着,multus-cni 调用下层 CNI 插件(比如 flannel、calico、ovs 等)完成网络接口的创建和配置;最后,multus-cni 继续执行其他 CNI 插件(比如 ipvlan、macvlan、bridge 等)完成其他网络接口的创建和配置。 此外,multus-cni 通过 Kubernetes API 获取和管理 NetworkAttachmentDefinition 和 Service 等网络资源信息。在 Kubernetes 中,NetworkAttachmentDefinition 用于定义和配置网络接口,而 Service 用于定义和管理 Kubernetes 集群中的服务。multus-cni 通过获取、解析和应用这些网络资源信息,实现了多网络的管理和配置。 总的来说,multus-cni 是一个非常优秀的多网络 CNI 插件,它利用 Kubernetes API 实现了多网络的管理和配置,并同时支持插件化扩展。它的源码比较清晰,适合对 Kubernetes 网络原理比较熟悉的开发者学习和探究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值