Compartir a través de


Tutorial: Creación de una jerarquía de dispositivos IoT Edge mediante IoT Edge para Linux en Windows

Se aplica a:IoT Edge 1.5 checkmark IoT Edge 1.5

Importante

IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS alcanzó el final del ciclo de vida el 12 de noviembre de 2024. Si usa una versión anterior, consulte Update IoT Edge.

Implemente Azure IoT Edge nodos en redes organizadas en capas jerárquicas. Cada capa de una jerarquía es un dispositivo de puerta de enlace que controla los mensajes y las solicitudes de los dispositivos de la capa que se encuentra debajo. Esta configuración también se conoce como perímetro anidado.

Estructura una jerarquía de dispositivos para que solo la capa superior tenga conectividad con la nube y las capas inferiores solo se pueden comunicar con capas norte y sur adyacentes. Estas capas de red constituyen la base de la mayoría de las redes industriales que siguen la norma ISA-95.

En este tutorial se muestra cómo crear una jerarquía de dispositivos de IoT Edge mediante IoT Edge para Linux en Windows, implementar IoT Edge contenedores en tiempo de ejecución en los dispositivos y configurar los dispositivos localmente. En este tutorial, realiza las siguientes tareas:

  • Cree y defina las relaciones en una jerarquía de dispositivos IoT Edge.
  • Configure el entorno de ejecución de IoT Edge en los dispositivos de la jerarquía.
  • Instalar certificados coherentes en la jerarquía de dispositivos.
  • Agregar cargas de trabajo a los dispositivos de la jerarquía.
  • Use el módulo proxy de API IoT Edge para enrutar de forma segura el tráfico HTTP a través de un único puerto desde los dispositivos de nivel inferior.

Sugerencia

En este tutorial se incluye una combinación de pasos manuales y automatizados para proporcionar una presentación de las características integradas de IoT Edge.

Si desea tener una visión completamente automatizada de la configuración de una jerarquía de dispositivos de IoT Edge, puede guiar su propio script basado en el ejemplo de Azure IoT Edge para IoT Industrial. Este escenario con script implementa Azure máquinas virtuales como dispositivos preconfigurados para simular un entorno de fábrica.

Si desea ver en detalle los pasos manuales para crear y administrar una jerarquía de dispositivos IoT Edge, consulte la guía paso a paso sobre jerarquías de puerta de enlace de dispositivos IoT Edge.

En este tutorial, se definen los siguientes niveles de red:

  • Capa superior: los dispositivos IoT Edge de esta capa pueden conectarse directamente a la nube.

  • Capas inferiores: dispositivos IoT Edge en capas inferiores a la capa superior no se pueden conectar directamente a la nube. Deben pasar por uno o varios dispositivos intermedios IoT Edge para enviar y recibir datos.

En este tutorial se usa una jerarquía de dos dispositivos para simplificar. El dispositivo de la capa superior representa un dispositivo en la capa superior de la jerarquía, que se puede conectar directamente a la nube. Este dispositivo se denomina dispositivo primario. El dispositivo de la capa inferior representa un dispositivo en la capa inferior de la jerarquía que no se puede conectar directamente a la nube. Agregue más dispositivos para representar el entorno de producción según sea necesario. Los dispositivos en capas inferiores se denominan dispositivos secundarios.

Estructura de la jerarquía del tutorial, que contiene dos dispositivos: el de nivel superior y el de nivel inferior

Nota:

Un dispositivo secundario puede ser un dispositivo de bajada o un dispositivo de puerta de enlace en una topología anidada.

Requisitos previos

Para crear una jerarquía de dispositivos IoT Edge, necesita lo siguiente:

  • Un shell de Bash en Azure Cloud Shell utilizando Azure CLI v2.3.1 con la extensión de Azure IoT v0.10.6 o superior instalada. En este tutorial se usa Azure Cloud Shell. Para comprobar las versiones actuales de los módulos y extensiones de Azure CLI, ejecute az version.
  • Dos dispositivos Windows que ejecutan Azure IoT Edge para Linux en Windows. Implemente ambos dispositivos mediante un conmutador virtual externo.

Sugerencia

Puede usar un interruptor virtual interno o interruptor virtual predeterminado si el reenvío de puertos está configurado en el sistema operativo del host de Windows. Pero para simplificar este tutorial, use un conmutador virtual externo para ambos dispositivos y conéctelos a la misma red externa.

Para obtener más información sobre la configuración de red, consulte Azure IoT Edge para Linux en Windows: configuración de redes y Configuración de redes para Azure IoT Edge para Linux en Windows.

Si necesita configurar los dispositivos EFLOW en una red perimetral, consulte Cómo configurar Azure IoT Edge para Linux en Windows Industrial IoT & Configuración de DMZ.

  • Una cuenta de Azure con una suscripción válida. Si no tiene una suscripción Azure, cree una cuenta free antes de comenzar.
  • Un nivel gratuito o estándar IoT Hub en Azure.
  • Asegúrese de que los puertos siguientes estén abiertos para todos los dispositivos excepto el dispositivo de capa más bajo: 443, 5671 y 8883:
    • 443: se usa entre centros perimetrales primarios y secundarios para las llamadas API REST y para extraer imágenes de contenedor de Docker.
    • 5671, 8883: se usan para AMQP y MQTT.

Sugerencia

Para obtener más información sobre el firewall de máquinas virtuales EFLOW, consulte IoT Edge para Linux en Windows: seguridad.

Creación de la jerarquía de dispositivos IoT Edge

Los dispositivos IoT Edge componen las capas de la jerarquía. En este tutorial se crea una jerarquía de dos dispositivos IoT Edge: el dispositivo de capa top y el dispositivo de capa lower. Puede crear más dispositivos de bajada, según sea necesario.

Para crear y configurar la jerarquía de dispositivos de IoT Edge, use el comando az iot edge devices create Azure CLI. Este comando simplifica la configuración de la jerarquía gracias a la automatización y la condensación de varios pasos:

  • Crea dispositivos en tu centro de IoT
  • Establecimiento de las relaciones primario-secundario para autorizar la comunicación entre los dispositivos
  • Aplicación del manifiesto de implementación a cada dispositivo
  • Generación de una cadena de certificados para cada dispositivo con el fin de establecer una comunicación segura entre ellos
  • Generación de archivos de configuración para cada dispositivo

Creación de la configuración de dispositivos

Cree un grupo de dispositivos perimetrales anidados que contenga un dispositivo primario con un dispositivo secundario. En este tutorial, se usan manifiestos de implementación de ejemplo básicos. Para ver otros ejemplos de escenarios, revise las plantillas de ejemplo configuration.

  1. Antes de usar el comando az iot edge devices create, debe definir el manifiesto de implementación para los dispositivos de capa superior e inferior. Descargue el archivo de ejemplo deploymentTopLayer.json en el equipo local.

    El manifiesto de implementación de dispositivos de nivel superior define el módulo proxy de API IoT Edge y declara el route desde el dispositivo de capa inferior hasta IoT Hub.

  2. Descargue el archivo de ejemplo deploymentLowerLayer.json en el equipo local.

    El manifiesto de implementación de dispositivos de capa inferior incluye el módulo de sensor de temperatura simulado y declara la ruta al dispositivo de capa superior. Puede ver en la sección systemModules que los módulos en tiempo de ejecución están establecidos para extraer de $upstream:443, en lugar de mcr.microsoft.com. El dispositivo de capa inferior envía solicitudes de imágenes de Docker al módulo proxy de API de IoT Edge en el puerto 443, ya que no puede extraer directamente las imágenes de la nube. El otro módulo implementado en el dispositivo de capa inferior, el módulo Simulated Temperature Sensor (Sensor de temperatura simulado), también realiza su solicitud de imágenes a .

    Para obtener más información sobre cómo crear un manifiesto de implementación de capa inferior, consulte Connect Azure IoT Edge dispositivos para crear una jerarquía.

  3. En Azure Cloud Shell, utilice el comando az iot edge devices create de Azure CLI para crear dispositivos en IoT Hub y paquetes de configuración para cada dispositivo de la jerarquía. Reemplace los siguientes marcadores de posición por los valores adecuados:

    Marcador de posición Descripción
    nombre-del-hub Nombre del IoT Hub.
    config-bundle-output-path La ruta de acceso de la carpeta donde desea guardar las agrupaciones de configuración.
    nombre-del-dispositivo-padre Nombre del identificador de dispositivo primario de capa superior.
    manifiesto-de-despliegue-principal El archivo de manifiesto de implementación del dispositivo primario.
    parent-fqdn-or-ip Nombre de dominio completo (FQDN) o dirección IP del dispositivo primario.
    child-device-name El nombre del identificador de dispositivo secundario de capa inferior.
    child-deployment-manifest El archivo de manifiesto de implementación del dispositivo secundario.
    child-fqdn-or-ip Nombre de dominio completo (FQDN) o dirección IP del dispositivo secundario.
    az iot edge devices create \
       --hub-name <hub-name> \
       --output-path <config-bundle-output-path> \
       --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.5" \
       --device id=<parent-device-name> \
          deployment=<parent-deployment-manifest> \
          hostname=<parent-fqdn-or-ip> \
       --device id=child-1 \
          parent=parent-1 \
          deployment=<child-deployment-manifest> \
          hostname=<child-fqdn-or-ip>
    

    Por ejemplo, el comando siguiente crea una jerarquía de dos dispositivos IoT Edge en IoT Hub. Un dispositivo de capa superior denominado parent-1 y un dispositivo de capa inferior denominado child-1*. El comando guarda las agrupaciones de configuración de cada dispositivo en el directorio de salida. El comando también genera certificados de prueba autofirmados y los incluye en la agrupación de configuración. Las agrupaciones de configuración se instalan en cada dispositivo mediante un script de instalación.

    az iot edge devices create \
       --hub-name my-iot-hub \
       --output-path ./output \
       --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.5" \
       --device id=parent-1 \
          deployment=./deploymentTopLayer.json \
          hostname=10.0.0.4 \
       --device id=child-1 \
          parent=parent-1 \
          deployment=./deploymentLowerLayer.json \
          hostname=10.1.0.4
    

Después de ejecutar el comando, puede encontrar las agrupaciones de configuración del dispositivo en el directorio de salida. Por ejemplo:

PS C:\nested-edge\output> dir

   Directory: C:\nested-edge\output

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           4/10/2023  4:12 PM           7192 child-1.tgz
-a---           4/10/2023  4:12 PM           6851 parent-1.tgz

Puede usar sus propios certificados y claves pasados como argumentos al comando o crear una jerarquía de dispositivos más compleja. Para obtener más información sobre cómo crear dispositivos anidados mediante el comando az, consulte az iot edge devices create. Si no está familiarizado con el modo en que se usan los certificados en un escenario de puerta de enlace, consulte la sección sobre los certificados en la guía paso a paso.

En este tutorial, usará argumentos insertados para crear los dispositivos y las agrupaciones de configuración. También puede usar un archivo de configuración en formato YAML o JSON. Para obtener un archivo de configuración de ejemplo, consulte el ejemplo sample_devices_config.yaml.

Configuración del entorno de ejecución de IoT Edge

Además del aprovisionamiento de los dispositivos, los pasos de configuración establecen una comunicación de confianza entre los dispositivos de la jerarquía mediante los certificados que ha creado antes. Los pasos también comienzan a establecer la estructura de red de la jerarquía. El dispositivo de capa superior mantiene la conectividad a Internet, lo que le permitirá extraer imágenes de su entorno de ejecución de la nube, mientras que los dispositivos de capa inferior se enrutan mediante el de capa superior para acceder a estas imágenes.

Para configurar el entorno de ejecución de IoT Edge, debe aplicar los conjuntos de configuración a los dispositivos. Las configuraciones varían entre el dispositivo de capa superior y un dispositivo de capa inferior, por lo que debe tener en cuenta el archivo de configuración del dispositivo que aplique a cada uno.

Cada dispositivo necesita su agrupación de configuración correspondiente. Puede usar una unidad USB o una copia de archivo seguro para trasladar las agrupaciones de configuración a cada dispositivo. Debe copiar el paquete de configuración en el sistema operativo host de Windows de cada dispositivo EFLOW y luego copiarlo a la máquina virtual de EFLOW.

Advertencia

Asegúrese de enviar la agrupación de configuración correcta a cada dispositivo.

Configuración del dispositivo de capa superior

  1. Conéctese al dispositivo host de Windows de nivel superior y copie el archivo parent-1.tzg al dispositivo.

  2. Abra una sesión avanzada de PowerShell mediante Ejecutar como administrador.

  3. Copie parent-1.tzg en la máquina virtual de EFLOW.

    Copy-EflowVmFile -fromFile parent-1.tzg -toFile ~/ -pushFile
    
  4. Conexión a la máquina virtual EFLOW

    Connect-EflowVm
    
  5. Extraiga el archivo de agrupación de configuración. Por ejemplo, use el comando tar para extraer el archivo de almacenamiento parent-1:

    tar -xzf ./parent-1.tgz
    
  6. Establezca el permiso de ejecución para el script de instalación.

    chmod +x install.sh
    
  7. Ejecute el script install.sh.

    sudo sh ./install.sh
    
  8. Aplique los permisos de certificado correctos y reinicie el entorno de ejecución de IoT Edge.

    sudo chmod -R 755 /etc/aziot/certificates/
    sudo iotedge system restart
    
  9. Compruebe que todos los servicios de IoT Edge se ejecutan correctamente.

    sudo iotedge system status
    
  10. Por último, agregue las reglas de firewall adecuadas para habilitar la conectividad entre el dispositivo de capa inferior y el de capa superior.

    sudo iptables -A INPUT -p tcp --dport 5671 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 8883 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    sudo iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables-save | sudo tee /etc/systemd/scripts/ip4save
    
  11. Ejecute las comprobaciones de configuración y conectividad en los dispositivos.

    sudo iotedge check
    

En el dispositivo de capa superior, podrá ver una salida con varias evaluaciones superadas. Es posible que vea algunas advertencias sobre las directivas de registros y, en función de la red, las directivas DNS.

Si quiere ver con más detalle qué modificaciones se realizan en el archivo de configuración del dispositivo, consulte la sección configurar IoT Edge en dispositivos de la guía de procedimientos.

Configuración del dispositivo de capa inferior

  1. Conéctese al dispositivo host de Windows de nivel inferior y copie el archivo child-1.tzg al dispositivo.

  2. Abra una sesión avanzada de PowerShell mediante Ejecutar como administrador.

  3. Copie child-1.tzg en la máquina virtual de EFLOW.

    Copy-EflowVmFile -fromFile child-1.tzg -toFile ~/ -pushFile
    
  4. Conexión a la máquina virtual EFLOW

    Connect-EflowVm
    
  5. Extraiga el archivo de agrupación de configuración. Por ejemplo, use el comando tar para extraer el archivo de almacenamiento child-1:

    tar -xzf ./child-1.tgz
    
  6. Establezca el permiso de ejecución para el script de instalación.

    chmod +x install.sh
    
  7. Ejecute el script install.sh.

    sudo sh ./install.sh
    
  8. Aplique los permisos de certificado correctos y reinicie el entorno de ejecución de IoT Edge.

    sudo chmod -R 755 /etc/aziot/certificates/
    sudo iotedge system restart
    
  9. Compruebe que todos los servicios de IoT Edge se ejecutan correctamente.

    sudo iotedge system status
    
  10. Ejecute las comprobaciones de configuración y conectividad en los dispositivos. En el dispositivo de capa inferior, la imagen de diagnóstico debe pasarse manualmente en el comando:

    sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:443/azureiotedge-diagnostics:1.5
    

Si ha completado correctamente los pasos anteriores, puede comprobar que los dispositivos estén configurados correctamente. Cuando esté satisfecho con las configuraciones correctas en cada dispositivo, ya está listo para continuar.

Implementación del módulo de dispositivo

La implementación del módulo para tus dispositivos fue aplicada en el momento de su creación en IoT Hub. El comando az iot edge devices create ha aplicado los archivos JSON de implementación para los dispositivos de capa superior e inferior. Una vez completadas esas implementaciones, el dispositivo de capa lower usa el IoT Edge api Proxy módulo para extraer sus imágenes necesarias.

Además de los módulos en tiempo de ejecución IoT Edge Agent y IoT Edge Hub, el dispositivo de capa superior recibe el módulo Docker registry y IoT Edge API Proxy.

El módulo Docker registry apunta a un Azure Container Registry existente. En este caso, apunta a Microsoft Container Registry. De forma predeterminada, el registro de Docker escucha en el puerto 5000.

El módulo IoT Edge API Proxy enruta las solicitudes HTTP a otros módulos, lo que permite que los dispositivos de nivel inferior extraen imágenes de contenedor o inserten blobs en el almacenamiento. En este tutorial, se comunica en el puerto 443 y está configurado para enviar la ruta de solicitudes de extracción de imágenes de contenedor de Docker al módulo Docker Registry en el puerto 5000. Además, cualquier solicitud de carga de Blob Storage se enruta al módulo AzureBlobStorageonIoTEdge en el puerto 11002. Para obtener más información sobre el módulo IoT Edge API Proxy y cómo configurarlo, consulte la guía cómo hacerlo del módulo.

Para obtener información sobre cómo crear una implementación como esta en el portal de Azure o Azure Cloud Shell, consulte la sección dispositivo de capa top de la guía de procedimientos.

Vea el estado de los módulos con el siguiente comando:

az iot hub module-twin show --device-id <edge-device-id> --module-id '$edgeAgent' --hub-name <iot-hub-name> --query "properties.reported.[systemModules, modules]"

Este comando muestra todas las propiedades notificadas de edgeAgent. Entre las propiedades útiles para supervisar el estado del dispositivo se incluyen: estado en tiempo de ejecución, hora de inicio en tiempo de ejecución, hora de última salida y recuento de reinicios en tiempo de ejecución.

También verá el estado de los módulos en el portal Azure. Vaya a la sección Dispositivos de la IoT Hub para ver los dispositivos y módulos.

Visualización de datos generados

El módulo Simulated Temperature Sensor que insertó genera datos de entorno de ejemplo. Envía mensajes con la temperatura y la humedad ambiental, la temperatura y la presión de la máquina, y una marca de tiempo.

También puede ver estos mensajes mediante Azure Cloud Shell:

az iot hub monitor-events -n <iot-hub-name> -d <lower-layer-device-name>

Por ejemplo:

az iot hub monitor-events -n my-iot-hub -d child-1
{
    "event": {
        "origin": "child-1",
        "module": "simulatedTemperatureSensor",
        "interface": "",
        "component": "",
        "payload": "{\"machine\":{\"temperature\":104.29281270901808,\"pressure\":10.48905461241978},\"ambient\":{\"temperature\":21.086561171611102,\"humidity\":24},\"timeCreated\":\"2023-04-17T21:50:30.1082487Z\"}"
    }
}

Solución de problemas

Ejecute el comando para comprobar la configuración y solucionar errores.

Puede ejecutar en una jerarquía anidada, incluso si los dispositivos de bajada no tienen acceso directo a Internet.

Cuando se ejecuta desde la capa inferior, el programa intenta extraer la imagen del dispositivo primario mediante el puerto 443.

sudo iotedge check --diagnostics-image-name $upstream:443/azureiotedge-diagnostics:1.5

El valor de se extrae del registro de contenedor vinculado al módulo del registro. Este tutorial lo establece de forma predeterminada en :.

Nombre Value
REGISTRY_PROXY_REMOTEURL https://mcr.microsoft.com

Si usa un registro de contenedor privado, asegúrese de que todas las imágenes (IoTEdgeAPIProxy, edgeAgent, edgeHub, Simulated Temperature Sensor y diagnostics) están en el registro de contenedor.

Si un dispositivo de bajada tiene una arquitectura de procesador diferente del dispositivo primario, use la imagen de arquitectura adecuada. Use un registro conectado o especifique la imagen correcta para los módulos edgeAgent y edgeHub en el archivo config.toml del dispositivo de bajada. Por ejemplo, si el dispositivo primario se ejecuta en una arquitectura arm32v7 y el dispositivo de bajada se ejecuta en una arquitectura AMD64, especifique la etiqueta de imagen de arquitectura y versión coincidente en el archivo config.toml del dispositivo de bajada.

[agent.config]
image = "$upstream:443/azureiotedge-agent:1.5.15-linux-amd64"

"systemModules": {
   "edgeAgent": {
      "settings": {
            "image": "$upstream:443/azureiotedge-agent:1.5.15-linux-amd64"
      },
   },
   "edgeHub": {
      "settings": {
            "image": "$upstream:443/azureiotedge-hub:1.5.15-linux-amd64",
      }
   }
}

Limpieza de recursos

Puede eliminar las configuraciones locales y los recursos de Azure que creó en este artículo para evitar cargos.

Para eliminar los recursos:

  1. Inicie sesión en el portal Azure y seleccione Grupos de recursos.

  2. Seleccione el nombre del grupo de recursos que contiene los recursos de prueba de IoT Edge.

  3. Revise la lista de los recursos contenidos en el grupo de recursos. Si desea eliminar todos ellos, puede seleccionar Eliminar grupo de recursos. Si desea eliminar solo algunos de ellos, puede seleccionar cada recurso para eliminarlos individualmente.

Pasos siguientes

En este tutorial, configuraste dos dispositivos IoT Edge como puertas de enlace y asignaste uno como el dispositivo padre del otro. Después, demostró la extracción de una imagen del contenedor en el dispositivo secundario por medio de una puerta de enlace con el módulo IoT Edge API Proxy (Proxy de API de IoT Edge). Si quiere más información, consulte la guía paso a paso sobre el uso del módulo de proxy.

Para más información sobre el uso de puertas de enlace para crear capas jerárquicas de dispositivos IoT Edge, consulte el siguiente artículo.