容器服务 Kubernetes 版支持两种容器网络插件:Terway与Flannel。本文主要对比了两种容器网络插件的功能及适用场景。
Terway是阿里云自研的网络插件,通过ENI实现Pod的网络通信,提供了基于eBPF的网络加速、NetworkPolicy和Pod级别交换机/安全组等能力,适用于对节点规模、网络性能和安全等有较高需求的高性能计算、游戏、微服务等场景。
Flannel是社区开源的网络插件,在ACK中采用了阿里云VPC专有网络模式,报文经过VPC路由表直接转发,适用于节点规模较小、需要简化网络配置、无需对容器网络进行自定义控制的场景。
容器网络插件需要在创建集群时进行安装,且集群创建后不支持更改。
对比项 | Terway | Flannel |
网络性能 |
| |
节点配额 | 使用Terway时节点数量上限依赖于单集群容量限制。
| 使用Flannel时节点数量上限依赖于VPC路由表条目数和单集群容量限制。 VPC路由表条目数:默认支持200个条目,申请配额后最大支持1000个条目。集群中一个节点对应一个条目,即最大支持1000个节点。
|
节点Pod数量 | Pod使用节点ENI,单节点Pod数量由节点的规格和指标数据(ENI数量、单网卡私有IPv4地址数)决定。 以上图一个计算型c7、ecs.c7.4xlarge、16 vCPU 32 GiB规格的ECS实例为例:
虽然计算型c6与计算型c7实例拥有相同的ENI数量,但是单网卡私有IPv4地址数指标上的差别使得计算型c6在多IP模式下最多能容纳140个Pod。关于详细的计算方法,请参见节点Pod限额计算方法。 | 单节点Pod数量依赖于配置容器网段时设置的节点Pod数量和子网掩码位。 以上图为例,在ACK集群Pro版当前Pod网络CIDR(172.16.0.0/20)配置下,每个节点最多容纳256个Pod,集群内最多可允许部署16个节点。 重要 Flannel创建成功后不能修改最大节点数量。 |
容器网段 |
|
|
网络安全 |
|
|
IPv4/IPv6双栈 | 支持双栈。 | 不支持双栈。 说明 ACK使用的是经过修改以适配阿里云云上环境的Flannel插件,并不与开源社区保持完全同步。ACK Flannel的更新记录,请参见Flannel。 |
固定Pod IP | 支持为Pod配置固定IP。 | 不支持为Pod配置固定IP。 |
会话保持 | 负载均衡后端直接对接Pod,依托会话保持能力,可以实现在后端Pod发生变化时服务无中断。 | 负载均衡后端使用NodePort连接Pod,在Pod发生变化时,流量会中断,可能导致业务上的重试。 |
多集群互访 | 多个集群的Pod之间只要设置安全组开放端口就可以互相通信。 | 无法支持。 |
Pod源IP保留 | Pod访问VPC内其他端点,所使用的源IP都是Pod IP,便于审计。 | Pod访问VPC内其他端点,所使用的源IP是节点IP,Pod IP无法保留。 |
后续步骤
在创建集群后,为Pod、Service、节点分配的网段无法修改。网段的大小决定这三种资源的数量上限,可能会对您的业务部署产生影响。规划不同的网段可以实现资源在网络逻辑上的隔离,以便于您实现访问控制、定制化路由等操作。因此推荐您在创建集群前完成网段规划,详细内容请参见Kubernetes集群网络规划。
完成网段规划后:
如果您计划使用Terway,请参见使用Terway网络插件在创建集群时安装Terway。
如果您计划使用Flannel,请参见使用Flannel网络插件在创建集群时安装Flannel。