Configurar um dispositivo IoT Edge para se comunicar por meio de um servidor proxy

Aplica-se a:IoT Edge 1.5 checkmark IoT Edge 1.5

Importante

IoT Edge 1.5 LTS é a versão suportada. IoT Edge 1.4 LTS atingiu o fim da vida útil em 12 de novembro de 2024. Se você estiver usando uma versão anterior, consulte Update IoT Edge.

IoT Edge dispositivos enviam solicitações HTTPS para se comunicar com Hub IoT. Se o dispositivo se conectar a uma rede que usa um servidor proxy, configure o runtime IoT Edge para se comunicar por meio do servidor. Os servidores proxy também podem afetar módulos de IoT Edge individuais se fizerem solicitações HTTP ou HTTPS que não são roteados pelo hub IoT Edge.

Este artigo explica as quatro etapas para configurar e gerenciar um dispositivo IoT Edge por trás de um servidor proxy:

  1. Instale o runtime de IoT Edge em seu dispositivo

    Os scripts de instalação IoT Edge extraem pacotes e arquivos da Internet para que o dispositivo se comunique por meio do servidor proxy para fazer essas solicitações.

    Esta etapa é um processo realizado uma única vez para configurar o dispositivo IoT Edge ao configurá-lo pela primeira vez. Você também precisa dessas mesmas conexões ao atualizar o runtime do IoT Edge.

  2. Configurar o IoT Edge e o runtime de contêiner no dispositivo

    IoT Edge gerencia as comunicações com o Hub IoT. O runtime de contêiner gerencia contêineres e se comunica com registros de contêiner. Esses dois componentes precisam fazer solicitações da Web por meio do servidor proxy.

    Esta etapa é um processo realizado uma única vez para configurar o dispositivo IoT Edge ao configurá-lo pela primeira vez.

  3. Configure as propriedades do agente IoT Edge no arquivo de configuração em seu dispositivo

    O daemon IoT Edge inicia inicialmente o módulo edgeAgent. Em seguida, o módulo edgeAgent recupera o manifesto de implantação de Hub IoT e inicia todos os outros módulos. Configure manualmente as variáveis de ambiente do módulo edgeAgent no dispositivo para que o agente de IoT Edge faça a conexão inicial com Hub IoT. Depois da conexão inicial, você pode configurar o módulo edgeAgent remotamente.

    Esta etapa é um processo realizado uma única vez para configurar o dispositivo IoT Edge ao configurá-lo pela primeira vez.

  4. Para todas as implantações futuras de módulo, definir variáveis de ambiente para qualquer módulo que se comunica por meio do proxy

    Depois de configurar e conectar um dispositivo IoT Edge para Hub IoT por meio do servidor proxy, mantenha a conexão em todas as implantações futuras do módulo.

    Esta etapa é um processo contínuo feito remotamente. Portanto, todos as novas atualizações de módulo ou implantação manterão a capacidade do dispositivo de se comunicar por meio do servidor proxy.

Saber a sua URL do proxy

Antes de iniciar as etapas neste artigo, conheça a URL do proxy.

As URLs de proxy usam o seguinte formato: protocol://proxy_host:proxy_port.

  • O protocolo é HTTP ou HTTPS. O daemon do Docker pode usar qualquer um dos protocolos dependendo das configurações do registro de contêiner, mas o daemon IoT Edge e os contêineres de runtime sempre usam HTTP para se conectar ao proxy.

  • O proxy_host é o endereço do servidor proxy. Se o servidor proxy exigir autenticação, forneça suas credenciais como parte do host proxy no seguinte formato: proxy_host de usuário:senha@.

  • O proxy_port é a porta de rede em que o proxy responde ao tráfego.

Instalar IoT Edge por meio de um proxy

Se o dispositivo IoT Edge é executado em Windows ou Linux, acesse os pacotes de instalação por meio do servidor proxy. Dependendo do sistema operacional, siga as etapas para instalar o IoT Edge runtime por meio de um servidor proxy.

Dispositivos do Linux

Se você estiver instalando o IoT Edge runtime em um dispositivo Linux, configure o gerenciador de pacotes para usar o servidor proxy para acessar o pacote de instalação. Por exemplo, Configurar o apt-get para usar um proxy http. Depois de configurar o gerenciador de pacotes, siga as instruções em Instalar Azure IoT Edge runtime.

Dispositivos Windows usando IoT Edge em Linux no Windows

Se você estiver instalando o IoT Edge runtime usando IoT Edge para Linux no Windows, o runtime do IoT Edge será instalado por padrão na máquina virtual do Linux. Não é necessário instalar nem atualizar outras etapas.

Configurar IoT Edge e Moby

IoT Edge usa dois daemons em execução no dispositivo IoT Edge. O daemon Moby obtém imagens de contêiner de registros de contêiner. O daemon IoT Edge se comunica com Hub IoT.

Configure os daemons moby e IoT Edge para usar o servidor proxy para a funcionalidade contínua do dispositivo. Execute esta etapa no dispositivo IoT Edge durante a instalação inicial.

Daemon do Moby

Como o Moby é criado no Docker, consulte a documentação do Docker para configurar o daemon moby com variáveis de ambiente. A maioria dos registros de contêiner, incluindo o DockerHub e os Registros de Contêiner Azure, dá suporte a solicitações HTTPS, portanto, defina o parâmetro HTTPS_PROXY. Se você está obtendo imagens de um registro que não suporta a segurança da camada de transporte (TLS), você deve definir o parâmetro HTTP_PROXY.

Selecione o artigo que se aplica ao sistema operacional do dispositivo IoT Edge:

Daemon do IoT Edge

O daemon IoT Edge é semelhante ao daemon Moby. Use as etapas a seguir para definir uma variável de ambiente para o serviço, com base em seu sistema operacional.

O daemon IoT Edge sempre usa HTTPS para enviar solicitações para Hub IoT.

Linux

No terminal, abra um editor para configurar o daemon IoT Edge.

sudo systemctl edit aziot-edged

Insira o texto a seguir, substituindo <URL do proxy> pelo endereço e pela porta do seu servidor proxy. Em seguida, salve e saia.

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

A partir da versão 1.2, o IoT Edge usa o serviço de identidade IoT para gerenciar o provisionamento de dispositivos com o Hub IoT ou o Serviço de Provisionamento de Dispositivos do Hub IoT. Abra um editor no terminal para configurar o daemon do serviço de identidade do IoT.

sudo systemctl edit aziot-identityd

Insira o texto a seguir, substituindo <URL do proxy> pelo endereço e pela porta do seu servidor proxy. Em seguida, salve e saia.

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

Recarregue o gerenciador de serviços para aplicar as novas configurações.

sudo systemctl daemon-reload

Reinicie os serviços do sistema de IoT Edge para aplicar as alterações a ambos os daemons.

sudo iotedge system restart

Verifique se as variáveis de ambiente e a nova configuração estão presentes.

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

Windows que usa o IoT Edge para Linux no Windows

Faça login na máquina virtual do IoT Edge para Linux no Windows.

Connect-EflowVm

Siga as mesmas etapas da seção Linux deste artigo para configurar o daemon IoT Edge.

Configurar o agente de IoT Edge

O agente IoT Edge é o primeiro módulo a ser iniciado em qualquer dispositivo IoT Edge. Este módulo é iniciado pela primeira vez com base nas informações no arquivo de configuração IoT Edge. O agente IoT Edge em seguida se conecta ao Hub IoT para obter manifestos de implementação. O manifesto declara quais outros módulos o dispositivo deve implantar.

Esta etapa ocorre uma vez no dispositivo IoT Edge durante a instalação inicial do dispositivo.

  1. Abra o arquivo de configuração em seu dispositivo IoT Edge: /etc/aziot/config.toml. Você precisa de privilégios administrativos para acessar o arquivo de configuração. Em sistemas Linux, use o comando sudo antes de abrir o arquivo no seu editor de texto preferido.

  2. No arquivo de configuração, localize a [agent] seção, que contém todas as informações de configuração do módulo edgeAgent que serão usadas na inicialização. Verifique se a [agent] seção não tem comentários. Se a seção [agent] estiver ausente, adicione-a ao config.toml. A definição do agente IoT Edge inclui uma subseção [agent.env] em que você pode adicionar variáveis de ambiente.

  3. Adicione o parâmetro https_proxy à seção de variáveis de ambiente e defina a URL do proxy como seu 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. O IoT Edge runtime usa AMQP por padrão para se comunicar com Hub IoT. Alguns servidores proxy bloqueiam as portas AMQP. Se for esse o caso, você também precisará configurar o edgeAgent para usar o AMQP em WebSocket. Remova o comentário do UpstreamProtocol parâmetro.

    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # RuntimeLogLevel = "debug"
    UpstreamProtocol = "AmqpWs"
    https_proxy = "<proxy URL>"
    
  5. Salve as alterações e feche o editor. Aplique as alterações.

    sudo iotedge config apply
    
  6. Verifique se as configurações de proxy são aplicadas usando docker inspect edgeAgent na seção Env. Caso contrário, você deve recriar o contêiner.

    sudo docker rm -f edgeAgent
    
  7. O runtime IoT Edge recria edgeAgent em um minuto. Depois que o contêiner edgeAgent estiver sendo executado novamente, use o comando docker inspect edgeAgent para verificar se as configurações de proxy correspondem ao arquivo de configuração.

Configurar manifestos de implantação

Depois de configurar seu dispositivo IoT Edge para trabalhar com o servidor proxy, declare a variável de ambiente HTTPS_PROXY em manifestos de implantação futuros. Você pode editar manifestos de implantação usando o assistente do portal do Azure ou editando um arquivo JSON de manifesto de implantação.

Sempre configure os dois módulos de runtime, edgeAgent e edgeHub, para se comunicarem por meio do servidor proxy para que eles mantenham uma conexão com Hub IoT. Se você remover as informações de proxy do módulo edgeAgent, a única maneira de restabelecer a conexão é editar o arquivo de configuração no dispositivo, conforme descrito na seção anterior.

Além dos módulos edgeAgent e edgeHub, outros módulos podem precisar da configuração de proxy. Os módulos que acessam recursos do Azure além do Hub IoT, como o armazenamento de blobs, devem especificar a variável HTTPS_PROXY no arquivo de manifesto de implantação.

Esse procedimento se aplica ao longo da vida útil do dispositivo IoT Edge.

portal do Azure

Quando você usa o assistente de módulos Set para criar implantações para dispositivos IoT Edge, cada módulo tem uma seção Environment Variables em que você pode configurar conexões de servidor proxy.

Para configurar o agente IoT Edge e os módulos do hub IoT Edge, selecione Configurações de Runtime na primeira etapa do assistente.

Captura de tela de como definir as configurações avançadas do Edge Runtime.

Adicione a variável de ambiente https_proxy para as definições de configurações de runtime de ambos o agente IoT Edge e os módulos do hub IoT Edge. Se você incluir a variável de ambiente UpstreamProtocol no arquivo de configuração em seu dispositivo IoT Edge, adicione-a à definição do módulo do agente IoT Edge também.

Todos os outros módulos adicionados a um manifesto de implantação seguem o mesmo padrão. Selecione Aplicar para salvar as alterações.

Arquivos de manifesto de implantação de JSON

Se você criar implantações para dispositivos IoT Edge usando os modelos em Visual Studio Code ou criando manualmente arquivos JSON, poderá adicionar as variáveis de ambiente diretamente a cada definição de módulo. Se você não adicioná-los no portal Azure, adicione-os aqui ao arquivo de manifesto JSON. Substitua <proxy URL> pelo seu valor.

Use o seguinte formato JSON:

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

Com as variáveis de ambiente incluídas, a definição do módulo se parece com o seguinte exemplo do edgeHub:

"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"
}

Se você incluiu a variável de ambiente UpstreamProtocol no arquivo config.toml em seu dispositivo IoT Edge, adicione-a à definição do módulo do agente IoT Edge também.

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

Trabalhar com proxies de inspeção de tráfego

Alguns proxies, como o Zscaler, podem inspecionar o tráfego criptografado por TLS. Durante a inspeção de tráfego do TLS, o certificado retornado pelo proxy não é o certificado do servidor de destino, mas sim o certificado assinado pelo próprio certificado raiz do proxy. Por padrão, os módulos IoT Edge (incluindo edgeAgent e edgeHub) não confiam no certificado desse proxy e a negociação TLS falha.

Para corrigir a falha de handshake, configure o sistema operacional e os módulos do IoT Edge para confiar no certificado raiz do proxy seguindo estas etapas.

  1. Configure o certificado do proxy no repositório de certificados raiz confiáveis do sistema operacional do host. Para saber como instalar um certificado raiz, confira Instalar a AC raiz no repositório de certificados do sistema operacional.

  2. Configure seu dispositivo IoT Edge para se comunicar por meio de um servidor proxy fazendo referência ao certificado no pacote de confiança. Para obter mais informações sobre como configurar o conjunto de confiança, consulte Gerenciar Autoridade Certificadora raiz confiável (conjunto de confiança).

Para configurar o suporte de proxy de inspeção de tráfego para contêineres não gerenciados por IoT Edge, entre em contato com seu provedor proxy.

FQDNs (nomes de domínio totalmente qualificados) de destinos com os quais IoT Edge se comunica

Se o firewall do proxy exigir a adição de todos os FQDNs à sua lista de permissões para conectividade com a Internet, examine a lista em Permitir conexões de dispositivos IoT Edge para determinar quais FQDNs adicionar.

Próximas etapas

Saiba mais sobre as funções do IoT Edge runtime.

Solucione erros de instalação e configuração em Problemas comuns e resoluções para Azure IoT Edge.