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 IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e IoT Edge 1.4 LTS son versiones compatibles. IoT Edge 1.4 LTS finaliza el ciclo de vida el 12 de noviembre de 2024. Si está en una versión anterior, consulte Actualización de IoT Edge.
Puede implementar nodos de Azure IoT Edge 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.
Puede estructurar una jerarquía de dispositivos para que solo la capa superior tenga conectividad a la nube y las capas inferiores solo puedan comunicarse con las capas superior e inferior adyacentes. Estas capas de red constituyen la base de la mayoría de las redes industriales que siguen la norma ISA-95.
Este tutorial le guiará a través de la creación de una jerarquía de dispositivos IoT Edge mediante IoT Edge para Linux en Windows, la implementación de contenedores del entorno de ejecución de Azure IoT Edge en los dispositivos y la configuración local de estos dispositivos. Realice las siguientes tareas:
- Crear y definir las relaciones en una jerarquía de dispositivos IoT Edge.
- Configurar el entorno de ejecución de Azure 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 de proxy de API de IoT Edge para enrutar de forma segura el tráfico HTTP por un único puerto desde los dispositivos de nivel inferior.
Sugerencia
Este tutorial incluye una combinación de pasos manuales y automatizados para proporcionar una presentación de las características de IoT Edge anidadas.
Si prefiere una visión completamente automatizada de la configuración de una jerarquía de dispositivos IoT Edge, guíe su propio script con base en el ejemplo de Azure IoT Edge para IoT industrial. En este escenario con scripts se implementan máquinas virtuales de Azure como dispositivos preconfigurados para simular el entorno de una fábrica.
Si quiere conocer en profundidad los pasos manuales para crear y administrar una jerarquía de dispositivos IoT Edge, consulte la guía paso a paso sobre las jerarquías de puerta de enlace de dispositivos IoT Edge.
En este tutorial, se definen los siguientes niveles de red:
Nivel superior: Los dispositivos IoT Edge de este nivel se pueden conectar directamente a la nube.
Capas inferiores: los dispositivos IoT Edge en las capas situadas debajo de la superior no se pueden conectar directamente a la nube. Deben pasar por uno o más dispositivos IoT Edge intermediarios para enviar y recibir datos.
En este tutorial se usa una jerarquía de dos dispositivos para simplificar. El dispositivo de capa superior representa un dispositivo en la capa superior de la jerarquía, que se puede conectar directamente a la nube. También se hace referencia a este dispositivo como dispositivo primario. El dispositivo de capa inferior representa un dispositivo en la capa inferior de la jerarquía, que no se puede conectar directamente a la nube. Puede agregar más dispositivos para representar el entorno de producción, según sea necesario. Los dispositivos de las capas inferiores también se denominan dispositivos secundarios.
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, necesitará:
- Un shell de Bash en Azure Cloud Shell que use la CLI de Azure v2.3.1 con la extensión de Azure IoT v0.10.6 o posterior instalada. Este tutorial usa Azure Cloud Shell. Para ver las versiones actuales de los módulos y extensiones de la CLI de Azure, ejecute az version.
- Dos dispositivos Windows que ejecutan Azure IoT Edge para Linux en Windows. Ambos dispositivos deben implementarse mediante un conmutador virtual externo.
Sugerencia
Es posible usar un conmutador virtual interno o predeterminado si se configura un reenvío de puertos en el sistema operativo host de Windows. Sin embargo, para simplificar este tutorial, ambos dispositivos deben usar un conmutador virtual externo y estar conectados a la misma red externa.
Para más información sobre la conexión en red, consulte Azure IoT Edge para Linux en redes Windows y Configuración de red para Azure IoT Edge para Linux en Windows.
Si necesita configurar los dispositivos EFLOW en una DMZ, consulte Cómo configurar Azure IoT Edge para Linux en Windows Industrial IoT y configuración de DMZ.
- Una cuenta de Azure con una suscripción válida. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
- Una instancia de IoT Hub de nivel estándar o gratis en Azure.
- Asegúrese de que los siguientes puertos estén abiertos para todos los dispositivos de entrada, excepto para el dispositivo de capa inferior: 443, 5671, 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 la máquina virtual EFLOW, consulte Seguridad de IoT Edge para Linux en Windows.
Crear 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 superior y el dispositivo de capa inferior. Puede crear más dispositivos de bajada, según sea necesario.
Para crear y configurar la jerarquía de dispositivos IoT Edge, use el comando az iot edge devices create de la CLI de Azure. Este comando simplifica la configuración de la jerarquía gracias a la automatización y la condensación de varios pasos:
- Creación de los dispositivos en IoT Hub
- 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 a 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 otros ejemplos de escenarios, revise las plantillas de ejemplo de configuración.
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 capa superior define el módulo de proxy de API de IoT Edge y declara la ruta del dispositivo de capa inferior a IoT Hub.
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 imagen Docker al módulo IoT Edge API Proxy (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
$upstream:443
.Para obtener más información sobre cómo crear un manifiesto de implementación de capa inferior, consulte Conexión de dispositivos de Azure IoT Edge para crear una jerarquía.
En Azure Cloud Shell, use el comando az iot edge devices create de la CLI de Azure para crear dispositivos en IoT Hub y agrupaciones 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 <hub-name> El nombre de IoT Hub. <config-bundle-output-path> La ruta de acceso de la carpeta donde desea guardar las agrupaciones de configuración. <parent-device-name> Nombre del identificador de dispositivo primario de capa superior. <parent-deployment-manifest> 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.4" \ --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 siguiente comando 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.4" \ --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 runtime 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 las agrupaciones de configuración al dispositivo. 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. Deberá copiar la agrupación de configuración en el sistema operativo host de Windows de cada dispositivo EFLOW y, a continuación, copiarla en 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
Conéctese al dispositivo host de Windows de capa superior y copie el archivo parent-1.tzg en el dispositivo.
Abra una sesión avanzada de PowerShell mediante Ejecutar como administrador.
Copie parent-1.tzg en la máquina virtual de EFLOW.
Copy-EflowVmFile -fromFile parent-1.tzg -toFile ~/ -pushFile
Conexión a la máquina virtual EFLOW
Connect-EflowVm
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
Establezca el permiso de ejecución para el script de instalación.
chmod +x install.sh
Ejecute el script install.sh.
sudo sh ./install.sh
Aplique los permisos de certificado correctos y reinicie el entorno de ejecución de Azure IoT Edge.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Compruebe que todos los servicios de IoT Edge se ejecutan correctamente.
sudo iotedge system status
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
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 registros, directivas y, en función de la red, directivas de DNS.
Si quiere ver más de cerca las modificaciones que se realizan en el archivo de configuración del dispositivo, consulte la sección sobre cómo configurar IoT Edge en los dispositivos en la guía paso a paso.
Configuración del dispositivo de capa inferior
Conéctese al dispositivo host de Windows de capa inferior y copie el archivo child-1.tzg en el dispositivo.
Abra una sesión avanzada de PowerShell mediante Ejecutar como administrador.
Copie child-1.tzg en la máquina virtual de EFLOW.
Copy-EflowVmFile -fromFile child-1.tzg -toFile ~/ -pushFile
Conexión a la máquina virtual EFLOW
Connect-EflowVm
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
Establezca el permiso de ejecución para el script de instalación.
chmod +x install.sh
Ejecute el script install.sh.
sudo sh ./install.sh
Aplique los permisos de certificado correctos y reinicie el entorno de ejecución de Azure IoT Edge.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Compruebe que todos los servicios de IoT Edge se ejecutan correctamente.
sudo iotedge system status
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.2
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 de módulos de dispositivo
La implementación del módulo para los dispositivos se aplicó cuando los dispositivos se crearon en IoT Hub. El comando az iot edge devices create aplicó los archivos JSON de implementación para los dispositivos de capa superior e inferior. Después de finalizar esas implementaciones, el dispositivo de capa inferior usa el módulo Proxy de API de IoT Edge para extraer las imágenes necesarias.
Además de los módulos IoT Edge Agent (Agente de IoT Edge) y IoT Edge Hub (Concentrador de IoT Edge), el dispositivo de capa superior recibe el módulo Docker Registry y el módulo IoT Edge API Proxy (Proxy de API de IoT Edge).
El módulo Docker Registry apunta a una instancia existente de Azure Container Registry. En este caso, REGISTRY_PROXY_REMOTEURL
apunta a Microsoft Container Registry. De forma predeterminada, el registro de Docker escucha en el puerto 5000.
El módulo IoT Edge API Proxy (Proxy de API de IoT Edge) enruta las solicitudes HTTP a otros módulos, lo que permite que los dispositivos de capa inferior extraigan imágenes del 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 más información sobre el módulo IoT Edge API Proxy (Proxy de API de IoT Edge) y cómo configurarlo, consulte la guía paso a paso del módulo.
Si quiere ver cómo crear una implementación como esta mediante Azure Portal o Azure Cloud Shell, consulte la sección sobre los dispositivos de nivel superior en la guía paso a paso.
Puede ver el estado de los módulos mediante el 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 genera todas las propiedades notificadas de edgeAgent. Algunas de estas son útiles para supervisar el estado del dispositivo: runtime status, runtime start time, runtime last exit time, runtime restart count.
También puede ver el estado de los módulos en Azure Portal. Vaya a la sección Dispositivos de su centro de IoT 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 iotedge check
para comprobar la configuración y solucionar errores.
Puede ejecutar iotedge check
en una jerarquía anidada, incluso si los dispositivos de bajada no tienen acceso directo a Internet.
Cuando se ejecuta iotedge check
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.2
El valor de azureiotedge-diagnostics
se extrae del registro de contenedor vinculado al módulo del registro. En este tutorial se ha establecido de forma predeterminada en https://mcr.microsoft.com:
Nombre | Value |
---|---|
REGISTRY_PROXY_REMOTEURL |
https://mcr.microsoft.com |
Si utiliza un registro de contenedor privado, asegúrese de que todas las imágenes (IoTEdgeAPIProxy, edgeAgent, edgeHub, Simulated Temperature Sensor y diagnostics) aparezcan en él.
Si un dispositivo de bajada tuviera una arquitectura de procesador diferente del dispositivo primario, necesitará la imagen de arquitectura adecuada. Puede usar un registro conectado o bien especificar 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, debe especificar la versión coincidente y la etiqueta de imagen de arquitectura en el archivo config.toml del dispositivo de bajada.
[agent.config]
image = "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
"systemModules": {
"edgeAgent": {
"settings": {
"image": "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
},
},
"edgeHub": {
"settings": {
"image": "$upstream:443/azureiotedge-hub:1.4.10-linux-amd64",
}
}
}
Limpieza de recursos
Para evitar gastos, puede eliminar las configuraciones locales y los recursos de Azure que creó en este artículo.
Para eliminar los recursos:
Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
Seleccione el nombre del grupo de recursos que contiene los recursos de prueba de IoT Edge.
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, configuró dos dispositivos IoT Edge como puertas de enlace y estableció uno como el dispositivo primario 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 obtener 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.