容器网络插件Terway与Flannel对比

容器服务 Kubernetes 版支持两种容器网络插件:TerwayFlannel。本文主要对比了两种容器网络插件的功能及适用场景。

  • Terway是阿里云自研的网络插件,通过ENI实现Pod的网络通信,提供了基于eBPF的网络加速、NetworkPolicyPod级别交换机/安全组等能力,适用于对节点规模、网络性能和安全等有较高需求的高性能计算、游戏、微服务等场景。

  • Flannel是社区开源的网络插件,在ACK中采用了阿里云VPC专有网络模式,报文经过VPC路由表直接转发,适用于节点规模较小、需要简化网络配置、无需对容器网络进行自定义控制的场景。

重要

容器网络插件需要在创建集群时进行安装,且集群创建后不支持更改。

对比项

Terway

Flannel

网络性能

image
  • TerwayTCP RR、UDP PPS、Bandwidth带宽、Latency延迟这四个方面的性能都领先于社区版Flannel。

    说明

    测试数据为基于ecs.ebmg5s.24xlarge实例的理论值,实际数据以您的操作环境为准。更多详细内容,请参见阿里巴巴云原生社区

  • Terway支持独占ENI模式:Pod独占ENI,拥有极高的网络性能,适用于高性能计算、游戏、微服务等场景。

  • Terway支持共享ENI DataPath V2加速模式:DataPath V2IPVLAN方案的升级版,Pod访问集群内的端点时支持通过eBPF绕过节点网络协议栈,加速网络访问。

节点配额

使用Terway时节点数量上限依赖于单集群容量限制。

  • ACK集群Pro:默认支持5,000个节点,最大支持15,000个节点。

  • ACK集群基础版:10个节点。

使用Flannel时节点数量上限依赖于VPC路由表条目数和单集群容量限制。

VPC路由表条目数:默认支持200个条目,申请配额后最大支持1000个条目。集群中一个节点对应一个条目,即最大支持1000个节点。

  • ACK集群Pro:默认支持200个节点,最大支持1,000个节点。

  • ACK集群基础版:10个节点。

节点Pod数量

Pod使用节点ENI,单节点Pod数量由节点的规格和指标数据(ENI数量单网卡私有IPv4地址数)决定。

image

以上图一个计算型c7、ecs.c7.4xlarge、16 vCPU 32 GiB规格的ECS实例为例:

  • IP模式(共享ENI)下最多容纳210Pod。

  • 独占模式下最多容纳7Pod。

虽然计算型c6计算型c7实例拥有相同的ENI数量,但是单网卡私有IPv4地址数指标上的差别使得计算型c6在多IP模式下最多能容纳140Pod。关于详细的计算方法,请参见节点Pod限额计算方法

单节点Pod数量依赖于配置容器网段时设置的节点Pod数量和子网掩码位。

image

以上图为例,在ACK集群Pro当前Pod网络CIDR(172.16.0.0/20)配置下,每个节点最多容纳256Pod,集群内最多可允许部署16个节点。

重要

Flannel创建成功后不能修改最大节点数量。

容器网段

  • 容器网段从VPC网段中分配,因此对VPC的地址消耗较高,建议在使用前规划充足的VPC网段。

  • 容器网段(VPC网段)、Service网段互相独立,不能重合,网段无法修改。

  • 支持通过新增虚拟交换机(vSwitch)的方式对容器网段进行扩容。

  • 容器网段独立于VPC网段。Flannel会为集群中的每个节点从已配置的容器网段中分配一个子网网段subnet,节点内所有PodIP地址都将从subnet中分配。

  • 容器网段、节点网段(VPC网段)、Service网段互相独立,不能重合,网段无法修改。

  • 不支持容器网段扩容。

网络安全

  • 支持为Pod配置独立的虚拟交换机与安全组。

  • 支持Kubernetes原生网络策略NetworkPolicy,可以自定义容器间的访问控制。

  • 不支持为Pod配置独立的虚拟交换机与安全组。

  • 不支持NetworkPolicy。

IPv4/IPv6双栈

支持双栈。

不支持双栈。

说明

ACK使用的是经过修改以适配阿里云云上环境的Flannel插件,并不与开源社区保持完全同步。ACK Flannel的更新记录,请参见Flannel

固定Pod IP

支持为Pod配置固定IP。

不支持为Pod配置固定IP。

会话保持

负载均衡后端直接对接Pod,依托会话保持能力,可以实现在后端Pod发生变化时服务无中断。

负载均衡后端使用NodePort连接Pod,在Pod发生变化时,流量会中断,可能导致业务上的重试。

多集群互访

多个集群的Pod之间只要设置安全组开放端口就可以互相通信。

无法支持。

PodIP保留

Pod访问VPC内其他端点,所使用的源IP都是Pod IP,便于审计。

Pod访问VPC内其他端点,所使用的源IP是节点IP,Pod IP无法保留。

后续步骤

  • 在创建集群后,为Pod、Service、节点分配的网段无法修改。网段的大小决定这三种资源的数量上限,可能会对您的业务部署产生影响。规划不同的网段可以实现资源在网络逻辑上的隔离,以便于您实现访问控制、定制化路由等操作。因此推荐您在创建集群前完成网段规划,详细内容请参见Kubernetes集群网络规划

  • 完成网段规划后:

相关文档

  • 关于集群内节点数量的限制与配额提升方式,请参见配额与限制

  • 关于在使用容器网络时遇到的常见问题,请参见容器网络FAQ