Terway与Flannel的对比

容器服务 Kubernetes 版支持两种容器网络插件:Terway与Flannel。这两种容器网络插件拥有不同的底层实现与特性,适用于不同的应用场景。容器网络插件需要在创建集群时进行安装,且集群创建后不支持更改,请您在创建集群前完成容器网络插件选型。

对比项

Terway

Flannel

插件来源

阿里云自研的网络插件,专为ACK优化,拥有多种工作模式。

Kubernetes社区提供的的Flannel CNI插件。

适用场景

使用大规模集群,希望避免IP地址浪费,需要较高网络性能,或对容器网络有自定义控制需求的场景。

使用小规模集群,仅需要简单的容器网络体验,不需要使用网络策略(Network Policy),也无需对容器网络进行自定义控制的场景。

Pod网段

  • 直接将阿里云的弹性网卡(ENI)分配给容器,Pod网段直接使用VPC的网段。

  • 支持对Pod网段进行扩容。

  • Pod使用独立于VPC的网段。使用Flannel时,Pod网段、节点网段(VPC网段)、Service网段互相独立,不能重合。

  • 不支持Pod网段扩容。

单节点Pod限额

Pod使用节点ENI,单节点Pod限额由节点的规格决定。详细计算方法请参见节点Pod限额计算方法

Pod限额由分配给节点的Pod网段大小决定,与节点规格无关。每个节点默认支持256个Pod。

集群规模

默认支持5000个节点,申请配额后最大支持15000个节点。

使用Flannel时,每一个节点对应一条VPC路由表项。受限于VPC路由表大小,单VPC默认支持200个节点,申请配额后最大支持1000个节点。

网络性能

  • 支持独占ENI模式:Pod独占ENI,拥有极高的网络性能。

  • 支持DataPathV2加速模式:Pod访问集群内的端点时支持通过eBPF绕过节点网络协议栈,加速网络访问。

Pod使用所在节点的网络协议栈对外访问,存在NAT转换损耗。

IPv4/IPv6双栈

支持双栈。

不支持双栈。

Network Policy支持

支持Kubernetes原生网络策略Network Policy,可以定义复杂的容器间访问控制。

不支持Network Policy。

固定Pod IP

支持为Pod配置固定IP。

不支持为Pod配置固定IP。

网络安全

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

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

会话保持

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

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

多集群互访

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

无法支持。

Pod源IP保留

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

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

后续步骤

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

  • 完成网段规划后: