Terway是阿里云开源的基于专有网络VPC的容器网络接口CNI(Container Network Interface)插件,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。您可以通过使用Terway网络插件实现Kubernetes集群内部Pod的网络互通。
使用限制
以下功能正在公测中,如需使用,请先在配额平台提交申请。
IPv6双栈功能
Trunk ENI支持
Pod独占弹性网卡
控制台的方式的NetworkPolicy支持
说明如果您使用的是命令行方式的NetworkPolicy支持,则无需提交申请。
仅支持在集群创建阶段选择网络插件类型(Terway和Flannel),集群创建后不支持修改。
Terway会接管Terway网络集群节点上eth0之外的弹性网卡用于配置Pod网络,因此不能手动配置额外的弹性网卡。如果您需要自行管理部分弹性网卡,请参见为弹性网卡(ENI)配置白名单。
费用说明
开启Terway或Flannel插件不会产生额外的费用,但使用插件可能会涉及到一些基础资源的消耗和管理,使用这些资源可能会产生费用。关于ACK的云产品资源计费信息,请参见云产品资源计费。
Terway与Flannel对比
在创建集群时,ACK提供Terway和Flannel两种网络插件:
对比项 | Terway | Flannel |
插件来源 | 阿里云自研的网络插件,专门为ACK优化。 | 阿里云维护的Flannel CNI插件。 |
网络性能 | 直接将阿里云的弹性网卡(ENI)分配给容器,Pod地址即为VPC中的地址,无NAT损耗。支持独占ENI模式。 | 配合阿里云VPC路由,Pod地址为虚拟地址,存在NAT转换损耗。 |
安全 | 支持使用网络策略Network Policy,可以定义复杂的容器间访问控制。 | 不支持使用网络策略Network Policy。 |
地址管理 | 无需按节点分配地址段,随用随分配,地址不浪费。支持为Pod配置固定IP及独立虚拟交换机、安全组。 | 节点维度划分地址段,大规模集群中地址浪费较多。 |
SLB | SLB后端直接对接Pod,支持业务无中断升级。 | SLB后端不能直接对接Pod,需要通过NodePort转发。 |
综上对比,如果您需要提供高性能的网络解决方案,如网络策略和带宽管理,或者希望避免IP地址浪费,推荐使用Terway插件;如果您仅需要提供简单的容器网络体验,不需要使用网络策略(Network Policy)和细密的网络控制,可以选择Flannel。
关于Terway和Flannel插件的更多对比信息,请参见ACK常见网络能力一览表。
Terway网络插件介绍
Terway网络插件是ACK自研的网络插件,将原生的弹性网卡(ENI)分配给Pod,实现Pod网络互联,支持基于Kubernetes标准的网络策略(Network Policy)来定义容器间的访问策略。
在Terway网络插件中,每个Pod都拥有独立的网络栈和IP地址。同一台ECS内的Pod之间通信,直接通过机器内部的转发;跨ECS的Pod通信,报文通过VPC的弹性网卡直接转发。由于不需要使用VxLAN等隧道技术封装报文,因此Terway模式网络具有较高的通信性能。
Terway提供共享ENI多IP模式和独占ENI模式、弹性网卡资源模型,以下介绍三种方式的实现原理。
Terway共享ENI多IP模式
在共享ENI(弹性网络接口)多IP模式下,多个Pod可以共享同一个ENI,但每个Pod被分配不同的IP地址。这种模式增加了节点上Pod的部署密度,同时也减少了对ENI资源的需求。
veth
和ipvlan
是Linux中的网络虚拟化技术。veth
是一对虚拟以太网设备,数据包从一端进入可以从另一端出来,常用于连接容器和宿主机。ipvlan
允许单个物理网络接口拥有多个IP地址,适合于要求较高网络性能的场景。
Terway独占ENI模式
Terway独占ENI模式可能会受到ECS配额的限制。关于如何提升创建限额,请参见使用限制。
Terway独占ENI模式只对调度到ECS节点上的Pod生效,不支持在虚拟节点场景下使用。
独占ENI模式为每个Pod分配一个独立的ENI和IP地址,每个Pod都拥有自己的网络接口,并且网络性能更接近于传统虚拟机。这种模式适合对网络性能有较高要求的场景,比如需要高网络吞吐量或低延迟的应用。
Terway弹性网卡资源模型
在使用Terway之前,请您了解Terway管理的弹性网卡资源模型,以便更好地使用。下图展示了一个节点上的弹性网卡以及Terway网卡的管理情况。
弹性网卡:弹性网卡是ECS提供的一种资源,一个弹性网卡具备多个IP地址。Terway网络模式下,ECS上的弹性网卡由Terway进行管理,并将IP分配给不同的Pod。ECS上的弹性网卡有多种类型,Terway不会管理节点的主网卡(Primary)。Terway会依据Pod数量动态调整节点上ECS弹性网卡数量、弹性网卡的IP数量,请参考下面的IP资源池部分。
IP资源池:IP资源池是Terway内的IP管理模型,当弹性网卡从ECS分配后,就会将网卡上的IP存入IP资源池内。
当Pod创建时,IP会优先从地址池分配,这个过程无需和OpenAPI交互,大大提高了容器创建的效率。
当Pod删除时,IP会优先放回地址池,以便下一次分配时快速使用。当空闲IP超过配置阈值时,才会调用OpenAPI归还IP地址。
IP资源池提供了IP预热、IP缓存的能力。默认配置下不开启IP预热,开启缓存5个空闲IP。您可以参考Terway配置参数进行调整。
Terway各种模式对比
Terway模式的节点允许创建Pod数量依赖ECS实例规格所提供的弹性网卡数量,建议您选择较高规格和较新类型的ECS机型。ECS弹性网卡数量必须满足规格限制才能加入集群:共享弹性网卡模式下,机型支持的最大Pod数需大于11;独占弹性网卡模式下,机型支持的最大Pod数需大于6。关于ECS提供的实例规格资源,请参见实例规格族,或使用OpenAPI Explorer查询。
节点最大容器网络Pod数量≥Pod维度网络支持配置的Pod数量。
节点最大Pod=节点容器网络Pod+主机网络Pod。
在一个集群中,不支持terway-eni和terway-eniip组件共存。
对于开启了IP双栈的集群,ECS实例提供的弹性网卡需支持同等数量的IPv4和IPv6地址,即EniPrivateIpAddressQuantity(IPv4地址数量)与EniIpv6AddressQuantity(IPv6地址数量)相同。
Terway不同模式使用的组件有所不同。使用不同的组件,支持配置的Pod数量、Pod维度网络、网络数据路径也有所不同。详情见下表:
Terway模式 | 创建集群时选择的Terway模式 | 使用的组件 | 特点 | 节点最大容器网络Pod数量 | Pod维度网络(固定IP、虚拟交换机、安全组)支持配置的Pod数量 | 网络数据路径 |
共享ENI多IP模式 | 默认为terway-eniip,无需进行其他选择。 | terway-eniip |
| (EniQuantity-1)×EniPrivateIpAddressQuantity 说明 节点最大容器网络Pod数量>11。 | 0 |
|
共享ENI多IP模式+Trunk ENI | 您需要在创建集群时选择Trunk ENI。 | terway-eniip + terway-controlplane |
| (EniQuantity-1)×EniPrivateIpAddressQuantity 说明 节点最大容器网络Pod数量>11。 | ECS支持的总网卡数-ECS支持的弹性网卡数 EniTotalQuantity-EniQuantity |
|
独占ENI模式 | Pod独占弹性网卡模式 | terway-eni + terway-controlplane | Pod独占使用ENI资源,提供最佳网络性能。 | EniQuantity-1 说明 节点最大容器网络Pod数量>6。 | ECS支持的弹性网卡数-1 EniQuantity-1 | 独占 |
综上所述,在选择Terway模式时,需要根据具体的业务需求、性能要求以及网络策略来决定使用哪种模式。例如,如果需要在节点上尽可能多地部署Pod,可以选择共享ENI多IP模式;如果需要为每个Pod提供最佳的网络性能,可以选择独占ENI模式。
查看节点支持的最大容器网络Pod数量
配置Terway网络
步骤一:规划和准备集群网络
使用Terway网络插件创建ACK Kubernetes集群时,您需要指定专有网络VPC、虚拟交换机、Pod网络CIDR(地址段)和Service CIDR(地址段)。因此,在创建集群之前,您需要先创建一个专有网络VPC,并在VPC下创建3个及以上虚拟交换机,且这3个虚拟交换机需要处于不同可用区。
关于使用Terway网络模式时规划配置网段需要注意的更多信息,请参见Kubernetes集群网络规划。
虚拟交换机网段,对应节点所使用的网段。
Pod虚拟交换机网段,对应Pod所使用的网段。
本文介绍如何创建一个专有网络和3个虚拟交换机。
登录专有网络管理控制台。
在顶部菜单栏处,选择专有网络的地域,然后单击创建专有网络。
重要专有网络所在地域必须与将要创建的ACK集群保持一致。
在创建专有网络页面,设置相关配置项。
配置项
说明
示例值
名称
自定义名称。
vpc_192_168_0_0_16。
IPv4网段
建议您使用RFC私网地址作为专有网络的网段。
192.168.0.0/16。
IPv6网段
系统为VPC分配的IPv6网段为全球单播地址段,VPC中的实例分配IPv6地址后可以通过IPv6网关连接互联网。
分配(默认)。
交换机
设置3个虚拟交换机。
说明如需使用IPv6,则需要配置IPv6网段。
第一个交换机名称为switch_192_168_0_0_20,选择可用区,设置IPv4网段为192.168.0.0/20。
第二个交换机名称为switch_192_168_16_0_20,选择可用区,设置IPv4网段为192.168.16.0/20。
第三个交换机名称为switch_192_168_32_0_20,选择可用区,设置IPv4网段为192.168.32.0/20。
配置完成后,单击确定。
步骤二:配置Terway网络插件
您需要在创建集群时配置Terway网络插件,已创建的集群不支持修改网络插件类型。关于创建集群的其他参数,请参见创建ACK托管集群。
登录容器服务管理控制台。
为Terway网络插件配置集群网络的关键参数。
配置项
说明
IPv6双栈
选中开启。如果没有在创建VPC时分配IPv6网段,则无法使用IPv6双栈功能。
开启IPv6双栈将创建双栈Kubernetes集群。双栈功能正在公测中,如需使用请前往配额平台申请。
重要仅1.22及以上版本的Kubernetes集群支持IPv6双栈功能。
Worker节点与控制平面之间的通信使用IPv4地址。
容器网络插件需选择Terway。
集群使用的VPC及ECS需要支持IPv6双栈。
专有网络
选择步骤一:规划和准备集群网络中创建的专有网络。
网络插件
选择Terway。
Terway模式
设置是否选中Pod独占弹性网卡以获得最佳性能。如需使用Pod独占弹性网卡以获得最佳性能功能,请前往配额平台提交申请。
如果选中,Pod将独占一个专有的弹性网卡。
说明启用Pod独占弹性网卡以获得最佳性能功能后,一个节点上能运行的Pod数量将减少,请谨慎选择。
如果不选中,使用弹性网卡的辅助IP分配给Pod,一个Pod占用一个弹性网卡辅助IP地址。
设置是否选中IPvlan。
只在弹性网卡共享模式支持选中。
如果选中,采用IPvlan eBPF作为网卡共享模式虚拟化技术,并且只能使用Alibaba Cloud Linux系统,性能优于默认模式。
如果不选中,则使用默认模式,采用策略路由作为网卡共享模式虚拟化技术,同时兼容Centos 7和Alibaba Cloud Linux的系统。
IPvlan功能仅支持在创建集群时配置。集群一旦创建成功,将不支持开启或关闭IPvlan功能。
关于Terway模式的IPvlan模式的详细信息,请参见Terway网络插件使用场景。
设置是否选中NetworkPolicy支持。
只在弹性网卡共享模式下支持选中,默认不选中。
如果选中,集群支持使用Kubernetes的NetworkPolicy策略对Pod进行网络控制。
如果不选中,集群将不会支持使用Kubernetes的NetworkPolicy策略对Pod进行网络控制,这样将不存在网络策略对Kubernetes的API Server产生过大的负载。
如何使用ACK集群的网络策略及常用的使用场景,请参见在ACK集群使用网络策略。
设置是否选中Trunk ENI支持。如需使用Trunk ENI支持,请前往配额平台提交申请。Terway Trunk ENI支持为每个Pod配置固定IP、独立的虚拟交换机、安全组,提供精细化流量管理、流量隔离、网络策略配置和IP管理能力。关于更多信息,请参见为Pod配置固定IP及独立虚拟交换机、安全组。
虚拟交换机
选择步骤一:规划和准备集群网络中创建的专有网络。
Service CIDR
保留默认值。
IPv6 Service CIDR
在启用IPv6双栈后可配置,保留默认值。
为Terway网络插件配置集群网络的关键参数配置如下图所示。
将集群创建完成后,可以在组件管理页面的网络页签下查看您安装的网络插件。
不同的组件实现的功能、支持配置的Pod数量计算方式有所不同。详细信息,请参见Terway各种模式对比。
Terway网络插件使用场景
Terway DataPath V2模式(原IPvlan模式)
从Terway V1.8.0版本起引入了DataPath V2模式。在新建集群时,系统将默认启用这一模式。与原有的IPvlan模式相比,DataPath V2模式具有更好的兼容性。
DataPath V2与IPvlan模式差异
对比项 | DataPath V2 | IPvlan |
网络接口 | veth | ipvlan |
NetworkPolicy | 支持 | 支持 |
Trunk ENI | 支持 | 支持 |
使用限制
需要使用容器服务ACK中的Alibaba Cloud Linux操作系统镜像。
尚未支持安全沙箱运行时。
网络策略(NetworkPolicy)实现和原有Terway有差异:
CIDR选择器优先级低于Pod选择器。如果CIDR包含Pod网段,则需要额外增加Pod选择器。
对CIDR选择器中的except关键字支持不佳,不建议使用except关键字。
使用Egress类型的NetworkPolicy会导致访问集群中Host网络类型的Pod和集群中节点的IP失败。
集群内部访问对外暴露的LoadBalancer类型Service对应的SLB时可能存在回环问题而导致网络不通。更多信息,请参见为什么无法访问负载均衡。
功能说明
不同于默认的Terway的网络模式,IPvlan模式主要在Pod网络、Service、网络策略(NetworkPolicy)做了性能优化:
Pod的网络直接通过ENI网卡的IPvlan L2的子接口实现,简化了网络在宿主机上的转发流程,让Pod的网络性能几乎与宿主机的性能无异,延迟相对传统模式降低了30%。
Service的网络采用eBPF替换原有的kube-proxy模式,不需要经过宿主机上的iptables或者IPVS转发,在大规模集群中性能几乎无降低,扩展性更优。在大量新建连接和端口复用场景中,请求延迟比IPVS和iptables模式大幅降低。
Pod的网络策略(NetworkPolicy)也采用eBPF替换掉原有的iptables的实现,不需要在宿主机上产生大量的iptables规则,降低网络策略对网络性能的影响。
适用场景
中间件与微服务
避免了大规模部署时带来的性能衰减,微服务全链路延迟降低。
游戏、直播类应用
显著降低网络延迟,减少多个实例之间的争抢。
高性能计算
高性能计算会有大量的网络吞吐,IPvlan模式网络本身带来CPU等的开销减少,为业务本身留出更多的计算资源。
NetworkPolicy网络策略模式
当您使用Terway容器网络时,如果您希望在IP地址或者端口层面控制网络流量,您可以为集群中特定应用使用网络策略。详细信息,请参见在ACK集群使用网络策略。
Trunk ENI模式
Terway Trunk ENI支持为每个Pod配置固定IP、独立的虚拟交换机、安全组,能提供精细化流量管理、流量隔离、网络策略配置和IP管理能力。详细信息,请参见为Pod配置固定IP及独立虚拟交换机、安全组。