在 EC2 实例上使用 ENA 启用增强联网功能
Amazon EC2 通过 Elastic Network Adapter (ENA) 提供增强联网功能。要启用增强联网功能,必须使用包含所需 ENA 驱动程序的 AMI,或者手动安装该驱动程序。然后,您可以在实例上启用 ENA 支持。
要查看 ENA 驱动程序的发行说明或安装说明,请参阅与实例操作系统平台匹配的选项卡。
对于基于 Nitro 的实例,增强联网功能因实例类型实现的 Nitro 版本而异。
要查看实例的网络规范,请选择适合实例类型的实例系列链接。如果不确定适用哪个实例系列,请参阅《Amazon EC2 Instance Types Guide》中的 Naming conventions。
使用 ENA 启用增强联网功能的先决条件
要使用 ENA 准备增强联网,请按如下方式设置您的实例:
-
启动基于 Nitro 的实例。
-
确保实例具有 Internet 连接。
-
如果您的实例上有重要的数据需要保留,则应立即从您的实例创建 AMI,来备份这些数据。更新 ENA 内核驱动程序以及启用
enaSupport
属性可能会导致实例不兼容或操作系统无法访问。如果您有最新备份,则发生此情况时仍将保留数据。 -
Linux 实例:使用支持的 Linux 内核版本及支持的发行版启动实例,以便为实例自动启用 ENA 增强联网。有关更多信息,请参阅 ENA Linux 内核驱动程序发行说明
。 -
Windows 实例:如果实例运行的是 Windows Server 2008 R2 SP1,则请确保该实例具有 SHA-2 代码签名支持更新
。 -
使用 AWS Management Console 的 AWS CloudShell
,或者将 AWS CLI 或 AWS Tools for Windows PowerShell 安装到您选择的任意电脑上(最好是本地台式机或笔记本电脑)并进行配置。有关的更多信息,请参阅 访问 Amazon EC2 或 AWS CloudShell 用户指南。不能从 Amazon EC2 控制台管理增强联网。
测试是否启用了增强联网功能
您可以测试实例或 AMI 中是否启用了增强联网。
实例属性
要检查实例是否设置了增强联网 enaSupport
属性,请使用以下任一命令。如果该属性已设置,则响应为 true。
-
describe-instances (AWS CLI/AWS CloudShell)
aws ec2 describe-instances --instance-ids
instance_id
--query "Reservations[].Instances[].EnaSupport" -
Get-EC2Instance(适用于 Windows PowerShell 的工具)
(Get-EC2Instance -InstanceId
instance-id
).Instances.EnaSupport
映像属性
要检查 AMI 是否设置了增强联网 enaSupport
属性,请使用以下任一命令。如果该属性已设置,则响应为 true。
-
describe-images (AWS CLI/AWS CloudShell)
aws ec2 describe-images --image-id
ami_id
--query "Images[].EnaSupport" -
Get-EC2Image(适用于 Windows PowerShell 的工具)
(Get-EC2Image -ImageId
ami_id
).EnaSupport
Linux 网络接口驱动程序
使用以下命令验证是否在特定接口上使用了 ena
内核驱动程序(替代要检查的接口名称)。如果您使用单个接口(默认设置),则为 eth0
。如果您的 Linux 发行版支持可预测的网络名称,则这可以是类似于 ens5
的名称。有关更多信息,请展开在实例上启用增强联网中的 RHEL、SUSE 和 CentOS 部分。
在以下示例中,ena
内核驱动程序未加载,因为列出的驱动程序是 vif
。
[ec2-user ~]$
ethtool -i
eth0
driver: vif version: firmware-version: bus-info: vif-0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no
在本示例中,ena
内核驱动程序已加载并具有推荐的最低版本。此实例正确配置了增强联网。
[ec2-user ~]$
ethtool -i
eth0
driver: ena version: 1.5.0g firmware-version: expansion-rom-version: bus-info: 0000:00:05.0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no
在实例上启用增强联网
您使用的过程取决于实例的操作系统。
Amazon Linux 2 和最新版本的 Amazon Linux AMI 包含安装了 ENA 的增强联网所需的内核驱动程序,并启用了 ENA 支持。因此,如果使用 HVM 版本的 Amazon Linux 在支持的实例类型上启动实例,则已为您的实例启用增强联网。有关更多信息,请参阅测试是否启用了增强联网功能。
如果您使用较旧的 Amazon Linux AMI 启动了实例,并且实例尚未启用增强联网,请通过以下步骤启用增强联网。
在 Amazon Linux AMI 上启用增强联网
-
连接到您的实例。
-
从实例运行以下命令来使用最新内核驱动程序(包括
ena
)更新实例:[ec2-user ~]$
sudo yum update
-
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机重启实例:reboot-instances(AWS CLI)、Restart-EC2Instance(AWS Tools for Windows PowerShell)。
-
再次连接到实例,并使用测试是否启用了增强联网功能中的 modinfo ena 命令验证
ena
内核驱动程序是否已安装并具有推荐的最低版本。 -
[由 EBS 支持的实例] 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances(AWS CLI)、Stop-EC2Instance(AWS Tools for Windows PowerShell)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中停止该实例,以便使实例状态保持同步。
[实例存储支持的实例] 您无法停止实例来修改属性。请执行此过程:在 Amazon Linux AMI 上启用增强联网(实例存储支持的实例)。
-
使用以下任一命令从本地电脑启用增强联网属性:
-
modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute(适用于 Windows PowerShell 的工具)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(可选) 从实例创建 AMI,如 中所述创建 Amazon EBS-backed AMI 该 AMI 从实例继承增强联网
enaSupport
属性。因此,您可以使用此 AMI 启动默认情况下启用了增强联网功能的其他实例。 -
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances(AWS CLI)、Start-EC2Instance(AWS Tools for Windows PowerShell)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中启动该实例,以便使实例状态保持同步。
-
连接到实例,并使用ethtool -i eth
n
中的 测试是否启用了增强联网功能 命令验证是否在网络接口上安装并加载了ena
内核驱动程序。如果您在启用增强联网之后无法连接到实例,请参阅排查 Linux 上 ENA 内核驱动程序的问题。
在 Amazon Linux AMI 上启用增强联网(实例存储支持的实例)
按照上述过程操作,直到您停止实例的步骤。按照创建实例存储支持的 AMI中所述创建新 AMI,确保在注册 AMI 时启用增强联网属性。
-
register-image (AWS CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (AWS Tools for Windows PowerShell)
Register-EC2Image -EnaSupport $true
...
最新的 Ubuntu HVM AMI 包含安装了 ENA 的增强联网所需的内核驱动程序,并启用了 ENA 支持。因此,如果使用最新的 Ubuntu HVM AMI 在支持的实例类型上启动实例,则已为您的实例启用增强联网。有关更多信息,请参阅测试是否启用了增强联网功能。
如果您使用较旧的 AMI 启动了实例,并且实例尚未启用增强联网,则可以安装 linux-aws
内核程序包以获取最新的增强联网驱动程序并更新所需的属性。
安装 linux-aws
内核程序包(Ubuntu 16.04 或更高版本)
Ubuntu 16.04 和 18.04 随附 Ubuntu 自定义内核(linux-aws
内核程序包)。要使用其他内核,请联系 AWS Support
安装 linux-aws
内核程序包(Ubuntu Trusty 14.04)
-
连接到您的 实例。
-
更新包缓存和包。
ubuntu:~$
sudo apt-get update && sudo apt-get upgrade -y linux-aws
重要
如果在更新过程中系统提示您安装
grub
,请使用/dev/xvda
安装grub
,然后选择保留当前版本的/boot/grub/menu.lst
。 -
[由 EBS 支持的实例] 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances(AWS CLI)、Stop-EC2Instance(AWS Tools for Windows PowerShell)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中停止该实例,以便使实例状态保持同步。
[实例存储支持的实例] 您无法停止实例来修改属性。请执行此过程:在 Ubuntu 上启用增强联网(由实例存储支持的实例)。
-
使用以下任一命令从本地电脑启用增强联网属性:
-
modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute(适用于 Windows PowerShell 的工具)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(可选) 从实例创建 AMI,如 中所述创建 Amazon EBS-backed AMI 该 AMI 从实例继承增强联网
enaSupport
属性。因此,您可以使用此 AMI 启动默认情况下启用了增强联网功能的其他实例。 -
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances(AWS CLI)、Start-EC2Instance(AWS Tools for Windows PowerShell)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中启动该实例,以便使实例状态保持同步。
在 Ubuntu 上启用增强联网(由实例存储支持的实例)
按照上述过程操作,直到您停止实例的步骤。按照创建实例存储支持的 AMI中所述创建新 AMI,确保在注册 AMI 时启用增强联网属性。
-
register-image (AWS CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (AWS Tools for Windows PowerShell)
Register-EC2Image -EnaSupport $true
...
Red Hat Enterprise Linux、SUSE Linux Enterprise Server 和 CentOS 的最新 AMI 包含使用了 ENA 的增强联网所需的内核驱动程序,并启用了 ENA 支持。因此,如果使用最新的 AMI 在支持的实例类型上启动实例,则已为您的实例启用增强联网。有关更多信息,请参阅测试是否启用了增强联网功能。
下面的过程提供了在 Amazon Linux AMI 或 Ubuntu 之外的 Linux 发行版上启用增强联网的一般步骤。有关更多信息(如命令的详细语法、文件位置或包和工具支持),请参阅您的 Linux 发行版的文档。
对 Linux 启用增强联网
-
连接到您的实例。
-
从 GitHub 的以下网址克隆实例上的
ena
内核驱动程序源代码:https://github.com/amzn/amzn-drivers。(默认情况下,SUSE Linux Enterprise Server 12 SP2 及更高版本包含 ENA 2.02,因此不需要下载和编译 ENA 驱动程序。对于 SUSE Linux Enterprise Server 12 SP2 及更高版本,您应该提交一个请求,将您想要的驱动程序版本添加到存储内核中)。 git clone https://github.com/amzn/amzn-drivers
-
在实例上编译并安装
ena
内核驱动程序。这些步骤取决于 Linux 发行版。有关在 Red Hat Enterprise Linux 上编译内核驱动程序的更多信息,请参阅如何在运行 RHEL 的 Amazon EC2 实例上安装并激活最新的 ENA 驱动程序,以便获得增强型网络支持? -
运行 sudo depmod 命令来更新内核驱动程序依赖项。
-
在实例上更新
initramfs
,确保在启动时加载新内核驱动程序。例如,如果您的发行版支持 dracut,则可使用以下命令。dracut -f -v
-
确定您的系统是否默认使用可预测的网络接口名称。使用 systemd 或 udev 版本 197 或更高版本的系统可以重命名以太网设备,它们不保证单个网络接口将命名为
eth0
。此行为可能导致连接到实例时出现问题。要获取更多信息并查看其他配置选项,请参阅 freedesktop.org 网站上的可预测的网络接口名称。 -
您可以使用以下命令在基于 RPM 的系统上检查 systemd 或 udev 版本。
rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+'
systemd-208-11.el7_0.2.x86_64
在以上 Red Hat Enterprise Linux 7 示例中,systemd 版本是 208,因此必须禁用可预测的网络接口名称。
-
通过将
net.ifnames=0
选项添加到GRUB_CMDLINE_LINUX
中的/etc/default/grub
行,可禁用可预测的网络接口名称。sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
-
重新构建 grub 配置文件。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
-
[由 EBS 支持的实例] 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances(AWS CLI)、Stop-EC2Instance(AWS Tools for Windows PowerShell)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中停止该实例,以便使实例状态保持同步。
[实例存储支持的实例] 您无法停止实例来修改属性。请执行此过程:在 Linux 上启用增强联网(由实例存储支持的实例)。
-
使用以下任一命令从本地计算机启用增强联网
enaSupport
属性:-
modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute(适用于 Windows PowerShell 的工具)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(可选) 从实例创建 AMI,如 中所述创建 Amazon EBS-backed AMI 该 AMI 从实例继承增强联网
enaSupport
属性。因此,您可以使用此 AMI 启动默认情况下启用了增强联网功能的其他实例。如果您的实例操作系统包含
/etc/udev/rules.d/70-persistent-net.rules
文件,则必须在创建 AMI 之前将其删除。此文件包含原始实例的以太网适配器 MAC 地址。如果其他实例使用此文件启动,操作系统将找不到设备,eth0
会失败,从而导致启动问题。此文件将在下次启动过程中重新生成,从 AMI 启动的任意实例都会创建这个文件的自有版本。 -
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances(AWS CLI)、Start-EC2Instance(AWS Tools for Windows PowerShell)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中启动该实例,以便使实例状态保持同步。
-
(可选)连接到实例并验证是否安装了内核驱动程序。
如果您在启用增强联网之后无法连接到实例,请参阅排查 Linux 上 ENA 内核驱动程序的问题。
在 Linux 上启用增强联网(由实例存储支持的实例)
按照上述过程操作,直到您停止实例的步骤。按照创建实例存储支持的 AMI中所述创建新 AMI,确保在注册 AMI 时启用增强联网属性。
-
register-image (AWS CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (AWS Tools for Windows PowerShell)
Register-EC2Image -EnaSupport
...
此方法仅用于测试和反馈目的。它不供生产部署使用。有关生产部署,请参阅Ubuntu。
重要
使用 DKMS 可避免您的订阅的支持协议。不得将其用于生产部署。
在 Ubuntu 上启用 ENA 增强联网 (EBS 支持的实例)
-
按照Ubuntu中的步骤 1 和 2 操作。
-
安装
build-essential
程序包来编译内核驱动程序和dkms
程序包,这样每次更新内核时都会重建ena
内核驱动程序。ubuntu:~$
sudo apt-get install -y build-essential dkms
-
从 GitHub 的以下网址克隆实例上的
ena
内核驱动程序源:https://github.com/amzn/amzn-drivers。 ubuntu:~$
git clone https://github.com/amzn/amzn-drivers
-
将
amzn-drivers
包移动到/usr/src/
目录,以便 DKMS 可以在每次内核更新中找到并构建该模块。将源代码的版本号 (您可在发行说明中找到当前版本号) 附加到目录名称。例如,版本1.0.0
显示在以下示例中。ubuntu:~$
sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
-
使用以下值创建 DKMS 配置文件(替代您的
ena
版本)。创建 文件。
ubuntu:~$
sudo touch /usr/src/amzn-drivers-1.0.0/dkms.conf
编辑文件并添加以下值。
ubuntu:~$
sudo vim /usr/src/amzn-drivers-1.0.0/dkms.conf PACKAGE_NAME="ena" PACKAGE_VERSION="1.0.0" CLEAN="make -C kernel/linux/ena clean" MAKE="make -C kernel/linux/ena/ BUILD_KERNEL=${kernelver}" BUILT_MODULE_NAME[0]="ena" BUILT_MODULE_LOCATION="kernel/linux/ena" DEST_MODULE_LOCATION[0]="/updates" DEST_MODULE_NAME[0]="ena" AUTOINSTALL="yes"
-
使用 DKMS 在实例上添加、生成和安装
ena
内核驱动程序。将内核驱动程序添加到 DKMS。
ubuntu:~$
sudo dkms add -m amzn-drivers -v 1.0.0
使用 dkms 命令生成内核驱动程序。
ubuntu:~$
sudo dkms build -m amzn-drivers -v 1.0.0
使用 dkms 安装内核驱动程序。
ubuntu:~$
sudo dkms install -m amzn-drivers -v 1.0.0
-
重新生成
initramfs
,以便在启动时加载正确的内核驱动程序。ubuntu:~$
sudo update-initramfs -u -k all
-
使用测试是否启用了增强联网功能中的 modinfo ena 命令验证是否安装了
ena
内核驱动器。ubuntu:~$
modinfo ena filename: /lib/modules/3.13.0-74-generic/updates/dkms/ena.ko version: 1.0.0 license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 9693C876C54CA64AE48F0CA alias: pci:v00001D0Fd0000EC21sv*sd*bc*sc*i* alias: pci:v00001D0Fd0000EC20sv*sd*bc*sc*i* alias: pci:v00001D0Fd00001EC2sv*sd*bc*sc*i* alias: pci:v00001D0Fd00000EC2sv*sd*bc*sc*i* depends: vermagic: 3.13.0-74-generic SMP mod_unload modversions parm: debug:Debug level (0=none,...,16=all) (int) parm: push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable) 0 - Automatically choose according to device capability (default) 1 - Don't push anything to device memory 3 - Push descriptors and header buffer to device memory (int) parm: enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int) parm: enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int) parm: numa_node_override_array:Numa node override map (array of int) parm: numa_node_override:Enable/Disable numa node override (0=disable) (int)
-
继续执行Ubuntu中的步骤 3。
如果您启动了您的实例且该实例未启用增强联网,则必须下载所需的网络适配器驱动程序并将其安装到您的实例上,然后设置 enaSupport
实例属性以激活增强联网。
启用增强联网
-
连接到您的实例并以本地管理员身份登录。
-
[仅限 Windows Server 2016 和 2019] 运行以下 EC2Launch PowerShell 脚本,以便在安装此驱动程序后配置实例。
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
-
从实例安装驱动程序,如下所示:
-
将最新驱动程序下载
到实例。 -
提取 zip 存档。
-
通过运行
install.ps1
PowerShell 脚本安装驱动程序。注意
如果您收到了执行策略错误,请将策略设置为
Unrestricted
(默认情况下设置为Restricted
或RemoteSigned
)。在命令行中,运行Set-ExecutionPolicy -ExecutionPolicy Unrestricted
,然后再次运行install.ps1
PowerShell 脚本。
-
-
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances(AWS CLI/AWS CloudShell)、Stop-EC2Instance(AWS Tools for Windows PowerShell)。如果您的实例由 AWS OpsWorks 管理,则应在 AWS OpsWorks 控制台中停止该实例,以便使实例状态保持同步。
-
在您的实例上启用 ENA 支持,如下所示:
-
在您的本地计算机上,通过运行以下命令之一来检查实例的 EC2 实例 ENA 支持属性。如果未启用属性,则输出将为“[]”或为空。默认情况下,
EnaSupport
设置为false
。-
describe-instances (AWS CLI/AWS CloudShell)
aws ec2 describe-instances --instance-ids
instance_id
--query "Reservations[].Instances[].EnaSupport" -
Get-EC2Instance(适用于 Windows PowerShell 的工具)
(Get-EC2Instance -InstanceId
instance-id
).Instances.EnaSupport
-
-
要启用 ENA 支持,请运行以下命令之一:
-
modify-instance-attribute (AWS CLI/AWS CloudShell)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute (AWS Tools for Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId
instance_id
-EnaSupport $true
如果在重新启动实例时遇到问题,也可以使用以下命令之一禁用 ENA 支持:
-
modify-instance-attribute (AWS CLI/AWS CloudShell)
aws ec2 modify-instance-attribute --instance-id
instance_id
--no-ena-support -
Edit-EC2InstanceAttribute (AWS Tools for Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId
instance_id
-EnaSupport $false
-
-
如前所示,使用
true
或 describe-instances,验证属性是否已设置为 Get-EC2Instance。现在,您应看到以下输出:[ true ]
-
-
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances(AWS CLI/AWS CloudShell)、Start-EC2Instance(AWS Tools for Windows PowerShell)。如果您的实例由 AWS OpsWorks 管理,您应使用 AWS OpsWorks 控制台启动该实例,以便实例状态保持同步。
-
在实例上,验证 ENA 驱动程序是否已如下所示安装并且启用:
-
右键单击网络图标,然后选择 Open Network and Sharing Center。
-
选择以太网适配器 (例如 Ethernet 2)。
-
选择 Details。对于 Network Connection Details,检查 Description 是否为 Amazon Elastic Network Adapter。
-
-
(可选) 从实例创建 AMI。该 AMI 继承实例的
enaSupport
属性。因此,您可以使用该 AMI 来启动另一个默认启用 ENA 的实例。