首页 > 其他分享 >Flannel和Calico之对比(Comparison between Flannel and Calico)

Flannel和Calico之对比(Comparison between Flannel and Calico)

时间:2024-12-31 18:54:52浏览次数:8  
标签:Comparison 网络 Calico Pod 数据包 节点 Flannel

K8S网络插件(CNI):Flannel和Calico详细对比

Flannel和Calico是Kubernetes中最常用的两种CNI(Container Network Interface)插件,各自针对不同的网络需求提供解决方案。以下是对这两种插件的详细讲解,包括它们的原理、架构、优缺点及使用场景。

1. Flannel

Flannel是一个专注于提供简单容器网络的CNI插件,旨在满足Kubernetes集群中基础网络通信需求。

1.1 Flannel的架构

Flannel的架构比较简单,包含以下关键组件:

1.1.1 flanneld(Flannel Daemon)

运行在每个Kubernetes节点上。

核心功能:

  • 子网分配:从集群网络池中为每个节点分配一个子网。

  • 路由配置:确保节点之间可以通信。

  • 网络封装:根据配置的后端类型对跨节点的数据包进行封装和解封装。

1.1.2 Etcd(或Kubernetes API)

用于存储集群网络配置和子网分配信息。Flannel读取和写入节点的网络配置。

1.2 Flannel的网络模式

Flannel提供多种后端模式来实现网络连接,每种模式适用于不同的环境和需求。

1.2.1 VXLAN模式(默认)

原理:

  • 在L3层上通过VXLAN隧道封装数据包。

  • 每个数据包被封装进一个新的UDP数据包,在两个节点之间通过UDP协议传输。

特点:

  • 无需依赖底层网络支持,适应性广。

  • 封装带来了一定的性能开销。

适用场景:底层网络不支持直接路由、希望快速部署网络。

1.2.2 Host-GW模式

原理:

  • 基于主机的路由表,在L3层上通过静态路由实现节点间的通信。

  • 每个节点直接将数据包路由到目标节点,无需封装。

特点:

  • 性能更高,因为没有封装开销。

  • 要求节点处于同一物理或逻辑网络(如VLAN)。

适用场景:节点可以直接通信的裸机或私有云环境。

1.2.3 UDP模式

原理:通过UDP隧道传输数据包。特点:实现简单,但性能较差,已不推荐使用。

1.2.4 IPIP模式

原理:使用IP-in-IP封装技术,数据包在L3层上通过IP包封装传输。

特点:

  • 类似于VXLAN,但性能稍低。

  • 提供比Host-GW更广泛的兼容性。

1.3 Flannel网络流量流程

同节点Pod间通信

  1. Pod A 发送数据到 Pod B。

  2. 数据包通过Pod A的veth接口到达宿主节点。

  3. 数据包经由节点的虚拟网桥(如cbr0)到达Pod B。

跨节点Pod通信(VXLAN模式)

  1. Pod A 发送数据到目标Pod(在另一节点上)。

  2. 数据包经过veth接口到达宿主节点。

  3. flanneld对数据包进行VXLAN封装。

  4. 封装后的数据包通过底层网络传输到目标节点。

  5. 目标节点的flanneld解封装数据包,并将其路由到目标Pod。

1.4 Flannel优缺点

优点:

  • 简单易用:安装配置方便,适合初学者。

  • 轻量级:对系统资源占用较低。

  • 兼容性强:支持多种网络环境和后端模式。

缺点:

  • 功能单一:不支持网络策略和安全控制。

  • 性能不足:在大规模集群或高流量环境下可能会成为瓶颈。

  • 缺少可观测性:对网络性能和流量的监控较少。

2. Calico

Calico是一个功能强大的CNI插件,不仅提供高性能的网络通信,还支持网络策略、负载均衡和安全控制。

2.1 Calico的架构

Calico的架构比Flannel更复杂,包含以下核心组件:

2.1.1 Calico Node

每个节点运行的核心代理。

包含以下子组件:

  • Felix:负责将网络策略应用到Linux内核网络栈。

  • BIRD(BGP Daemon):通过BGP协议分发路由信息。

2.1.2 Datastore

存储Calico的网络和策略配置。

支持多种存储后端:

  • Etcd

  • Kubernetes API(推荐)

2.2 Calico的网络模式

2.2.1 Direct Routing模式(无隧道模式)

原理:

  • 使用BGP将每个节点的Pod CIDR通告给其他节点。

  • 节点间直接路由通信,无需封装。

特点:

  • 高性能,无封装开销。

  • 需要底层网络支持BGP协议。

适用场景:高性能要求、底层网络支持BGP的大型集群。

2.2.2 IPIP模式

原理:在L3层上通过IP-in-IP封装数据包。

特点:

  • 适用于底层网络不支持BGP的情况。

  • 性能略低于Direct Routing。

适用场景:混合环境,部分节点不支持BGP。

2.2.3 VXLAN模式

原理:类似于Flannel的VXLAN模式,通过UDP隧道封装数据包。

特点:

  • 兼容性广泛,适应不同网络环境。

  • 支持对网络进行加密。

2.3 Calico的网络策略

Calico提供了强大的网络策略功能,可以通过声明性配置控制流量的入站和出站行为。

2.3.1 NetworkPolicy

作用范围:针对某个命名空间中的Pod。

功能:控制Pod之间或Pod与外部的通信。

2.3.2 GlobalNetworkPolicy

作用范围:集群全局。

功能:对所有命名空间生效,用于跨命名空间的安全策略。

2.3.3 示例策略配置

允许来自特定命名空间的通信:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-namespace
spec:
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          role: frontend

限制Pod的出站访问:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-egress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Egress
  egress: []

2.4 Calico的工作流程

同节点Pod通信(Direct Routing模式)

  1. Pod A 发送数据到 Pod B(同一节点)。

  2. 数据包通过veth接口进入宿主机。

  3. Felix配置的路由规则直接将数据包路由到Pod B。

跨节点Pod通信(Direct Routing模式)

  1. Pod A 发送数据到目标Pod(另一节点)。

  2. 数据包到达宿主机,BGP通告的路由规则将数据包直接发送到目标节点。

  3. 目标节点将数据包路由到目标Pod。

2.5 Calico优缺点

优点:

  • 高性能:Direct Routing模式避免了封装开销。

  • 网络策略控制:支持复杂的安全策略,提供强大的流量控制能力。

  • 灵活性:支持多种模式,适配不同的网络需求。

  • 可观测性:提供丰富的监控工具。

缺点:

  • 复杂性高:安装和管理需要一定经验。

  • 资源开销:比Flannel更高的CPU和内存使用。

3. Flannel 和 Calico 对比

特性FlannelCalico
主要功能提供基础L3网络提供L3网络 + 网络策略和安全控制
网络模式VXLAN、Host-GW、UDP、IPIPDirect Routing、IPIP、VXLAN
性能中等高性能(Direct Routing模式)
网络策略不支持支持
复杂度
资源开销较高
适用场景简单网络需求大规模集群,高性能和安全需求

4. 选择指南

使用Flannel:

  • 适合中小型集群。

  • 只需要基本的Pod间通信。

  • 部署环境资源有限。

使用Calico:

  • 适合大规模集群。

  • 需要高性能的跨节点通信。

  • 需要对网络流量进行严格控制。1. Flannel

  • Flannel是一个专注于提供简单容器网络的CNI插件,旨在满足Kubernetes集群中基础网络通信需求。

标签:Comparison,网络,Calico,Pod,数据包,节点,Flannel
From: https://blog.csdn.net/J56793/article/details/144545570

相关文章

  • 【C语言】[waring]comparison between pointer and integer报错
     原因:在C语言中,指针和整型是不同的数据类型,它们之间不能直接进行比较。 改正:在arr[i]前加&取地址  [waring]comparisonbetweenpointerandinteger改正方法:1.显式类型转换(不推荐)intvalue=10;int*ptr=NULL;if((int)ptr==value){}这里if((int)ptr......
  • 论文阅读:Statistical Comparisons of Classifiers over Multiple Data Sets
    论文地址:StatisticalComparisonsofClassifiersoverMultipleDataSets(acm.org)前面在机器学习之Friedman检验-CSDN博客中提到了Friedman检验,这里将对这个方法的论文进行详细的阅读,以了解其原理。摘要尽管用于在单个数据集上比较两种学习算法的方法已经研究了相当......
  • k8s阶段07 Pod网路模型及主流网络插件flannel, Calico, Cilium
    Kubernetes网络:Node网络:Node间能正常建立TCP/IP通信连接Node间隔了路由器:隧道模型Node共存于同一个二层网络:隧道模型路由模型Service网络Pod网络CNI:网络插件NetP......
  • calico安装下载
    k8s网络插件1、版本选择cacli版本对应关系查找。参考:https://blog.csdn.net/LRXmrlirixing/article/details/126648454https://docs.tigera.io/archive/v3.10/getting-started/kubernetes/requirements本次安装的的k8s版本是v1.14.3,所以可以使用calicov3.10版本。  同样的......
  • This comparison appears to be unintentional because the types ‘“up “ | “down
    Thiscomparisonappearstobeunintentionalbecausethetypes'"up"|"down"'and'"up"'havenooverlap.<ArkTSCheck>onToggle(dir:"up"|"down"){constidList=AppStora......
  • calico节点重启4分钟后跨节点流量才通
    birdv0.3.3问题现象针对calicobgppeer+ipip模式,单个节点重启,等待4分钟以上,pod跨节点流量才通。问题分析k8s节点重启->bird进程加载bird配置文件,进入gracefulrestart流程和wait状态每次尝试建立bgppeer连接时,graceful_restart_locks++。nest/proto.cproto_graceful_res......
  • calico网络原理、组网方式
    Calico是一个用于Kubernetes和其他容器编排系统的网络插件,主要提供高性能的网络连接和安全策略。其设计理念和组网方式如下:网络原理Layer3路由:Calico采用Layer3(L3)网络模型,允许每个Pod拥有一个唯一的IP地址。它通过在基础网络上直接路由IP流量来实现这一点,而不是使用Overl......
  • Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装
    七、Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装一、calicoCalico是一个开源的虚拟化网络方案,支持基础的Pod网络通信和网络策略功能。官方文档:https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart1、calico安装###在Master控......
  • k8s网络原理之Calico
    什么是Calico:Calico是一个基于BGP的纯三层网络方案,其会为每个容器(pod)分配一个可路由的IP,在通信时不需要解包和拆包,因此网络性能损耗小,易于排查和水平扩展。Calico网络功能强大,可以与istio集成。CalicoIPIP模式与Vxlan类似,也是通过网络隧道技术实现的,与Vxlan的差别就是,VXLAN本质......
  • Kubernetes v1.28.2 & Calico eBPF
    集群初始化简略步骤初始化集群kubeadminit\--skip-phases=addon/kube-proxy\--apiserver-cert-extra-sans=35.229.220.159,127.0.0.1,10.0.0.3,10.0.0.4,10.0.0.5,10.254.0.2\--control-plane-endpoint=apiserver.unlimit.club\--apiserver-advertis......