Flannel 是一种简单易用的方法来配置专为 Kubernetes 设计的第 3 层网络结构。
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 使用开源 K3s 安装程序在其创建的 Kubernetes 集群中设置 flannel 来驱动设置过程。
尽管不是必需的,但建议 flannel 使用 Kubernetes API 作为其后备存储,这样就无需为flannel
部署离散的etcd
集群。这种flannel
模式称为kube 子网管理器。
Flannel 可以添加到任何现有的 Kubernetes 集群中,尽管最简单的方法是在使用 Pod 网络的任何 Pod 启动之前添加flannel
。
对于 Kubernetes v1.17+
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
如果您使用自定义podCIDR
(不是10.244.0.0/16
),您首先需要下载上述清单并修改网络以匹配您的网络。
# Needs manual creation of namespace to avoid helm error
kubectl create ns kube-flannel
kubectl label --overwrite ns kube-flannel pod-security.kubernetes.io/enforce=privileged
helm repo add flannel https://flannel-io.github.io/flannel/
helm install flannel --set podCidr= " 10.244.0.0/16 " --namespace kube-flannel flannel/flannel
有关更多详细信息,请参阅 Kubernetes。
如果配置了防火墙,请确保启用已配置后端使用的正确端口。
Flannel默认使用portmap
作为CNI网络插件;部署 Flannel 时,请确保 CNI 网络插件安装在/opt/cni/bin
中,可以使用以下命令下载最新的二进制文件:
ARCH= $( uname -m )
case $ARCH in
armv7 * ) ARCH= " arm " ;;
aarch64) ARCH= " arm64 " ;;
x86_64) ARCH= " amd64 " ;;
esac
mkdir -p /opt/cni/bin
curl -O -L https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux- $ARCH -v1.6.0.tgz
tar -C /opt/cni/bin -xzf cni-plugins-linux- $ARCH -v1.6.0.tgz
Flannel 需要 br_netfilter 模块才能启动,从版本 1.30 开始,kubeadm 不会检查该模块是否已安装,如果模块丢失,Flannel 将无法正确启动。
flannel 在 kubernetes 之外也被广泛使用。当部署在 kubernetes 外部时,etcd 始终用作数据存储。有关将 flannel 与 Docker 集成的更多详细信息,请参阅运行
Flannel 维护者社区每隔周四上午 8:30(太平洋标准时间)召开一次会议。该会议用于在需要时讨论问题、开放拉取请求以及与 Flannel 相关的其他主题。
会议议程和 Teams 链接可在此处找到:Flannel 社区会议议程
有关提交补丁和贡献工作流程的详细信息,请参阅贡献。
有关报告任何问题的详细信息,请参阅报告错误。
Flannel 遵循 Apache 2.0 许可证。有关详细信息,请参阅许可证文件。