1、介绍
Flannel 是一个轻量级、易于配置的网络插件,旨在简化 Kubernetes 集群中 Pod 网络的管理。Flannel 的核心功能是提供一个虚拟的网络,允许每个 Pod 获取一个独立的 IP 地址,并实现不同节点间的 Pod 之间的通信
2、原理
2.1 基本概念
CNI (Container Network Interface): CNI 是一种标准接口,允许不同的网络插件与容器运行时进行交互。Flannel 就是一个实现了 CNI 规范的网络插件。
Backend: Flannel 支持多种后端实现方式,包括 VXLAN、host-gw(直接路由)、UDP 等等
2.2 原理
Flannel 首先从给定的更大地址池中为集群中的每个节点分配一个小的子网。然后,它会负责维护这些子网和对应节点之间的映射关系。当数据包需要从一个节点传输到另一个节点时,Flannel 根据其配置的 backend 来决定如何转发这些数据包。
2.3 flannel CNI工作流程
总结flannel-cni的工作流程如下:
-
Pod创建与网络命名空间准备:当Kubernetes的kubelet创建一个Pod时,首先会创建一个pause容器,并使用该容器的网络命名空间作为参数(例如通过
/var/run/docker/netns/xxxx
获取)。这个命名空间将被用于后续CNI插件的调用。 -
CNI配置文件:在
/etc/cni/net.d/
目录下存在名为10-flannel.conflist
的配置文件,该文件由kube-flannel组