levels of contents

Flannel和Calico

Flannel和Calico

Flannel和Calico都是用于网络功能的Kubernetes插件,它们在设计和使用场景上有所不同。

1.Flannel

Flannel是一个轻量级的网络解决方案,用于为Kubernetes集群中的容器提供网络互联。它使用Overlay网络模型,在不同主机之间创建虚拟网络层,将容器IP地址映射到物理主机上。Flannel支持多种后端实现,包括VXLAN、GRE、Host-GW等。

Flannel的特点:

  • 简单易用:Flannel的配置简单,易于部署和管理。
  • 跨平台支持:Flannel可以运行在多种操作系统和容器运行时中。
  • 适用于小规模集群:由于其轻量级设计,Flannel适用于小规模Kubernetes集群。
  • 没有网络策略:Flannel本身不提供网络策略(Network Policy)功能,需要结合其他插件或网络层设备来实现。

适用场景:

  • 需要简单、易用的网络解决方案。
  • 对网络策略要求不高的场景。
  • 小规模的Kubernetes集群。

不同node上的pod的通信流程:

  • pod中产生数据,根据pod的路由信息,将数据发送到Cni0
  • Cni0 根据节点的路由表,将数据发送到隧道设备flannel.1
  • Flannel.1查看数据包的目的ip,从flanneld获得对端隧道设备的必要信息,封装数据包。
  • Flannel.1将数据包发送到对端设备。对端节点的网卡接收到数据包,发现数据包为overlay数据包,解开外层封装,并发送内层封装到flannel.1设备。
  • Flannel.1设备查看数据包,根据路由表匹配,将数据发送给Cni0设备。
  • Cni0匹配路由表,发送数据给网桥上对应的端口。

2.Calico

Calico是一个强大的网络和网络策略解决方案,专为大规模容器和云原生应用而设计。它使用BGP协议来实现容器之间的路由和网络连接,同时支持灵活的网络策略定义。

Calico的特点:

  • 强大的网络策略:Calico内置了对Kubernetes Network Policy的完整支持,可以根据源IP、目标IP或标签等进行细粒度的网络控制和隔离。
  • 高性能和可扩展性:Calico使用BGP协议进行容器之间的路由,具有高性能和可扩展性,适用于大规模部署。
  • 支持多种网络拓扑:Calico支持多种网络拓扑,包括单主机(host)、overlay、双主机等,可以根据实际需求选择合适的拓扑。

Calico的组件:

  • Calico 的 CNI 插件。这是 Calico 与 Kubernetes 对接的部分。
  • Felix。它是一个 DaemonSet,负责在宿主机上插入路由规则(即:写入 Linux 内核的 FIB 转发信息库),以及维护 Calico 所需的网络设备等工作。
  • BIRD。它就是 BGP 的客户端,专门负责在集群里分发路由规则信息。
  • Etcd:分布式键值存储,主要负责网络元数据一致性,确保Calico网络状态的准确性,可以与kubernetes共用

Calico的网络模式:

  • IPIP网络

    • 流量:tunlo设备封装数据,形成隧道,承载流量。
    • 适用网络类型:适用于互相访问的pod不在同一个网段中,跨网段访问的场景。外层封装的ip能够解决跨网段的路由问题。
    • 效率:流量需要tunl0设备封装,效率略低
  • BGP网络:

    • 流量:使用路由信息导向流量
    • 适用网络类型:适用于互相访问的pod在同一个网段,适用于大型网络。
    • 效率:原生hostGW,效率高

适用场景:

  • 需要强大的网络策略功能,对网络隔离要求较高的场景。
  • 大规模Kubernetes集群。
  • 需要高性能和可扩展性的场景。

不同node上的pod的通信流程:

img

其中的绿色实线标出的路径,就是一个 IP 包从 Node 1 上的 Container 1,到达 Node 2 上的 Container 4 的完整路径。

可以看到,Calico 的 CNI 插件会为每个容器设置一个 Veth Pair 设备,然后把其中的一端放置在宿主机上(它的名字以 cali 前缀开头)。

此外,由于 Calico 没有使用 CNI 的网桥模式,Calico 的 CNI 插件还需要在宿主机上为每个容器的 Veth Pair 设备配置一条路由规则,用于接收传入的 IP 包。比如,宿主机 Node 2 上的 Container 4 对应的路由规则,如下所示:

10.233.2.3 dev cali5863f3 scope link

即:发往 10.233.2.3 的 IP 包,应该进入 cali5863f3 设备。

有了这样的 Veth Pair 设备之后,容器发出的 IP 包就会经过 Veth Pair 设备出现在宿主机上。然后,宿主机网络栈就会根据路由规则的下一跳 IP 地址,把它们转发给正确的网关到达目标机器上的时候再根据路由规则找到目的ip对应的Veth Pair设备。

3.总结

Flannel适用于简单、小规模的Kubernetes集群,而Calico更适合需要复杂网络策略和大规模容器部署的场景。根据具体需求和实际情况,选择适合自己集群的网络插件是很重要的决策。

posted @   看叶生叶落  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示