全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:使用Terway网络插件

更新时间:Nov 07, 2024

Terway是阿里云开源的基于专有网络VPC的容器网络接口CNI(Container Network Interface)插件,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。

阅读前提示

为了让您能更好地了解Terway的工作模式,建议您在使用Terway网络插件前阅读本文档。

阅读本文前,推荐您参见网络概述Terway与Flannel的对比文档了解容器网络插件的基本概念并完成容器网络插件选型。

创建集群前需要对集群中的网段进行规划,具体操作请参见Kubernetes集群网络规划

费用说明

使用Terway插件并不收费,但在每个节点上都会部署Terway所使用的Pod,这些Pod会占用少量节点资源。关于ACK的云产品资源计费信息,请参见云产品资源计费

节点Pod限额计算方法

使用Terway网络插件时,单节点支持的最大数量基于节点使用的ECS规格支持的ENI数量。Terway对单节点的Pod限额有最低限制,单节点支持的Pod限额需要满足限制才能正常加入集群。详细信息请参见下表:

Terway模式

单节点Pod限额

示例值

单节点支持固定IP、独立虚拟交换机、独立安全组功能的Pod数量

共享ENI模式

ECS规格支持的ENI数量-1)×单个ENI支持的私有IP数。

(EniQuantity-1)×EniPrivateIpAddressQuantity

说明

单节点的Pod限额必须>11才能加入集群。

以通用型实例规格族g7的ecs.g7.4xlarge规格为例。该规格实例支持8个ENI,单个ENI支持30个私有IP。单节点Pod限额为(8-1)×30=210个Pod。

重要

使用节点ENI的Pod限额是由节点规格决定的固定值。修改maxPods只影响使用hostNetwork的Pod限额。

0

共享ENI模式+Trunk ENI

ECS规格支持的总网卡数-ECS规格支持的弹性网卡数。

EniTotalQuantity-EniQuantity

独占ENI模式

ECS规格支持的ENI数量-1。

EniQuantity-1

说明

单节点的Pod限额必须>6才能加入集群。

以通用型实例规格族g7的ecs.g7.4xlarge规格为例。该规格实例支持8个ENI。单节点Pod限额为(8-1)=7个Pod。

ECS规格支持的ENI数量-1。

EniQuantity-1

重要

在Terway v1.11.0及之后的版本中,Terway支持为节点池选择独占ENI模式或共享ENI模式,在单个集群中可同时存在两种节点池,更多信息请参见Terway发布记录

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

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

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

    • 通过实例规格族文档查询ECS实例支持的弹性网卡数量。

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

在创建集群时安装Terway网络插件

您需要在创建集群时安装Terway网络插件,已创建的集群不支持修改网络插件类型。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击页面右上角的创建集群

  3. 为Terway网络插件配置集群网络的关键参数。关于创建集群的其他参数,请参见创建ACK托管集群

    配置项

    说明

    IPv6双栈

    勾选开启后,会为集群开启双栈,同时支持IPv4与IPv6地址。

    开启IPv6双栈将创建双栈Kubernetes集群。双栈功能正在公测中,如需使用请前往配额平台申请。

    重要
    • 仅1.22及以上版本的集群支持IPv6双栈功能。

    • Worker节点与控制面之间的通信使用IPv4地址。

    • 需要使用Terway容器网络插件。

    • 使用Terway共享ENI模式时,ECS的规格需要支持IPv6地址,且支持的IPv4地址数量与IPv6地址数量相同,才能正常加入集群。ECS规格的详细信息请参见实例规格族

    • 集群使用的VPC及ECS需要支持IPv6双栈。

    • 集群使用eRDMA功能需要关闭IPv6双栈。

    专有网络

    集群所使用的VPC。

    网络插件

    选择Terway

    DataPath V2

    勾选后,会使用DataPathv2加速模式。选择加速模式后,Terway会采取不同于共享ENI常规模式的流量转发链路,实现更快的网络通信。此模式的具体特性,请参见网络加速

    NetworkPolicy 支持

    勾选后,则会支持Kubernetes原生的NetworkPolicy

    说明

    从Terway v1.9.2开始,新建集群NetworkPolicy由eBPF的实现提供,开启此功能后容器网络Pod访问Service的访问流量也会被eBPF处理。

    说明

    通过控制台管理NetworkPolicy的功能正在公测中,如果您希望使用,请在配额平台提交申请。

    Trunk ENI 支持

    勾选后,会启用Trunk ENI模式,可以为每个Pod配置固定IP、独立的虚拟交换机、安全组。

    说明
    • ACK托管集群无需申请即可选择Trunk ENI选项。如果您希望在ACK专有集群中开启Trunk ENI,请先在配额平台提交申请。

    • 从Kubernetes 1.31开始,新建的ACK托管集群会自动启用Trunk ENI功能,无需手动进行选择。

    虚拟交换机

    集群中节点所使用的虚拟交换机网段。建议选择来自3个及以上不同可用区的交换机,以达到更高集群可用性等级。

    Pod 虚拟交换机

    Pod所使用的虚拟交换机网段,可以与节点虚拟交换机网段重合。

    Service CIDR

    Service所使用的网段,不能与节点及Pod的网段重合。

    IPv6 Service CIDR

    IP在启用IPv6双栈后可配置。

Terway工作模式参考信息

您可参照下方的详细介绍,了解Terway多种模式具体的对比以及工作原理。

共享ENI模式与独占ENI模式

为Pod分配IP地址时,Terway有两种模式:共享ENI模式独占ENI模式

重要
  • 在Terway v1.11.0及之后的版本中,Terway在单个集群中支持为单个节点池选择共享ENI或独占ENI模式,在创建集群时不再支持勾选。

  • 节点上的主弹性网卡被分配给节点OS,其余弹性网卡会被Terway托管用于配置Pod网络,因此请勿手动配置这些弹性网卡。如果您需要自行管理部分弹性网卡,请参见为弹性网卡(ENI)配置白名单

对比项

共享ENI模式

独占ENI模式

Pod IP地址管理

ENI分配方式

多个Pod共享一个ENI。

每个Pod在其节点上独占一个ENI。

Pod部署密度

Pod部署密度较高。单个节点可支持数百个Pod。

Pod部署密度较低。常用规格的节点只支持个位数的Pod。

网络架构

imageimage

数据链路

Pod访问其他Pod,或作为Service后端被访问时,流量都会经过节点的网络协议栈。

Pod访问Service时,流量仍旧会经过节点操作系统的协议栈。但当Pod访问其他Pod,或作为Service后端被访问时,会直接使用挂载的ENI绕过节点网络协议栈,以此获得更高的性能。

适用场景

常规的Kubernetes使用场景。

这种模式中网络性能更接近于传统虚拟机,适合对网络性能有较高要求的场景,比如需要高网络吞吐量或低延迟的应用。

网络加速

支持DadaPathv2网络加速,具体信息请参见网络加速

不支持网络加速,但Pod独占ENI资源,已经提供了极佳的网络性能。

NetworkPolicy支持

支持Kubernetes原生的NetworkPolicy,提供了基于策略的访问控制能力。

不支持NetworkPolicy

访问控制

开启Trunk ENI配置后,支持为Pod配置固定IP、独立的安全组和虚拟交换机,具体信息请参见为Pod配置固定IP、独立虚拟交换机与安全组

默认支持为Pod配置固定IP、独立的安全组和虚拟交换机。

网络加速

使用Terway共享ENI模式时,可以选择开启网络加速模式。选择开启加速模式后,Terway会采取不同于常规共享ENI模式的流量转发路径,以达成更高的性能。Terway目前支持DataPathv2加速模式,请参考下方的说明了解DataPathv2的特点。

重要
  • DataPathv2是更早的IPvlan+eBPF加速模式的升级版。在Terway V1.8.0及更晚的版本中,创建集群并安装Terway插件时只支持选择DataPathv2加速。

  • DataPathv2加速模式与IPvlan+eBPF加速模式仅适用于共享ENI节点池,不影响独占ENI节点池。

DataPathv2特点

说明

适用Terway版本

Terway V1.8.0及后续版本中创建的集群。

网络架构

image

加速数据链路

  • Pod访问Service时,会使用eBPF将Service地址解析为Service后端某个Pod的地址。

  • Pod访问不同节点的Pod时,会使用eBPF绕过双方的节点网络协议栈。

  • Pod访问同节点的Pod时,不但可以绕过节点协议栈,而且访问流量无需离开节点,直接在节点内部完成转发。

性能优化

  • 简化了Pod的网络在宿主机上的转发流程,让Pod的网络性能几乎与宿主机的性能无异,延迟相对常规模式降低了30%。

  • Service的网络采用eBPF替换原有的kube-proxy模式,绕过节点上的iptables或者IPVS转发,请求延迟大幅降低。网络性能在大规模集群中受到的影响更小,扩展性更优。

  • Pod的网络策略(NetworkPolicy)也采用eBPF替换掉原有的iptables的实现,不需要在宿主机上产生大量的iptables规则,降低网络策略对网络性能的影响。

使用方法

在创建集群时,为网络插件选择Terway后,勾选DataPath V2选项。

注意事项

  • 仅支持Alibaba Cloud Linux操作系统镜像。

  • 尚未支持安全沙箱运行时。

  • 网络策略(NetworkPolicy)实现和原有Terway有差异:

    • CIDR选择器优先级低于Pod选择器。如果CIDR包含Pod网段,则需要额外增加Pod选择器。

    • 对CIDR选择器中的except关键字支持不佳,不建议使用except关键字。

    • 使用Egress类型的NetworkPolicy会导致访问集群中Host网络类型的Pod和集群中节点的IP失败。

  • 集群内部访问对外暴露的LoadBalancer类型Service对应的SLB时可能存在回环问题而导致网络不通。更多信息,请参见为什么无法访问负载均衡

在更早创建的集群中,您可能选择了IPvlan+eBPF加速模式,您可以参照下方的说明了解其特点。

IPvlan+eBPF加速模式

IPvlan+eBPF特点

说明

适用Terway版本

Terway V1.7.0及更早版本中创建的集群。

网络架构

image

加速数据链路

  • Pod访问Service时,会使用eBPF在Pod网络命名空间内将Service地址解析为Service后端某个Pod的地址。

  • Pod访问其他Pod时,会利用IPvlan虚拟网络技术,绕过双方的节点网络协议栈。

使用方法

在创建集群时,为网络插件选择Terway后,勾选Pod IPvlan选项。

访问控制

Terway共享ENI模式通过对NetworkPolicy的支持和Trunk ENI选项,允许对集群内的网络流量进行更精细化的管理。Terway独占ENI模式同样支持一部分流量控制能力。

NetworkPolicy支持

  • Terway独占ENI节点池不支持NetworkPolicy

  • Terway共享ENI节点池支持Kubernetes原生的NetworkPolicy功能,它通过用户定义的规则来控制Pod之间的网络流量。

    在创建集群时,如果为网络插件选择Terway后,勾选NetworkPolicy 支持选项,即可使集群支持NetworkPolicy。详细信息,请参见在ACK集群使用网络策略

    说明

    通过控制台管理NetworkPolicy的功能正在公测中,如果您希望使用,请在配额平台提交申请。

为Pod配置固定IP、独立虚拟交换机与安全组

  • Terway独占ENI节点池默认支持为每个Pod配置固定IP、独立的虚拟交换机及安全组,能提供精细化流量管理、流量隔离、网络策略配置和IP管理能力。

  • Trunk ENI是Terway共享ENI节点池的一种选项。开启Trunk ENI后,可以为每个Pod配置固定IP、独立的虚拟交换机、安全组。

    在创建集群时,网络插件选择Terway后,勾选Trunk ENI 支持选项。详细信息,请参见为Pod配置固定IP及独立虚拟交换机、安全组

    说明
    • ACK托管集群无需申请即可选择Trunk ENI选项。如果您希望在ACK专有集群中开启Trunk ENI,请先在配额平台提交申请。

    • 从Kubernetes 1.31开始,新建的ACK托管集群会自动启用Trunk ENI功能,无需手动进行选择。

    • 开启Trunk ENI模式后,会安装terway-eniip与terway-controlplane组件。