计算机系统应用教程网站

网站首页 > 技术文章 正文

K8S网络系列(2)-CNI插件Calico和Flannel该怎么选

btikc 2024-10-23 09:12:15 技术文章 6 ℃ 0 评论

Calico和Flannel作为比较常用的两种CNI插件,在互联网上可谓大名鼎鼎,但是初学者往往困惑于如何选择。很多资料介绍了它们各自的特点,但对具体的差别和适用场景并没有说清楚。今天就来探讨一下这个问题。

下表简要的列出了两种插件的关键特性的差别:

CNI插件

Calico

Flannel

网络

网络策略

×

IPAM

×

网络类型

BGP、VXlan、IPIP

VXLAN、host-gw、wireguard

1、网络

网络功能就是为pod提供网络支撑的,包括pod子网的创建/删除、pod网络接口的创建/删除、pod联网等。

pod所属的网段通常与宿主机网段是分开的,它有几个主要特点:

  • pod网段(例如10.64.0.0/16)不占用宿主机网段(例如192.168.0.0/24)资源,但pod网段可以直接访问宿主机网段。
  • 仅加入k8s集群的节点可以直接访问呢pod网段,非k8s节点不能访问pod。
  • pod之间是二层互通的,哪怕pod位于不同的节点上,所以pod网段其实是一个虚拟网络。

所以CNI的网络功能,要做的事情就是,负责维护上述pod网段的虚拟网络,以及负责pod的入网/脱网。没有网络功能的CNI是不能够独立为K8S提供网络支撑的,必须联合其它CNI组队才行。Calico和Flannel都提供了网络功能,主要差别在于支持的网络类型。

  • overlay网络

Calico的BGP和Flannel都支持overlay网络,VXLAN、IPIP、Wireguard都属于overlay网络。

Calico和Flannel都支持VXLAN,也是它们的默认配置。

不同点是Calico还支持IPIP,是一种跟VXLAN比较类似的封装格式;而Flannel则支持wireguard,这是一种轻量级的VPN协议,理论上可以支持局域网的NAT穿透,所以如有这方面的需求可以考虑。

  • underlay网络

underlay网络是相对于overlay的,指的是不需要创建虚拟网络,无需建立隧道和对数据包进行封装,以利用现有的宿主机网络为主。Calico的BGP和Flannel的host-gw从用户视角看,是比较类似的,都要求节点之间二层互通,都具有效率高但不能跨网段的特点。


2、网络策略

k8s默认情况下,pod之间是可以直接互通的,没有任何限制。网络策略允许管理员设置如何允许 Pod 与网络上的各类网络“实体”(entity,包括endpoint和service等)通信,包括:

1) 其他被允许的 Pods(例外:Pod 无法阻塞对自身的访问)

2) 被允许的namespace。

3) IP 或IP段(例外:与Pod所在节点的通信总是允许的,无论 Pod 或Node的 IP)。

一句话:默认情况下pod是完全开放访问的;但如果应用了网络策略,那就是白名单模式,仅满足白名单规则才能够访问pod(入)或访问呢其它实体(出)。

k8s设计了上述规则,但规则的具体实现则是CNI来完成的,这就是CNI的网络策略功能。

通过上表可以看出,Calico支持网络策略,而Flannel专注于网络,不支持网络策略。所以,如果有网络策略方面的需求,那就选择Calico,也可以Flannel+Calico组合的方式。如果没有这方面的需求,仅仅是希望K8S愉快的运行起来,那就可以考虑Flannel。

3、IPAM - IP Address Management

网络地址管理,负责在创建或删除pod时为其分配和发布IP地址。根据插件的不同,这可能包括为每个节点分配一个或多个IP地址范围(CIDR),或者从底层公共云的网络中获得IP地址以分配给pod。

K8s内置了IPAM功能,可以给节点分配pod地址范围,所以,这个功能对CNI来说不是必须的。

Calico提供了IPAM功能,而Flannel没有,所以Flannel要求K8s在部署时必须配置pod网段(提供--pod-network-cidr命令行参数,或者在配置文件中配置podSubnet配置项)。


综上,两者的主要差别就在于是否支持网络策略,以及网络类型有所区别,可以按需选择。如果仍然搞不清楚自己需要什么,那就别纠结了,小而美的flannel会是你的最佳选择。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表