全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:使用Terway网络插件实现Kubernetes集群内Pod的网络互通

更新时间:May 11, 2024

Terway是阿里云开源的基于专有网络VPC的容器网络接口CNI(Container Network Interface)插件,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。您可以通过使用Terway网络插件实现Kubernetes集群内部Pod的网络互通。

使用限制

  • 以下功能正在公测中,如需使用,请先在配额平台提交申请。

    • IPv6双栈功能

    • Trunk ENI支持

    • Pod独占弹性网卡

    • 控制台的方式的NetworkPolicy支持

      说明

      如果您使用的是命令行方式的NetworkPolicy支持,则无需提交申请。

  • 仅支持在集群创建阶段选择网络插件类型(Terway和Flannel),集群创建后不支持修改。

  • Terway会接管Terway网络集群节点上eth0之外的弹性网卡用于配置Pod网络,因此不能手动配置额外的弹性网卡。如果您需要自行管理部分弹性网卡,请参见为弹性网卡(ENI)配置白名单

重要
  • 如果您在ACK集群中已使用Terway或Flannel插件,无需再额外安装其他CNI插件(如Cilium),因为一个Kubernetes集群通常只使用一个CNI插件来管理其网络层。关于Terway插件的版本变更记录,请参见Terway

  • 每个ECS实例对最大ENI数量和可以拥有的IP数量都有限制,这些限制可能会影响您可以在节点上运行的Pod数量。因此,在设计和规划您的ACK集群时,请充分考虑需要选择的ECS实例规格。关于Terway的实例规格,请参见实例规格族

费用说明

开启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资源的需求。

说明

vethipvlan是Linux中的网络虚拟化技术。veth是一对虚拟以太网设备,数据包从一端进入可以从另一端出来,常用于连接容器和宿主机。ipvlan允许单个物理网络接口拥有多个IP地址,适合于要求较高网络性能的场景。

image

Terway独占ENI模式

说明
  • Terway独占ENI模式可能会受到ECS配额的限制。关于如何提升创建限额,请参见使用限制

  • Terway独占ENI模式只对调度到ECS节点上的Pod生效,不支持在虚拟节点场景下使用。

独占ENI模式为每个Pod分配一个独立的ENI和IP地址,每个Pod都拥有自己的网络接口,并且网络性能更接近于传统虚拟机。这种模式适合对网络性能有较高要求的场景,比如需要高网络吞吐量或低延迟的应用。

image

Terway弹性网卡资源模型

在使用Terway之前,请您了解Terway管理的弹性网卡资源模型,以便更好地使用。下图展示了一个节点上的弹性网卡以及Terway网卡的管理情况。

image
  • 弹性网卡:弹性网卡是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

  • Pod使用ENI上的IP资源,多个Pod共享一个ENI。

  • 节点部署密度高。

ECS支持的弹性网卡数-1)×单个ENI支持的私有IP数(EniQuantity-1)×EniPrivateIpAddressQuantity

说明

节点最大容器网络Pod数量>11。

0

  • veth

  • datapathv2

  • ipvlan

共享ENI多IP模式+Trunk ENI

您需要在创建集群时选择Trunk ENI。

terway-eniip + terway-controlplane

  • 在共享ENI多IP模式基础上,增加了对Trunk ENI的支持,允许混合部署。

  • 使用Trunk ENI类型的Pod可配置独立的虚拟交换机、安全组,支持固定IP。

  • 兼备部署密度高、配置灵活的特点。

ECS支持的弹性网卡数-1)×单个ENI支持的私有IP数(EniQuantity-1)×EniPrivateIpAddressQuantity

说明

节点最大容器网络Pod数量>11。

ECS支持的总网卡数-ECS支持的弹性网卡数

EniTotalQuantity-EniQuantity

  • veth

  • datapathv2

  • ipvlan

独占ENI模式

Pod独占弹性网卡模式

terway-eni + terway-controlplane

Pod独占使用ENI资源,提供最佳网络性能。

ECS支持的弹性网卡数-1

EniQuantity-1

说明

节点最大容器网络Pod数量>6。

ECS支持的弹性网卡数-1

EniQuantity-1

独占

综上所述,在选择Terway模式时,需要根据具体的业务需求、性能要求以及网络策略来决定使用哪种模式。例如,如果需要在节点上尽可能多地部署Pod,可以选择共享ENI多IP模式;如果需要为每个Pod提供最佳的网络性能,可以选择独占ENI模式。

查看节点支持的最大容器网络Pod数量

  • 方式一:创建节点池时,在实例规格区域,通过Terway兼容性(可支持 Pod 数量)查看某一实例规格支持的Pod数量。

  • 方式二:先参考下列方式获取计算数据,然后手动计算机型支持的Pod数量。

    • 通过文档查询实例规格支持的弹性网卡数量。具体信息,请参见实例规格族

    • 通过OpenAPI进行查询,通过指定已有节点的实例规格InstanceTypes,单击发起调用,返回值中EniQuantity表示实例规格支持的弹性网卡上限,EniPrivateIpAddressQuantity表示单个弹性网卡支持的私有IP数量。

配置Terway网络

步骤一:规划和准备集群网络

使用Terway网络插件创建ACK Kubernetes集群时,您需要指定专有网络VPC、虚拟交换机、Pod网络CIDR(地址段)和Service CIDR(地址段)。因此,在创建集群之前,您需要先创建一个专有网络VPC,并在VPC下创建3个及以上虚拟交换机,且这3个虚拟交换机需要处于不同可用区。

关于使用Terway网络模式时规划配置网段需要注意的更多信息,请参见Kubernetes集群网络规划

    说明
    • 虚拟交换机网段,对应节点所使用的网段。

    • Pod虚拟交换机网段,对应Pod所使用的网段。

本文介绍如何创建一个专有网络和3个虚拟交换机。

  1. 登录专有网络管理控制台

  2. 在顶部菜单栏处,选择专有网络的地域,然后单击创建专有网络

    重要

    专有网络所在地域必须与将要创建的ACK集群保持一致。

  3. 创建专有网络页面,设置相关配置项。

    配置项

    说明

    示例值

    名称

    自定义名称。

    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_2019,选择可用区,设置IPv4网段192.168.16.0/20

    • 第三个交换机名称为switch_192_168_32_0_20,选择可用区,设置IPv4网段192.168.32.0/20

  4. 配置完成后,单击确定

步骤二:配置Terway网络插件

您需要在创建集群时配置Terway网络插件,已创建的集群不支持修改网络插件类型。关于创建集群的其他参数,请参见创建Kubernetes托管版集群

  1. 登录容器服务管理控制台

  2. 为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网络插件配置集群网络的关键参数配置如下图所示。

    image.png

  3. 将集群创建完成后,可以在组件管理页面的网络页签下查看您安装的网络插件。

    不同的组件实现的功能、支持配置的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及独立虚拟交换机、安全组