弹性网卡(Elastic Network Interfaces,简称ENI)是一种在专有网络VPC中为ECS实例提供网络接口和IP地址的虚拟网络接口。每台ECS实例可以附加一个或多个弹性网卡。辅助弹性网卡可以在不同ECS实例之间进行解绑和绑定操作,这使得网络配置更加灵活和可扩展,以满足不同业务场景下的网络需求。例如,实现多IP地址、多网卡、高可用网络方案等。
每个弹性网卡可以包含以下主要属性:
您的专有网络VPC信息,包括交换机、可用区等。
您的VPC交换机子网的IPv4地址范围内的一个主要私有IPv4地址。
您的VPC交换机子网的IPv4地址范围内的一个或者多个辅助私有IPv4地址。
一个或多个公有IPv4地址。
一个或多个IPv6地址。
一个MAC地址。
一个或多个安全组。
基本概念
概念 | 说明 |
网卡类型 | 网卡类型包括主网卡(Primary)和辅助弹性网卡(Secondary)。VPC网络中的每个实例都有默认的网卡,称为主网卡,您无法独立创建和从实例卸载主网卡;您可以创建并额外绑定到实例上的网卡,称为辅助弹性网卡。 |
私有IPv4地址 | 每个弹性网卡都有一个交换机地址范围内的私有IPv4地址,称为主私网地址。您可以在创建辅助弹性网卡时指定主私网地址,如果不指定,我们将为您随机分配。此外,您还可以为弹性网卡分配一个或者多个辅助私有IPv4地址,随后回收该辅助私有IP地址,再分配给其他弹性网卡。弹性网卡的IP地址数量由实例规格决定。更多信息,请参见实例规格族中的单网卡私有IPv4地址数指标。 |
私有IPv6地址 | 如果专有网络VPC和交换机开通了IPv6网段,您可以为弹性网卡分配一个或者多个辅助私有IPv6地址,有关开通交换机IPv6网段的信息,请参见创建和管理交换机。您使用的弹性网卡的IP地址数量由实例规格决定。更多信息,请参见实例规格族中的单网卡IPv6地址数指标。IPv6地址支持VPC内网通信,您可以通过开通IPv6公网带宽来访问公网或被公网访问,更多信息,请参见Windows开通IPv6公网带宽或者Linux开通IPv6公网带宽。 |
弹性公网IP地址 | 您可以为弹性网卡绑定一个或者多个弹性公网IP,用于公网通信。更多信息,请参见绑定和解绑弹性公网IP。 |
多队列 | 网卡多队列是指实例规格支持的最大网卡队列数。当单台ECS实例的vCPU处理网络中断存在性能瓶颈时,您可以将实例中的网络中断分散给不同的vCPU处理,从而提升性能。更多信息,请参见配置网卡多队列。 |
物理网卡映射 | 为了支持更高的网络性能,部分实例规格支持物理网卡映射,即附加网卡时通过NetworkCardIndex参数映射到物理机的网卡上,从而避免带宽争抢,提升实例的带宽能力。您可以使用DescribeInstanceTypes接口查询实例规格支持的物理网卡信息。附加网卡时,若您要指定物理网卡索引,主网卡的物理网卡索引必须为0,辅助弹性网卡可根据实例规格中物理网卡的索引信息进行设置。您需要将辅助网卡和主网卡设置在不同索引上,才能最大限度发挥实例的网络性能。相关使用方法,请参见基于JavaSDK实现弹性网卡操作最佳实践。 |
常见场景
容器网络方案:您可以使用基于弹性网卡的CNI (Container Network Interface)插件来管理K8s集群Pod的网络地址和通信。例如,您可以使用阿里云开源的基于专有网络VPC弹性网卡的容器网络接口CNI插件Terway。它支持基于Kubernetes标准的网络策略来定义容器间的访问策略,提供了基于弹性网卡的VPC模式和基于弹性网卡辅助IP的ENI多IP模式,您可以灵活选择来实现Kubernetes集群内部的网络互通。更多信息,请参见使用Terway网络插件。
网络与安全管理:多块网卡可以实现虚拟化网络设备功能,例如配置有多块网卡的负载均衡器、网络地址转换(NAT)服务器和代理服务器等。安全虚拟设备通常配置多个虚拟网卡,每块网卡都配置有自己的专有IP地址,并根据需要配置公网IP地址与防火墙。一种典型设置是实例上的主网卡处理外部公网流量,辅助弹性网卡处理内部流量,并连接到您的VPC中的各个子网。主网卡有一个关联的安全组控制从Internet(或者公网负载均衡器的TCP 80和443端口)对服务器的访问,而私有网卡关联的安全组只控制来自VPC内允许的私有子网的访问。外部流量只能从公共外部客户端通过主网卡的虚拟防火墙(安全组)强制卡点访问专用VPC网络。所有可从互联网访问的资源都应该与您的内部网络及其服务分离开来。这在很大程度上限制了安全违规可能影响的范围及造成的损害。
外网隔离:在分层网络架构方面,一项最佳实践是将面向公众的服务与内部网络及其服务隔离开来。您可以在连接到中层网络(存在应用服务器)的每个网络服务器上都挂载一块辅助弹性网卡。一块网卡接收面向公众的流量,另一块网卡处理访问控制比较严格的后端专用流量。每个双宿主实例会先接收和处理前端请求,然后启动到后端的连接,接着将请求发送至后端网络上的服务器。通过配置独立网卡(一个面向公众,另一个专用),您可以将独立的防火墙规则和访问控制分别应用到每块网卡,并在从公开网域到专用网域的通信过程中强制实施安全功能。
高可用:如果您的实例失效,其网卡可挂载到预配置的热/冷备用实例,以快速恢复服务。例如,您可以将一块网卡用作连接数据库实例或NAT实例等关键服务的主要或辅助网卡。如果实例失效,您(或更有可能是代表您运行的代码)可以将网卡挂载到热备用实例。由于网卡保留了私有IP地址、弹性EIP地址和MAC地址,因此只要您将网卡挂载到替代实例,网络流量就会立即开始流向备用实例。
流量隔离:在某些应用中,某些流量极其敏感。在这种情况下,可使用弹性网卡将这部分流量与其他流量分离开来,以保证在出现流量高峰或流量拥塞时可以使用最低带宽。每块网卡都设置一个虚拟队列。虚拟队列可防止一个VPC网络出现的带宽高峰和DDoS攻击影响其他VPC网络。每块网卡的虚拟队列还可以防止队头阻塞,并使每个I/O接口都能公平共用该实例的CPU。
最佳实践
弹性网卡是免费的,但数量是有限制的。更多信息,请参见弹性网卡数量限制。
您可以在实例运行时(热)、实例停止时或实例启动时(冷)将弹性网卡绑定到相同可用区的实例上,每台实例可以绑定的网卡数量由实例规格决定,更多信息,请参见实例规格族中的弹性网卡数。但是,您不能卸载主网卡,更多信息,请参见绑定弹性网卡。
如果实例位于相同可用区时,您可以将网卡从一个实例卸载,然后挂载到另一个实例,将弹性网卡绑定到实例不会增加或加倍主机实例的网络带宽。
您创建弹性网卡时可同时为网卡指定多个安全组,多个安全组的规则会叠加作用于当前网卡,如果您为网卡设置了多个辅助IPv4或者IPv6地址,这些IPv4或者IPv6地址也同时属于您指定的安全组且不可更改,如果您要调整网卡的安全组,请参见修改弹性网卡属性。调整后自动生效,关于安全组的更多信息,请参见安全组概述。
通过API方式查询网卡列表,您可以使用更加稳定、高效的NextToken方式。更多信息,请参见DescribeNetworkInterfaces。
CentOS 6.8 64位、CentOS 7.3 64位、Windows Server 2008 R2及更高版本等镜像的实例会自动在该实例的操作系统上配置网卡,其他镜像的实例需要您自己手动配置。更多信息,请参见配置辅助弹性网卡。
使用CLI、API或开发工具包启动实例时,您可以指定辅助弹性网卡。更多信息,请参见绑定弹性网卡。
您可以使用阿里云开源的基于专有网络VPC弹性网卡的容器网络接口CNI插件Terway来管理K8s集群Pod的网络地址和通信。更多信息,请参见使用Terway网络插件。
如果将来自同一子网的两个或多个网卡附加到一个实例,可能会遇到非对称路由等联网问题。您可以通过在一张弹性网卡(包括主网卡和辅助弹性网卡)上分配一个或多个辅助私网IP地址,实现专有网络VPC类型ECS实例的高利用率和负载故障时的流量转移。更多信息,请参见分配辅助私网IP地址。
单台ECS实例vCPU处理网络中断存在性能瓶颈时,您可以将实例中的网络中断分散给不同的CPU处理,从而提升性能。更多信息,请参见配置网卡多队列。
您可以使用eRDMA弹性网卡将线下的RDMA应用平滑迁移到云上,获取成本更低、弹性更好的高性能RDMA服务,例如高性能计算、AI训练、大数据处理等。更多信息,请参见eRDMA概述。
弹性网卡数量较多时,您可以通过标签服务来分组管理。更多信息,请参见标签概述。
您可以通过弹性网卡添加负载均衡SLB的后端服务器。更多信息,请参见通过弹性网卡添加后端服务器。
管理弹性网卡
通过ECS控制台或者调用API,您可以对弹性网卡资源进行全面的管理和配置。
通过ECS控制台管理:您可以直观地查看、创建、编辑和删除弹性网卡,以及进行绑定和解绑操作。
通过调用API管理:您可以编写脚本或使用SDK来批量管理、自动化操作和集成弹性网卡资源。
通过调用API管理
创建一个辅助弹性网卡:CreateNetworkInterface
删除一个辅助弹性网卡:DeleteNetworkInterface
查询弹性网卡列表:DescribeNetworkInterfaces
将辅助弹性网卡绑定至实例:AttachNetworkInterface
为一块弹性网卡分配一个或多个辅助私有IP地址:AssignPrivateIpAddresses
从一块弹性网卡删除一个或多个辅助私有IP地址:UnassignPrivateIpAddresses
从实例上解绑辅助弹性网卡:DetachNetworkInterface
修改弹性网卡名称、所属安全组和描述:ModifyNetworkInterfaceAttribute
查询实例上附加的弹性网卡信息:DescribeInstances