Habilitar redes mejoradas con Elastic Network Adapter (ENA) en las instancias de Linux - Amazon Elastic Compute Cloud

Habilitar redes mejoradas con Elastic Network Adapter (ENA) en las instancias de Linux

Amazon EC2 proporciona funcionalidades de redes mejoradas a través del Elastic Network Adapter (ENA). Para utilizar la conexión en red mejorada, debe instalar el módulo ENA requerido y habilitar la compatibilidad con ENA.

Requisitos

Para prepararse para las redes mejoradas con ENA, configure la instancia de la siguiente manera:

  • Inicie una instancia creada en el AWS Nitro System.

  • Lance una instancia con una versión del kernel de Linux y una distribución admitidas, de manera que la red mejorada de ENA esté habilitada de forma automática para su instancia. Para obtener más información, consulte ENA Linux Kernel Driver Release Notes.

  • Asegúrese de que la instancia tenga conexión a Internet.

  • Utilice AWS CloudShell en la AWS Management Console, o bien instale y configure la AWS CLI o las AWS Tools for Windows PowerShell en cualquier computadora que elija, preferentemente en su equipo de escritorio o portátil local. Para obtener más información, consulte Acceder a Amazon EC2 o la Guía del usuario de AWS CloudShell. Las redes mejoradas no se pueden administrar desde la consola de Amazon EC2.

  • Si tiene datos importantes en la instancia que desea conservar, debería realizar ahora una copia de seguridad de esos datos creando una AMI desde la instancia. La actualización del kernel y los módulos del kernel, además de habilitar el atributo enaSupport, puede hacer que las instancias o sistemas operativos incompatibles sean inaccesibles. Si tiene una copia de seguridad reciente y esto ocurre, los datos se conservarán.

Rendimiento de red mejorado

La documentación siguiente proporciona un resumen del rendimiento de la red para los tipos de instancia que admiten redes mejoradas ENA:

Probar si las redes mejoradas están habilitadas

Las siguientes AMI incluyen el módulo ENA requerido y tienen habilitada la compatibilidad con ENA:

  • AL2023

  • Amazon Linux 2

  • AMI de Amazon Linux 2018.03 y posterior

  • Ubuntu 14.04 o versiones posteriores con el kernel linux-aws

    nota

    Los tipos de instancias basados en AWS Graviton requieren Ubuntu 18.04 o versiones posteriores con kernel linux-aws

  • Red Hat Enterprise Linux 7.4 o versiones posteriores

  • SUSE Linux Enterprise Server 12 SP2 o versiones posteriores

  • CentOS 7.4.1708 o versiones posteriores

  • FreeBSD 11.1 o versiones posteriores

  • Debian GNU/Linux 9 o versiones posteriores

Para probar si la conexión en red mejorada ya está habilitada, compruebe que el módulo ena esté instalado en la instancia y que se haya establecido el atributo enaSupport. Si la instancia cumple estas dos condiciones, el comando ethtool -i ethn debería mostrar que el módulo se está utilizando en la interfaz de red.

Módulo de kernel (ena)

Para comprobar si el módulo ena está instalado, utilice el comando modinfo como se indica en el siguiente ejemplo.

[ec2-user ~]$ modinfo ena filename: /lib/modules/4.14.33-59.37.amzn2.x86_64/kernel/drivers/amazon/net/ena/ena.ko version: 1.5.0g license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 692C7C68B8A9001CB3F31D0 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: retpoline: Y intree: Y name: ena ...

En el caso de Amazon Linux anterior, el módulo ena está instalado.

ubuntu:~$ modinfo ena ERROR: modinfo: could not find module ena

En la instancia de Ubuntu anterior, el módulo no está instalado, por lo que debe instalarlo antes de nada. Para obtener más información, consulte Habilitar redes mejoradas en Ubuntu.

Atributo de instancia (enaSupport)

Para comprobar si una instancia tiene establecido el atributo enaSupport de las redes mejoradas, utilice uno de los siguientes comandos. Si el atributo está establecido, la respuesta es true.

  • describe-instances (AWS CLI/AWS CloudShell)

    aws ec2 describe-instances --instance-ids instance_id --query "Reservations[].Instances[].EnaSupport"
  • Get-EC2Instance (Herramientas para Windows PowerShell)

    (Get-EC2Instance -InstanceId instance-id).Instances.EnaSupport
Atributo de imagen (enaSupport)

Para comprobar si una AMI tiene establecido el atributo enaSupport de las redes mejoradas, utilice uno de los siguientes comandos. Si el atributo está establecido, la respuesta es true.

  • describe-images (AWS CLI/AWS CloudShell)

    aws ec2 describe-images --image-id ami_id --query "Images[].EnaSupport"
  • Get-EC2Image (Herramientas para Windows PowerShell)

    (Get-EC2Image -ImageId ami_id).EnaSupport
Controlador de la interfaz de red

Utilice el siguiente comando para verificar si el módulo ena se está utilizando en una interfaz en particular, sustituyendo el nombre de la interfaz que quiere comprobar. Si utiliza una sola interfaz (predeterminada), esta será eth0. Si el sistema operativo admite nombres de red predecibles, podría ser un nombre como ens5.

En el ejemplo siguiente, el módulo ena no está cargado, ya que el controlador indicado es 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

En este ejemplo, el módulo ena está cargado y tiene la versión mínima recomendada. Esta instancia tiene las redes mejoradas configuradas correctamente.

[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

Habilitar las redes mejoradas en Amazon Linux AMI

Amazon Linux 2 y las últimas versiones de la Amazon Linux AMI incluyen el módulo requerido para mejorar la conexión en red con ENA instalado y tienen habilitada la compatibilidad con ENA. Por lo tanto, si inicia una instancia con una versión HVM de Amazon Linux en un tipo de instancia admitido, las redes mejoradas ya están habilitadas para su instancia. Para obtener más información, consulte Probar si las redes mejoradas están habilitadas.

Si ha iniciado la instancia utilizando una AMI de Amazon Linux más antigua y no tiene habilitadas aún las redes mejoradas, utilice el siguiente procedimiento para habilitarlas.

Para habilitar las redes mejoradas en Amazon Linux AMI
  1. Conéctese a la instancia.

  2. Desde la instancia, ejecute el siguiente comando para actualizarla con el kernel y los módulos de kernel más recientes, incluido ena:

    [ec2-user ~]$ sudo yum update
  3. Desde su equipo local, reinicie la instancia mediante la consola de Amazon EC2 o uno de los siguientes comandos: reboot-instances (AWS CLI), Restart-EC2Instance (AWS Tools for Windows PowerShell).

  4. Conéctese de nuevo a la instancia y compruebe si el módulo ena está instalado y si tiene la versión mínima recomendada utilizando el comando modinfo ena de Probar si las redes mejoradas están habilitadas.

  5. [instancia basada en EBS] Desde su equipo local, detenga la instancia mediante la consola de Amazon EC2 o uno de los siguientes comandos: stop-instances (AWS CLI), Stop-EC2Instance (AWS Tools for Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe detenerla en la consola de AWS OpsWorks para mantener su estado sincronizado.

    [Instancia respaldada por el almacén de instancias] No puede detener la instancia para modificar el atributo. En lugar de ello, vaya a este procedimiento: Para habilitar las redes mejoradas en Amazon Linux AMI (instancias con el respaldado del almacén de instancias).

  6. En el equipo local, habilite el atributo de redes mejoradas con uno de los siguientes comandos:

  7. (Opcional) Cree una AMI desde la instancia, tal y como se explica en Crear una AMI de Linux con respaldo Amazon EBS. La AMI hereda el atributo de redes mejoradas enaSupport de la instancia. Por lo tanto, puede utilizar esta AMI para iniciar otra instancia con las redes mejoradas habilitadas de manera predeterminada.

  8. Desde su equipo local, inicie la instancia mediante la consola de Amazon EC2 o uno de los siguientes comandos: start-instances (AWS CLI), Start-EC2Instance (AWS Tools for Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe iniciarla en la consola de AWS OpsWorks para mantener su estado sincronizado.

  9. Conéctese a la instancia y compruebe que el módulo ena está instalado y cargado en la interfaz de red utilizando el comando ethtool -i ethn command de Probar si las redes mejoradas están habilitadas.

    Si no puede conectarse a la instancia después de habilitar las redes mejoradas, consulte Solucionar problemas de Elastic Network Adapter (ENA).

Para habilitar las redes mejoradas en Amazon Linux AMI (instancias con el respaldado del almacén de instancias)

Siga el procedimiento anterior hasta el paso en el que detiene la instancia. Cree una nueva AMI tal como se describe en Crear una AMI de Linux con respaldo en el almacén de instancias, asegurándose de habilitar el atributo de redes mejoradas cuando registre la AMI.

  • register-image (AWS CLI)

    aws ec2 register-image --ena-support ...
  • Register-EC2Image (AWS Tools for Windows PowerShell)

    Register-EC2Image -EnaSupport $true ...

Habilitar redes mejoradas en Ubuntu

Las últimas AMI de Ubuntu HVM incluyen el módulo requerido para mejorar la conexión en red con ENA instalado y tienen habilitada la compatibilidad con ENA. Por lo tanto, si inicia una instancia con la AMI HVM de Ubuntu más reciente en un tipo de instancia admitido, las redes mejoradas ya están habilitadas para su instancia. Para obtener más información, consulte Probar si las redes mejoradas están habilitadas.

Si ha iniciado la instancia utilizando una AMI más antigua que no tiene habilitada aún la conexión en red mejorada, puede instalar el paquete del kernel linux-aws para obtener los controladores de red mejorada más recientes y actualizar el atributo necesario.

Para instalar el paquete del kernel de linux-aws (Ubuntu 16.04 o versiones posteriores)

Ubuntu 16.04 y 18.04 se distribuyen con el kernel personalizado de Ubuntu (paquete del kernel de linux-aws). Para usar un kernel diferente, contacte con AWS Support.

Para instalar el paquete del kernel de linux-aws (Ubuntu Trusty 14.04)
  1. Conéctese a la instancia.

  2. Actualice la caché del paquete y los paquetes.

    ubuntu:~$ sudo apt-get update && sudo apt-get upgrade -y linux-aws
    importante

    Si, durante el proceso de actualización, se le pide que instale grub, use /dev/xvda para instalar grub y luego elija conservar la versión actual de /boot/grub/menu.lst.

  3. [instancia basada en EBS] Desde su equipo local, detenga la instancia mediante la consola de Amazon EC2 o uno de los siguientes comandos: stop-instances (AWS CLI), Stop-EC2Instance (AWS Tools for Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe detenerla en la consola de AWS OpsWorks para mantener su estado sincronizado.

    [Instancia respaldada por el almacén de instancias] No puede detener la instancia para modificar el atributo. En lugar de ello, vaya a este procedimiento: Para habilitar las redes mejoradas en Ubuntu (instancias con respaldo en el almacén de instancias).

  4. En el equipo local, habilite el atributo de redes mejoradas con uno de los siguientes comandos:

  5. (Opcional) Cree una AMI desde la instancia, tal y como se explica en Crear una AMI de Linux con respaldo Amazon EBS. La AMI hereda el atributo de redes mejoradas enaSupport de la instancia. Por lo tanto, puede utilizar esta AMI para iniciar otra instancia con las redes mejoradas habilitadas de manera predeterminada.

  6. Desde su equipo local, inicie la instancia mediante la consola de Amazon EC2 o uno de los siguientes comandos: start-instances (AWS CLI), Start-EC2Instance (AWS Tools for Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe iniciarla en la consola de AWS OpsWorks para mantener su estado sincronizado.

Para habilitar las redes mejoradas en Ubuntu (instancias con respaldo en el almacén de instancias)

Siga el procedimiento anterior hasta el paso en el que detiene la instancia. Cree una nueva AMI tal como se describe en Crear una AMI de Linux con respaldo en el almacén de instancias, asegurándose de habilitar el atributo de redes mejoradas cuando registre la AMI.

  • register-image (AWS CLI)

    aws ec2 register-image --ena-support ...
  • Register-EC2Image (AWS Tools for Windows PowerShell)

    Register-EC2Image -EnaSupport $true ...

Habilitar redes mejoradas en Linux

Las últimas AMI de Red Hat Enterprise Linux, SUSE Linux Enterprise Server y CentOS incluyen el módulo requerido para mejorar la conexión en red con ENA y tienen habilitada la compatibilidad con ENA. Por lo tanto, si inicia una instancia con la AMI más reciente en un tipo de instancia admitido, la conexión en red mejorada ya está habilitada para su instancia. Para obtener más información, consulte Probar si las redes mejoradas están habilitadas.

En el siguiente procedimiento, se proporcionan los pasos para habilitar la conexión en red mejorada con ENA en una distribución de Linux distinta de Amazon Linux AMI o Ubuntu. Para obtener más información, como la sintaxis detallada de los comandos, las ubicaciones de los archivos o la compatibilidad con paquetes y herramientas, consulte la documentación de su distribución de Linux.

Para habilitar las redes mejoradas en Linux
  1. Conéctese a la instancia.

  2. Clone el código fuente para el módulo ena en la instancia desde GitHub en https://github.com/amzn/amzn-drivers. (SUSE Linux Enterprise Server 12 SP2 y versiones posteriores incluyen ENA 2.02 de forma predeterminada, por lo que no es necesario descargar ni compilar el controlador de ENA. Para SUSE Linux Enterprise Server 12 SP2 y versiones posteriores, debe tramitar una solicitud para agregar la versión del controlador que desee al kernel existente).

    git clone https://github.com/amzn/amzn-drivers
  3. Compile e instale el módulo ena en la instancia. Estos pasos dependen de la distribución Linux. Para obtener más información acerca de cómo compilar el módulo en Red Hat Enterprise Linux, consulte el artículo del Centro de conocimientos de AWS.

  4. Ejecute el comando sudo depmod para actualizar las dependencias de módulos.

  5. Actualice initramfs en la instancia para asegurarse de que el nuevo módulo se carga en el momento del arranque. Por ejemplo, si su distribución admite dracut, puede utilizar el comando siguiente.

    dracut -f -v
  6. Determine si el sistema utiliza de manera predeterminada nombres de interfaz de red predecibles. Los sistemas que utilizan las versiones 197 o posteriores de systemd o udev pueden cambiar el nombre de los dispositivos Ethernet y no garantizan que haya una sola interfaz de red denominada eth0. Este comportamiento puede producir problemas al conectarse a la instancia. Para obtener más información y para ver otras opciones de configuración, consulte Predictable Network Interface Names en el sitio web de freedesktop.org.

    1. Puede utilizar el siguiente comando para comprobar las versiones de systemd o udev en los sistemas basados en RPM.

      rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+' systemd-208-11.el7_0.2.x86_64

      En el ejemplo anterior de Red Hat Enterprise Linux 7, la versión de systemd es la 208, por lo que se deben deshabilitar los nombres de interfaz de red predecibles.

    2. Para deshabilitar los nombres de interfaz de red predecibles, añada la opción net.ifnames=0 a la línea GRUB_CMDLINE_LINUX en /etc/default/grub.

      sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
    3. Vuelva a compilar el archivo de configuración de Grub.

      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  7. [instancia basada en EBS] Desde su equipo local, detenga la instancia mediante la consola de Amazon EC2 o uno de los siguientes comandos: stop-instances (AWS CLI), Stop-EC2Instance (AWS Tools for Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe detenerla en la consola de AWS OpsWorks para mantener su estado sincronizado.

    [Instancia respaldada por el almacén de instancias] No puede detener la instancia para modificar el atributo. En lugar de ello, vaya a este procedimiento: Para habilitar las redes mejoradas en Linux (instancias respaldadas por el almacén de instancias).

  8. En el equipo local, habilite el atributo enaSupport de redes mejoradas con uno de los siguientes comandos:

  9. (Opcional) Cree una AMI desde la instancia, tal y como se explica en Crear una AMI de Linux con respaldo Amazon EBS . La AMI hereda el atributo de redes mejoradas enaSupport de la instancia. Por lo tanto, puede utilizar esta AMI para iniciar otra instancia con las redes mejoradas habilitadas de manera predeterminada.

    importante

    Si el sistema operativo de la instancia contiene un archivo /etc/udev/rules.d/70-persistent-net.rules, debe eliminarlo antes de crear la AMI. Este archivo contiene la dirección MAC del adaptador Ethernet de la instancia original. Si otra instancia arranca con este archivo, el sistema operativo no será capaz de encontrar el dispositivo y eth0 producirá un error, lo que causará problemas de arranque. Este archivo se regenera en el siguiente ciclo de arranque y todas las instancias que se inician desde la AMI crean su propia versión del archivo.

  10. Desde su equipo local, inicie la instancia mediante la consola de Amazon EC2 o uno de los siguientes comandos: start-instances (AWS CLI), Start-EC2Instance (AWS Tools for Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe iniciarla en la consola de AWS OpsWorks para mantener su estado sincronizado.

  11. (Opcional) Conéctese a la instancia y compruebe si el módulo está instalado.

    Si no puede conectarse a la instancia después de habilitar las redes mejoradas, consulte Solucionar problemas de Elastic Network Adapter (ENA).

Para habilitar las redes mejoradas en Linux (instancias respaldadas por el almacén de instancias)

Siga el procedimiento anterior hasta el paso en el que detiene la instancia. Cree una nueva AMI tal como se describe en Crear una AMI de Linux con respaldo en el almacén de instancias, asegurándose de habilitar el atributo de redes mejoradas cuando registre la AMI.

Habilitar redes mejoradas en Ubuntu con DKMS

Este método sirve únicamente para realizar pruebas y enviar comentarios. No se ha concebido para su uso en implementaciones de producción. Para las implementaciones de producción, consulte Habilitar redes mejoradas en Ubuntu.

importante

El uso de DKMS invalida el acuerdo de soporte técnico de su suscripción. No se debe usar para implementaciones de producción.

Para habilitar las redes mejoradas con ENA en Ubuntu (instancias con respaldo de EBS)
  1. Siga los pasos 1 y 2 de Habilitar redes mejoradas en Ubuntu.

  2. Instale los paquetes build-essential para compilar el módulo del kernel y el paquete dkms para volver a compilar el módulo ena cada vez que se actualiza el kernel.

    ubuntu:~$ sudo apt-get install -y build-essential dkms
  3. Clone el código fuente del módulo ena en la instancia desde GitHub en https://github.com/amzn/amzn-drivers.

    ubuntu:~$ git clone https://github.com/amzn/amzn-drivers
  4. Mueva el paquete amzn-drivers al directorio /usr/src/ para que DKMS pueda encontrarlo y compilarlo en cada actualización del kernel. Añada el número de versión (lo encontrará en las notas de la versión) del código fuente al nombre del directorio. Por ejemplo, en el ejemplo siguiente se muestra la versión 1.0.0.

    ubuntu:~$ sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
  5. Cree el archivo de configuración DKMS con los siguientes valores, sustituyendo su versión de ena.

    Cree el archivo.

    ubuntu:~$ sudo touch /usr/src/amzn-drivers-1.0.0/dkms.conf

    Edite el archivo y añada los valores siguientes.

    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"
  6. Añada, compile e instale el módulo ena en su instancia utilizando DKMS.

    Añada el módulo a DKMS.

    ubuntu:~$ sudo dkms add -m amzn-drivers -v 1.0.0

    Compile el módulo utilizando el comando dkms.

    ubuntu:~$ sudo dkms build -m amzn-drivers -v 1.0.0

    Instale el módulo utilizando dkms.

    ubuntu:~$ sudo dkms install -m amzn-drivers -v 1.0.0
  7. Vuelva a compilar initramfs para que el módulo correcto se cargue en el momento del arranque.

    ubuntu:~$ sudo update-initramfs -u -k all
  8. Compruebe si el módulo ena está instalado utilizando el comando modinfo ena desde Probar si las redes mejoradas están habilitadas.

    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)
  9. Continúe con el paso 3 de Habilitar redes mejoradas en Ubuntu.

Notas de versión del controlador

Para obtener información acerca de las versiones del controlador de ENA de Linux, consulte las notas de la versión del controlador del kernel de ENA de Linux.

Solución de problemas

Para obtener información sobre la resolución de problemas, consulte Solucionar problemas de Elastic Network Adapter (ENA).