如果你正在处理ACK Terway,先别急着照搬网上的参数。当你部署Kubernetes集群时,容器网络性能往往是绕不开的坎。今天我们来聊聊阿里云容器服务ACK中一个重要的网络插件——Terway,以及它如何通过直接给Pod绑定弹性网卡(ENI)来实现高性能网络。
传统容器网络的瓶颈是什么?
我的处理经验
在Kubernetes集群中,Pod是调度的最小单元。每个Pod拥有独立的网络命名空间,需要与集群内其他Pod、外部服务通信。常见的容器网络方案(如Flannel、Calico的overlay模式)会通过VXLAN或IPIP隧道封装数据包,这意味着流量从Pod发出后,先经过宿主机的网桥,再经过隧道封装,最后通过宿主机的物理网卡发送出去。这带来了几个问题:
- 性能损耗:隧道封装增加了CPU开销和延迟,对高吞吐、低时延场景不友好。
- 网络复杂度:需要额外的路由和隧道端点维护,排查问题更难。
- 受限于宿主机网络栈:Pod的IP经过NAT或转发,无法直接暴露给外部,服务治理(如直连Pod IP)受限。
对于云上环境,我们有一个天然的优势:云厂商提供了弹性网卡(ENI)这种虚拟网络接口。如果能让每个Pod直接绑定一张ENI,不就可以让Pod像一台独立云服务器一样拥有自己的网络接口,彻底绕过隧道封装了吗?阿里云Terway网络插件正是这样做的。
想继续深入:此处可内链到“ACK Terway优化清单”文章。
什么是弹性网卡ENI?
容易忽略的细节
弹性网卡是阿里云提供的一种可以独立挂载到云服务器(ECS)实例上的虚拟网络接口。每个ENI拥有独立的MAC地址、内网IP,可以绑定安全组规则。一张ENI可以挂载到一台ECS上,也可以从一台ECS解绑后挂载到另一台,但同一时刻只能挂载到一个ECS。ENI的主要特点:
- 独立网络属性:每个ENI有自己的IP、MAC、安全组,与主网卡隔离。
- 热插拔:可以在不重启ECS的情况下动态挂载或卸载。
- 配额限制:每台ECS实例类型决定了可附加的ENI数量上限(例如ecs.g7.4xlarge最多支持8张ENI)。
在Kubernetes场景下,如果我们能利用ECS上剩余的ENI配额,为每个Pod分配一张ENI,那么每个Pod就拥有了独立的“网线直连”体验。
相关阅读:此处可内链到“ACK Terway常见问题”专题。
Terway网络插件概述
我的处理经验
Terway是阿里云容器服务ACK内置的网络插件,专门优化了云原生环境下的网络性能。它提供两种工作模式:
- Flannel模式:使用Flannel的VXLAN overlay,但后端数据路径经过优化(例如使用弹性网卡辅助IP)。
- ENI模式(直通模式):每个Pod直接绑定一张弹性网卡(或辅助IP),实现Pod与ECS同等网络能力。
我们聚焦ENI模式——这也是Terway最大的特色。
关联教程:此处可内链到“ACK Terway部署与验证”内容。
ACK Terway:ENI直通模式的原理:Pod如何“插上网线”
在Terway的ENI模式下,整个流程可以拆解为三步:
第一步:ENI资源池管理
Terway会预先在集群的每个ECS节点上创建或挂载一批弹性网卡,形成“ENI热池”。当新Pod调度到该节点时,Terway从池中取出一张空闲的ENI分配给Pod。为了加速调度,Terway会提前与阿里云API交互,确保ENI数量满足需求。
第二步:Pod网络命名空间与ENI绑定
Kubernetes中每个Pod有独立的网络命名空间。Terway通过CNI(容器网络接口)标准,在Pod启动时执行以下操作:
- 创建veth pair,一端放在宿主机,另一端放入Pod的网络命名空间。
- 将预分配的ENI(或ENI上的辅助IP)配置为Pod的虚拟网卡。
- 设置Pod内的路由表,默认网关指向ENI的网关(即宿主机上ENI对应的网关地址)。
- 宿主机上配置iptables规则,确保ENI的流量直接进入Pod的veth对端。
实际上,Terway并不直接将ENI网卡“插入”Pod命名空间(因为ENI是物理设备,只能附着在ECS上),而是在宿主机上创建一对veth,将ENI的IP地址和路由迁移到Pod内。这样从Pod发出的数据包直接通过ENI出站,无需经过隧道封装或NAT。
第三步:网络通信路径
- Pod访问Pod(同节点):通过宿主机内部的veth桥接,直接走内核转发,几乎无损耗。
- Pod访问Pod(跨节点):Pod的IP就是ENI上的IP(属于VPC网络),数据包直接通过ENI进入VPC路由,由阿里云底层物理网络转发到目标节点的ENI,再进入目标Pod。整个过程完全在VPC二层/三层网络内完成,无需overlay。
- Pod访问外部(公网或云服务):同样,Pod使用ENI的IP直接访问,可以绑定弹性公网IP或通过NAT网关,与ECS行为一致。
这种模式的关键优势:Pod之间通信时,源IP和目标IP都是云VPC内的真实IP,网络策略、安全组、流日志等云原生网络功能可以直接作用在Pod级别。
延伸阅读:此处可内链到“ACK Terway配置案例”相关文章。
与传统模式对比:为什么ENI直通更好?
容易忽略的细节
我们用一个表格直观感受差异(实际文章用文字描述):
传统overlay模式(例如Flannel VXLAN):数据包经过隧道封装和解封装,CPU开销增加约5%-15%,延迟增加100微秒到几毫秒。而且宿主机上无法直接看到Pod的IP,流量监控复杂。
Terway ENI模式:数据包直接走底层物理网络,延迟接近宿主机原生网络,吞吐量可达到24Gbps以上(取决于ECS规格)。在安全组方面,可以直接对Pod的ENI绑定安全组规则,实现Pod级隔离。
代价是什么?IP地址消耗。每个Pod占用一个独立的VPC内网IP(来自ENI的辅助IP或主IP),而ECS的ENI数量有限,因此Pod密度受限于ECS可附加的ENI数量。比如一台ecs.g7.2xlarge默认支持6张ENI(含主网卡),每张ENI最多支持10个辅助IP(按实例规格不同),那么该节点理论最多支持(6-1)*10 + 1 = 51个Pod(减去主网卡)。相比Flannel的单个VXLAN网段可支持几百个Pod,Terway ENI模式在Pod密度上稍低,但在性能和网络能力上大幅领先。
ACK Terway:适用场景与注意事项
适合使用ENI直通的场景:
- 高吞吐、低延迟应用:如大数据实时计算、AI训练、高频交易。
- 需要Pod直连外部服务:例如Pod直接暴露给传统VM应用,或需要利用云产品的网络能力(如SLB、NAT网关直挂Pod)。
- 需要精细化网络安全策略:使用安全组直接控制Pod流量。
- 已有VPC基础设施依赖:比如使用VPC对等连接、云企业网(CEN)等打通网络。
注意事项:
- 配额规划:在创建ACK集群前,需要评估节点规格的ENI限制,确保Pod数量不超过可用ENI IP数。阿里云提供了Terway的IP地址管理功能,可配置每个节点的IP池大小。
- 辅助IP vs 主网卡:Terway默认使用ENI的辅助IP(Secondary IP)分配给Pod,每个ENI默认支持6个辅助IP,但可通过调整实例规格获得更多。也可以选择使用单独ENI(每个Pod独占一张ENI),但会消耗更多网卡资源,通常用于网络隔离要求极高的场景。
- 集群规模:对于超大规模集群(数千节点),Terway需要频繁调用阿里云API创建/绑定ENI,可能会遇到API限流。建议配合Terway的预热池和异步处理机制。
- 升级兼容性:从Flannel模式切换到ENI模式需要重建节点或新建节点池,无法原地升级。
补充参考:此处可内链到“ACK Terway故障排查实例”。
如何快速体验Terway ENI模式?
故障定位思路
在阿里云容器服务ACK中创建集群时,在网络插件选择“Terway”,然后选择“ENI多IP模式”即可。配置时注意设置Pod网段(与VPC网段不冲突),系统会自动管理ENI的创建和分配。对于已有集群,可以新建一个节点池,使用Terway ENI模式,将应用调度到该节点池。阿里云也提供了详细的官方文档和最佳实践。
总结
验证与回滚
Terway的ENI直通模式从根本上解决了传统容器网络在云环境下的性能瓶颈。它让Pod拥有了与云服务器同等级别的网络能力——独立的IP、安全组、直通VPC。虽然受限于ENI配额导致Pod密度有所降低,但对于追求性能的网络敏感场景,这是当前最优解之一。理解了这个原理,你在规划ACK集群网络方案时就能更有底气地做出选择。真正做好ACK Terway,靠的不是参数堆砌,而是持续验证。
延伸阅读
