网站首页 > 技术文章 正文
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会是你的最佳选择。
猜你喜欢
- 2024-10-23 容器工程师:引领容器技术潮流,塑造行业未来!
- 2024-10-23 11张图带你彻底了解Kubernetes架构,绝对要收藏的!
- 2024-10-23 深入理解Kubernetes网络策略 kubernetes的网络方案
- 2024-10-23 Kubernetes 网络、监控技术全面解读
- 2024-10-23 Docker术语大全,建议收藏! docker简单介绍
- 2024-10-23 Cilium eBPF 网络解析 bt文件解析
- 2024-10-23 在生产环境中,阿里云如何构建高性能云原生容器网络?
- 2024-10-23 kubernetes系列教程(十二)详解DaemonSet控制器
- 2024-10-23 kubernetes 集群组件介绍 kubernetes集群搭建
- 2024-10-23 如何做容器化集群管理?保障容器能被有序访问是关键
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)