04 - 理解 CNI 和 CNI 插件

点击这里,参考文章原文。

1 CNI 是什么

首先,我们介绍一下什么是 CNI?
它的英文全称是 Container Network Interface,即容器网络的 API 接口。由 Google 和 Core OS 主导制定的容器网络接口标准。(它仅仅是一个接口,具体的网络功能由各个网络插件自己去实现)


它是 K8s 中标准的一个调用网络实现的接口。Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式。常见的 CNI 网络插件包括 Calico、flannel、kube-ovn、Weave Net 等。


2 Kubernetes 中如何使用 CNI

K8s 通过 CNI 配置文件来决定使用哪一个 CNI网络插件。


基本的使用方法为:
1)首先,在每个节点上配置 CNI 配置文件(/etc/cni/net.d/xxnet.conf),其中 xxnet.conf 是某一个网络配置文件的名称;
2)安装 CNI 配置文件中所对应的二进制插件;
3)在这个节点上创建 Pod 之后,Kubelet 就会根据 CNI 配置文件执行前两步所安装的 CNI 二进制插件,以此来配置pod的网络;
4)上步执行完之后,Pod 的网络就配置完成了。


具体的流程如下图所示:
04 - 理解 CNI 和 CNI 插件_第1张图片
在集群里面创建一个 Pod 的时候:
1)首先,会通过 apiserver 将 Pod 的配置写入;然后,apiserver 的一些管控组件(比如 Scheduler)会调度到某个具体的节点上去。
2)Kubelet 监听到这个 Pod 的创建之后,会在本地进行一些创建的操作;当执行到创建网络这一步骤时,它首先会读取刚才我们所说的配置目录中的配置文件,配置文件里面会声明所使用的是哪一个插件,然后去执行具体的 CNI 插件的二进制文件,再由 CNI 插件进入 Pod 的网络空间去配置 Pod 的网络。配置完成之后,Kubelet 也就完成了整个 Pod 的创建过程,这个 Pod 就在线了。

大家可能会觉得上述,创建、配置网络的流程有很多步(比如要对 CNI 配置文件进行配置、安装二进制插件等等),看起来比较复杂。但如果我们只是作为一个用户去使用 CNI 插件的话就比较简单,因为很多 CNI 插件都已提供了一键安装的能力。以我们常用的 Flannel 为例,如下图所示:只需要我们使用 kubectl apply Flannel 的一个 Deploying 模板,它就能自动地将配置、二进制文件安装到每一个节点上去。
04 - 理解 CNI 和 CNI 插件_第2张图片
安装完之后,整个集群的 CNI 插件就安装完成了,之后,你再创建pod,kubelet 就会自动调用 CNI 插件(比如flannel)来完成pod网络的配置,如创建网络命名空间、配置网络接口、分配 IP 地址等。



kubelet 在容器网络接口(CNI)的集成中发挥着重要的作用,它通过以下步骤来调用 CNI 插件:

  • 1)Pod 创建:当 Kubernetes 接收到一个新的 Pod 创建请求时,kubelet 负责创建和管理该 Pod。
  • 2)网络配置:在 Pod 创建过程中,kubelet 会从 Kubernetes API Server 获取 Pod 的网络配置信息,包括网络插件的名称和相关参数。
  • 3)CNI 插件调用:一旦 kubelet 获取到 Pod 的网络配置信息,它会调用 CNI 插件来配置 Pod 的网络。kubelet 通过执行 CNI 插件的二进制文件,并将 Pod 的网络配置信息作为输入传递给插件。
  • 4)网络插件处理:CNI 插件收到网络配置信息后,会根据配置信息来进行相应的操作,如创建网络命名空间、配置网络接口、分配 IP 地址等。CNI 插件可以通过调用操作系统提供的网络管理工具(如iptables、iproute2)来完成网络配置任务。
  • 5)网络接口注入:CNI 插件完成网络配置后,会返回一个包含网络接口信息的 JSON 格式的配置结果。
  • 6)kubelet 更新网络状态:kubelet 收到 CNI 插件的配置结果后,会将网络接口的状态更新到 Kubernetes API Server 中,以便其他组件(如 kube-proxy)能够使用正确的网络配置。


    总结起来,kubelet 在 Pod 创建过程中负责调用 CNI 插件来配置 Pod 的网络。它通过传递 Pod 的网络配置信息给 CNI 插件,并处理返回的网络接口配置结果,将网络状态更新到 Kubernetes API Server 中。这样,Pod 就能够正确地获得网络配置,并与其他 Pod 和服务进行通信。

3 哪个 CNI 插件适合我?— 待整理

参考:https://www.sohu.com/a/380806967_612370

你可能感兴趣的:(k8s小知识,kubernetes,容器,云原生,docker,运维,网络)