Flannel 是配置专为 Kubernetes 设计的第 3 层网络结构的简单方法。
[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
Flannel 在每个主机上运行一个小型的、单一的二进制代理flanneld
,并负责从一个更大的、预配置的地址空间中为每个主机分配一个子网租约。Flannel 使用 Kubernetes API 或etcd直接存储网络配置、分配的子网和任何辅助数据(例如主机的公共 IP)。使用多种后端机制之一转发数据包,包括 VXLAN 和各种云集成。
像 Kubernetes 这样的平台假设每个容器 (pod) 在集群内都有一个唯一的、可路由的 IP。此模型的优点是它消除了共享单个主机 IP 带来的端口映射复杂性。
Flannel 负责在集群中的多个节点之间提供第 3 层 IPv4 网络。Flannel 不控制容器如何与主机联网,只控制流量如何在主机之间传输。然而,flannel 确实为 Kubernetes 提供了一个 CNI 插件和一个与 Docker 集成的指南。
Flannel 专注于网络。对于网络策略,可以使用其他项目,例如Calico 。
使用 Kubernetes 部署 flannel 的最简单方法是使用默认情况下使用 flannel 网络集群的几种部署工具和发行版之一。例如,K3s在其创建的 Kubernetes 集群中设置 flannel,使用开源K3s Installer来驱动设置过程。
虽然不是必需的,但建议 flannel 使用 Kubernetes API 作为其后备存储,这避免了etcd
为flannel
. 这种flannel
模式被称为kube subnet manager。
Flannel 可以添加到任何现有的 Kubernetes 集群中,尽管flannel
在使用 pod 网络的任何 pod 启动之前添加是最简单的。
对于 Kubernetes v1.17+
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
如果您使用自定义podCIDR
(不是10.244.0.0/16
),您首先需要下载上面的清单并修改网络以匹配您的网络。
有关详细信息,请参阅Kubernetes。
如果配置了防火墙,请确保启用配置后端使用的正确端口。
flannel 在 kubernetes 之外也被广泛使用。当部署在 kubernetes 之外时,etcd 始终用作数据存储。有关将 flannel 与 Docker 集成的更多详细信息,请参阅运行
[/hidecontent]