k8s使用flannel作为CNI网络插件

Flannel在每台主机上运行一个名为flanneld的小型二进制代理,负责从一个更大的、预先配置的地址空间中为每台主机分配子网租赁。Flannel使用Kubernetes API或etcd直接存储网络配置、分配的子网和任何辅助数据(例如主机的公共IP)。数据包使用多种后端机制中的一种转发,包括VXLAN和各种云集成。

flannel包含两个关键的组件

1.flanneld

在每个节点上运行的代理程序,负责与etcd交互、获取子网信息、维护路由规则,并通过底层网络设备实现Overlay网络。

2.etcd

作为Flannel的后端存储,存储着整个集群的网络配置信息,包括每个节点的子网分配情况等。

像Kubernetes这样的平台假设每个容器(pod)在集群中都有一个唯一的、可路由的IP。该模型的优点是它消除了由于共享单个主机IP而带来的端口映射复杂性。
Flannel负责在集群中的多个节点之间提供第3层IPv4网络。Flannel不控制容器如何联网到主机,只控制主机之间的流量传输方式。然而,flannel确实为Kubernetes提供了一个CNI插件以及与Docker集成的指导。
Flannel专注于社交。对于网络策略,可以使用其他项目,如Calico。

我目前环境k8s版本是1.28.x,flannel可以使用目前最新的版本v0.27.2,下面我们来看下安装过程。

首先下载flannel部署的yaml文件

wget https://github.com/flannel-io/flannel/releases/download/v0.27.2/kube-flannel.yml

这个文件主要修改以下Network部分,将此地址修改为k8s初始化时podSubnet设置的地址范围一致即可。

  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "EnableNFTables": false,
      "Backend": {
        "Type": "vxlan"
      }
    }

然后就可以直接进行安装

kubectl apply -f kube-flannel.yml

安装完成以后它会拉取两个镜像,由于现在网络限制,所以我们需要自行准备这两个镜像

ghcr.io/flannel-io/flannel:v0.27.2
ghcr.io/flannel-io/flannel-cni-plugin:v1.7.1-flannel1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/1118

评论列表

0%