Compartir a través de


Configuración de un dispositivo de IoT Edge para que se comunique a través de un servidor proxy

Se aplica a:Marca de verificación de IoT Edge 1.5 IoT Edge 1.5

Importante

IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS finaliza su ciclo de vida el 12 de noviembre de 2024. Si está usando una versión anterior, consulte Actualización de IoT Edge.

Los dispositivos de IoT Edge envían solicitudes HTTPS para comunicarse con IoT Hub. Si el dispositivo se conecta a una red que usa un servidor proxy, configure el entorno de ejecución de IoT Edge para comunicarse a través del servidor. Los servidores proxy también pueden afectar a módulos individuales de IoT Edge si realizan solicitudes HTTP o HTTPS que no se enrutan a través del centro de IoT Edge.

En este artículo se explican los cuatro pasos para configurar y administrar un dispositivo IoT Edge detrás de un servidor proxy:

  1. Instale el entorno de ejecución de Azure IoT Edge en el dispositivo.

    Los scripts de instalación de IoT Edge extraen paquetes y archivos de Internet, por lo que el dispositivo se comunica a través del servidor proxy para realizar esas solicitudes. En el caso de los dispositivos Windows, el script de instalación también dispone de una opción de instalación sin conexión.

    Este paso es un proceso que solamente tiene que realizarse una vez para configurar el dispositivo de IoT Edge al establecer la configuración inicial. También necesitas estas mismas conexiones al actualizar el entorno de ejecución de IoT Edge.

  2. Configuración de IoT Edge y el tiempo de ejecución de contenedor en el dispositivo

    IoT Edge controla las comunicaciones con IoT Hub. El entorno de ejecución del contenedor administra los contenedores y se comunica con los registros de contenedor. Ambos componentes deben hacer las solicitudes web a través del servidor proxy.

    Este paso es un proceso que solamente tiene que realizarse una vez para configurar el dispositivo de IoT Edge al establecer la configuración inicial.

  3. Configuración de las propiedades del agente de IoT Edge en el archivo de configuración del dispositivo

    El demonio de IoT Edge inicia el módulo edgeAgent inicialmente. Después, el módulo edgeAgent recupera el manifiesto de implementación de IoT Hub e inicia todos los demás módulos. Configure manualmente las variables de entorno del módulo edgeAgent en el dispositivo para que el agente de IoT Edge realice la conexión inicial a IoT Hub. Una vez establecida la conexión inicial, puede configurar el módulo de edgeAgent de forma remota.

    Este paso es un proceso que solamente tiene que realizarse una vez para configurar el dispositivo de IoT Edge al establecer la configuración inicial.

  4. En el futuro, siempre que implemente un módulo, defina las variables de entorno de todos los módulos que se comuniquen a través del proxy.

    Después de configurar y conectar un dispositivo IoT Edge a IoT Hub a través del servidor proxy, mantenga la conexión en todas las implementaciones futuras de módulos.

    Este paso es un proceso continuo que se realiza de forma remota para que, con cada nueva actualización del módulo o la implementación, el dispositivo conserve su capacidad para comunicarse a través del servidor proxy.

Dirección URL de proxy

Antes de iniciar los pasos de este artículo, conozca la dirección URL del proxy.

Las direcciones URL de proxy usan el siguiente formato: protocol://proxy_host:proxy_port.

  • El protocolo es HTTP o HTTPS. El daemon de Docker puede usar cualquiera de los protocolos según la configuración de tu registro de contenedores, pero el daemon de IoT Edge y los contenedores de runtime siempre usan HTTP para conectarse al proxy.

  • El proxy_host es la dirección del servidor proxy. Si el servidor proxy requiere autenticación, proporcione sus credenciales como parte del host proxy en el formato siguiente: user:password@proxy_host.

  • El proxy_port es el puerto de red donde el proxy responde al tráfico.

Instalación de IoT Edge a través de un proxy

Independientemente de si el dispositivo IoT Edge se ejecuta en Windows o Linux, acceda a los paquetes de instalación a través del servidor proxy. En función del sistema operativo, siga el procedimiento que corresponda para instalar el entorno de ejecución de IoT Edge a través de un servidor proxy.

Dispositivos Linux

Si va a instalar el entorno de ejecución de IoT Edge en un dispositivo Linux, configure el administrador de paquetes para usar el servidor proxy para acceder al paquete de instalación. Por ejemplo, configure apt-get para usar un http-proxy. Después de configurar el administrador de paquetes, siga las instrucciones de Instalación del entorno de ejecución de Azure IoT Edge.

Dispositivos de Windows con IoT Edge para Linux en Windows.

Si va a instalar el entorno de ejecución de IoT Edge mediante IoT Edge para Linux en Windows, el entorno de ejecución de IoT Edge se instala de forma predeterminada en la máquina virtual Linux. No es necesario instalar ni actualizar ningún otro paso.

Dispositivos de Windows con contenedores de Windows

Si va a instalar el entorno de ejecución de Azure IoT Edge en un dispositivo Windows, debe pasar por el servidor proxy dos veces. La primera conexión descarga el archivo de script del instalador y la segunda conexión descarga los componentes necesarios durante la instalación. Puede especificar la información del proxy en la configuración de Windows o incluirla directamente en los comandos de PowerShell.

En los pasos siguientes se muestra un ejemplo de una instalación de Windows mediante el -proxy argumento :

  1. El comando Invoke-WebRequest necesita información del proxy para poder acceder al script de instalación. A continuación, el comando Deploy-IoTEdge necesita la información del proxy para poder descargar los archivos de instalación.

    . {Invoke-WebRequest -proxy <proxy URL> -useb aka.ms/iotedge-win} | Invoke-Expression; Deploy-IoTEdge -proxy <proxy URL>
    
  2. El comando Initialize-IoTEdge no tiene que atravesar el proxy, por lo que el segundo paso solo necesita la información del proxy para Invoke-WebRequest.

    . {Invoke-WebRequest -proxy <proxy URL> -useb aka.ms/iotedge-win} | Invoke-Expression; Initialize-IoTEdge
    

Si las credenciales del servidor proxy son complejas y no se pueden incluir en la dirección URL, use el -ProxyCredential parámetro en -InvokeWebRequestParameters. Por ejemplo,

$proxyCredential = (Get-Credential).GetNetworkCredential()
. {Invoke-WebRequest -proxy <proxy URL> -ProxyCredential $proxyCredential -useb aka.ms/iotedge-win} | Invoke-Expression; `
Deploy-IoTEdge -InvokeWebRequestParameters @{ '-Proxy' = '<proxy URL>'; '-ProxyCredential' = $proxyCredential }

Para obtener más información acerca de los parámetros de proxy, consulte Invoke-WebRequest.

Configuración de IoT Edge y Moby

IoT Edge utiliza dos servicios que se ejecutan en el dispositivo IoT Edge. El demonio Moby extrae imágenes de contenedor de registros de contenedor. El servicio de IoT Edge se comunica con IoT Hub.

Configure tanto el demonio Moby como el demonio IoT Edge para que utilicen el servidor proxy para garantizar una función del dispositivo sin interrupciones. Realice este paso en el dispositivo IoT Edge durante la configuración inicial.

Demonio Moby

Dado que Moby se basa en Docker, consulte la documentación de Docker para configurar el daemon de Moby con variables de entorno. La mayoría de los registros de contenedor, incluidos DockerHub y Azure Container Registries, admiten solicitudes HTTPS, por lo que establecen el parámetro HTTPS_PROXY . Si va a extraer imágenes de un registro que no admite la seguridad de la capa de transporte (TLS), debe establecer el parámetro HTTP_PROXY.

Seleccione el artículo que se aplica al sistema operativo del dispositivo IoT Edge:

Demonio de IoT Edge

El demonio IoT Edge es similar al demonio Moby. Utilice los pasos siguientes para establecer una variable de entorno para el servicio según su sistema operativo.

El demonio de IoT Edge siempre utiliza HTTPS para enviar solicitudes a IoT Hub.

Linux

En el terminal de comandos, abra un editor para configurar el servicio IoT Edge.

sudo systemctl edit aziot-edged

Escriba el texto siguiente, y reemplace la <dirección URL del proxy> por la dirección del servidor proxy y el puerto. A continuación, guarde y salga.

[Service]
Environment="https_proxy=<proxy URL>"

A partir de la versión 1.2, IoT Edge usa el servicio de identidad de IoT para controlar el aprovisionamiento de dispositivos con IoT Hub o IoT Hub Device Provisioning Service. Abra un editor en el terminal para configurar el demonio del servicio de identidad de IoT.

sudo systemctl edit aziot-identityd

Escriba el texto siguiente, y reemplace la <dirección URL del proxy> por la dirección del servidor proxy y el puerto. A continuación, guarde y salga.

[Service]
Environment="https_proxy=<proxy URL>"

Actualice el administrador de servicios para que incluya las nuevas configuraciones.

sudo systemctl daemon-reload

Reinicie los servicios del sistema de IoT Edge para que se apliquen los cambios a ambos demonios.

sudo iotedge system restart

Comprueba que se encuentran las variables de entorno y la nueva configuración.

systemctl show --property=Environment aziot-edged
systemctl show --property=Environment aziot-identityd

Windows con IoT Edge para Linux en Windows.

Inicie sesión en IoT Edge para Linux en la máquina virtual Windows:

Connect-EflowVm

Sigue los mismos pasos que en la sección de Linux de este artículo para configurar el demonio IoT Edge.

Windows con contenedores de Windows

Abra una ventana de PowerShell como administrador y ejecute el comando siguiente para editar el registro con la nueva variable de entorno. Reemplace la <dirección URL del proxy> por la dirección del servidor proxy y el puerto.

reg add HKLM\SYSTEM\CurrentControlSet\Services\iotedge /v Environment /t REG_MULTI_SZ /d https_proxy=<proxy URL>

Reinicie IoT Edge para que los cambios surtan efecto.

Restart-Service iotedge

Configuración del agente de IoT Edge

El agente de IoT Edge es el primer módulo que se inicia en cualquier dispositivo de IoT Edge. Este módulo empieza por primera vez en función de la información del archivo de configuración de IoT Edge. Después, el agente de IoT Edge se conecta a IoT Hub para recuperar manifiestos de implementación. El manifiesto declara qué otros módulos debe implementar el dispositivo.

Este paso se realiza una sola vez en el dispositivo de IoT Edge durante la instalación inicial del dispositivo.

  1. Abra el archivo de configuración en el dispositivo IoT Edge: /etc/aziot/config.toml. Necesitas privilegios de administración para acceder al archivo de configuración. En los sistemas Linux, utilice el comando sudo antes de abrir el archivo en el editor de texto que prefiera.

  2. En el archivo de configuración, busque la sección [agent], que contiene toda la información de configuración para el módulo edgeAgent que se va a usar en el inicio. Compruebe que la [agent] sección no tiene comentarios. Si falta la sección [agent], agrégala a config.toml. La definición del agente de IoT Edge incluye una subsección [agent.env] en la que puede agregar variables de entorno.

  3. Agregue el parámetro https_proxy a la sección variables de entorno y establezca la dirección URL del proxy como su valor.

    [agent]
    name = "edgeAgent"
    type = "docker"
    
    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    # "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  4. El entorno de ejecución de IoT Edge usa AMQP de forma predeterminada para comunicarse con IoT Hub. Algunos servidores proxy bloquean los puertos AMQP. Si es así, también debe configurar edgeAgent para que use AMQP sobre WebSocket. Quite el comentario del parámetro UpstreamProtocol.

    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  5. Agregue el parámetro https_proxy a la sección de variables de entorno y establezca la dirección URL del proxy como su valor.

    [agent]
    name = "edgeAgent"
    type = "docker"
    
    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    # "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  6. El runtime de IoT Edge usa AMQP de forma predeterminada para comunicarse con IoT Hub. Algunos servidores proxy bloquean los puertos AMQP. Si es así, también debe configurar edgeAgent para que use AMQP sobre WebSocket. Quite la marca de comentario del parámetro UpstreamProtocol.

    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  7. Guarde los cambios y cierre el editor. Aplique los cambios.

    sudo iotedge config apply
    
  8. Compruebe que la configuración del proxy se aplica mediante docker inspect edgeAgent en la Env sección . De no ser así, debes volver a crear el contenedor.

    sudo docker rm -f edgeAgent
    
  9. El entorno de ejecución de Azure IoT Edge recrea edgeAgent en un minuto. Cuando el contenedor de edgeAgent vuelva a ejecutarse, usa el comando docker inspect edgeAgent para comprobar que la configuración del proxy coincide con el archivo de configuración.

Configuración de manifiestos de implementación

Después de configurar el dispositivo IoT Edge para que funcione con el servidor proxy, declare la variable de entorno HTTPS_PROXY en los manifiestos de implementación futuros. Puede editar los manifiestos de implementación utilizando el asistente de Azure Portal o editando el archivo JSON de un manifiesto de implementación.

Configure siempre los dos módulos en tiempo de ejecución, edgeAgent y edgeHub, para comunicarse a través del servidor proxy para mantener una conexión con IoT Hub. Si quita la información de proxy del módulo edgeAgent, la única manera de restablecer la conexión es editar el archivo de configuración en el dispositivo, como se describe en la sección anterior.

Además de los módulos edgeAgent y edgeHub, es posible que otros módulos necesiten la configuración del proxy. Los módulos que acceden a recursos de Azure además de IoT Hub, como Blob Storage, deben especificar la variable HTTPS_PROXY en el archivo de manifiesto de implementación.

Este procedimiento se aplica durante toda la vida del dispositivo IoT Edge.

Portal de Azure

Cuando usa el asistente de Establecimiento de módulos para crear implementaciones para dispositivos de IoT Edge, todos los módulos tienen una sección Variables de entorno donde puede configurar las conexiones con el servidor proxy.

Para configurar el agente de IoT Edge y los módulos del centro de IoT Edge, seleccione Configuración del entorno de ejecución en el primer paso del asistente.

Captura de pantalla de la configuración de las opciones avanzadas del entorno de ejecución de Edge.

Agregue la variable de entorno https_proxy tanto al agente de IoT Edge como a las definiciones de configuración del entorno de ejecución de los módulos del centro de IoT Edge . Si incluye la variable de entorno UpstreamProtocol en el archivo de configuración del dispositivo IoT Edge, agréguela también a la definición del módulo del agente de IoT Edge.

Todos los demás módulos que agregue a un manifiesto de implementación seguirán el mismo patrón. Seleccione Aplicar para guardar los cambios.

Archivos JSON del manifiesto de implementación

Si va a crear implementaciones para dispositivos IoT Edge mediante las plantillas de Visual Studio Code o mediante la creación manual de archivos JSON, puede agregar las variables de entorno directamente a cada definición del módulo. Si no lo las ha agregado en Azure Portal, agréguelas aquí al archivo de manifiesto JSON. Reemplace <proxy URL> con su valor.

Use el siguiente formato JSON:

"env": {
    "https_proxy": {
        "value": "<proxy URL>"
    }
}

Con las variables de entorno incluidas, la definición del módulo es similar al ejemplo de edgeHub siguiente:

"edgeHub": {
    "type": "docker",
    "settings": {
        "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
        "createOptions": "{}"
    },
    "env": {
        "https_proxy": {
            "value": "http://proxy.example.com:3128"
        }
    },
    "status": "running",
    "restartPolicy": "always"
}

Si incluyó la variable de entorno UpstreamProtocol en el archivo config.yaml del dispositivo de IoT Edge, agréguela también a la definición del módulo del agente de IoT Edge.

"env": {
    "https_proxy": {
        "value": "<proxy URL>"
    },
    "UpstreamProtocol": {
        "value": "AmqpWs"
    }
}

Trabajar con servidores proxy que inspeccionan el tráfico

Algunos servidores proxy, como Zscaler, pueden inspeccionar el tráfico cifrado con TLS. Durante la inspección del tráfico TLS, el certificado devuelto por el proxy no es el certificado del servidor de destino, sino que es el certificado firmado por el propio certificado raíz del proxy. De manera predeterminada, los módulos de IoT Edge (incluidos edgeAgent y edgeHub) no confían en el certificado de este proxy y se produce un error en el protocolo de enlace TLS.

Para corregir el protocolo de enlace con errores, configure el sistema operativo y los módulos de IoT Edge para confiar en el certificado raíz del proxy siguiendo estos pasos.

  1. Configure el certificado proxy en el almacén raíz de certificados de confianza de tu sistema operativo host. Para obtener más información sobre cómo instalar un certificado raíz, consulte Instalación de una entidad de certificación raíz en el almacén de certificados de sistema operativo.

  2. Configure el dispositivo IoT Edge para comunicarse a través de un servidor proxy haciendo referencia al certificado del conjunto de confianza. Para obtener más información sobre cómo configurar el conjunto de confianza, consulte Administrar la CA raíz de confianza (conjunto de confianza).

Para configurar el soporte de proxy de inspección de tráfico para contenedores no administrados por IoT Edge, póngase en contacto con el proveedor del proxy.

Nombres de dominio completos (FQDN) de destinos con los que Se comunica IoT Edge

Si el firewall del proxy requiere agregar todos los FQDN a la lista de permitidos para la conectividad a Internet, revise la lista de Permitir conexiones desde dispositivos IoT Edge para determinar qué FQDN agregar.

Pasos siguientes

Obtenga información sobre los roles del entorno de ejecución de IoT Edge.

Solución de errores de instalación y configuración en problemas comunes y soluciones para Azure IoT Edge.