作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们在前面的讲Docker的相关章节的时候,讲过Docker默认创建的的容器都是接入在docker0的网桥上面,而且我们前面Kebernetes安装的时候,无论是Docker版还是Containerd版都并没有单独配置过网桥(甚至Containerd连默认的网桥都没有),只是在安装集群的时候定义容器网路CIDR,那这个容器的的IP地址是从哪里来的呢?
CNI(Container Network Interface)是一个容器网络接口标准,由CoreOS提出,旨在为容器平台提供一种标准的网络配置解决方案。CNI的主要目标是简化容器的网络连接,并使其可插拔,允许容器运行时(如Kubernetes、Docker等)通过插件与各种网络方案集成。
下面是CNI插件的一些基本介绍:
CNI插件的工作原理:
-
配置传递:容器运行时在创建容器时,会将容器的网络配置信息传递给CNI插件。
-
网络设置:CNI插件根据配置信息为容器设置网络,这通常包括为容器创建网络接口、分配IP地址、设置路由规则等。
-
结果回传:CNI插件将网络设置的结果返回给容器运行时,容器运行时再将这些信息保存下来。
常见的CNI插件:
-
Bridge:这是最基础的CNI插件,用于创建一个Linux网桥,并将容器连接到这个网桥上。
-
Host-local:用于为容器分配IP地址,通常与Bridge插件配合使用。
-
Flannel:Flannel是一个用于Kubernetes的网络方案,它可以在集群中的所有节点间建立一个覆盖网络(overlay network)。
-
Calico:Calico提供了一种基于BGP的网络解决方案,支持多种网络模式,包括非覆盖网络和覆盖网络。
-
Weave:Weave同样为Kubernetes提供覆盖网络功能,并且支持加密通信。
-
IPvlan:用于为容器提供IPvlan网络接口。
-
Macvlan:允许容器拥有独立的MAC地址,可以在物理网络上像物理设备一样工作。
CNI插件的优势:
-
可插拔性:可以根据需要更换或增加网络插件。
-
灵活性:支持多种网络模型,可以满足不同的网络需求。
-
简易性:CNI的设计简单,易于实现和维护。
-
标准化:遵循CNI标准,可以无缝集成到支持CNI的容器管理平台。
使用CNI插件的步骤:
-
安装CNI插件:根据需要选择并安装相应的CNI插件。
-
配置CNI:编写CNI配置文件,通常是一个JSON文件,描述如何设置网络。
-
集成到容器平台:确保容器平台(如Kubernetes)知道如何调用CNI插件。
CNI插件是容器网络管理的重要组成部分,它们使得容器化应用的网络管理变得更加灵活和强大。随着容器技术的普及,CNI插件将继续发展,支持更多样化的网络需求。
简单点来就是ip创建由CNI插件来负责,至于这个插件是什么Kubernetes其实不关心。Kubernet根据自己的网络插件配置,去读取对应应该配置,然后使用读取到的配置去获取ip接口。至于这个插件是flanneld 还是Calico,其实kubernetes并不关心,也就相当于变相的对网络进行了解耦。在我刚接触kubernetes的时候,曾经手搓过多台Docker主机实现跨主机通信,然后基于此来部署k8s,当然当时CNI还还未普及。下面两个小节我们将介绍我们常用的2个网络插件。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。