Configure um dispositivo IoT Edge para comunicar através de um servidor proxy

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

Importante

IoT Edge 1.5 LTS é a versão suportada. O IoT Edge 1.4 LTS atingiu o fim de vida útil a 12 de novembro de 2024. Se estiveres a usar uma versão anterior, vê Update IoT Edge.

Os dispositivos IoT Edge enviam pedidos HTTPS para comunicar com o Hub IoT. Se o seu dispositivo se ligar a uma rede que utiliza um servidor proxy, configure o runtime do IoT Edge para comunicar através do servidor. Os servidores proxy também podem afetar módulos IoT Edge individuais se fizerem pedidos HTTP ou HTTPS que não sejam encaminhados através do hub IoT Edge.

Este artigo explica os quatro passos para configurar e gerir um dispositivo IoT Edge atrás de um servidor proxy:

  1. Instale o ambiente de execução IoT Edge no seu dispositivo

    Os scripts de instalação do IoT Edge retiram pacotes e ficheiros da internet, por isso o dispositivo comunica através do servidor proxy para fazer esses pedidos.

    Este passo é um processo único para configurar o dispositivo IoT Edge quando o configura pela primeira vez. Também precisa destas mesmas ligações quando atualiza o runtime do IoT Edge.

  2. Configure o IoT Edge e o runtime do contentor no seu dispositivo

    A IoT Edge gere as comunicações com o Hub IoT. O runtime do contentor gere contentores e comunica-se com registros de contentores. Ambos os componentes precisam fazer solicitações da Web através do servidor proxy.

    Este passo é um processo único para configurar o dispositivo IoT Edge quando o configura pela primeira vez.

  3. Configura as propriedades do agente IoT Edge no ficheiro de configuração do teu dispositivo

    O daemon IoT Edge inicia inicialmente o módulo edgeAgent. Depois, o módulo edgeAgent recupera o manifesto de implementação do 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 IoT Edge faça a ligação inicial ao Hub IoT. Após a conexão inicial, você pode configurar o módulo edgeAgent remotamente.

    Este passo é um processo único para configurar o dispositivo IoT Edge quando o configura pela primeira vez.

  4. Para todas as implantações futuras de módulos, defina variáveis de ambiente para qualquer módulo que se comunique através do proxy

    Após configurar e ligar um dispositivo IoT Edge ao Hub IoT através do servidor proxy, mantenha a ligação em todas as futuras implementações de módulos.

    Esta etapa é um processo contínuo feito remotamente para que cada novo módulo ou atualização de implantação mantenha a capacidade do dispositivo de se comunicar através do servidor proxy.

Conheça o URL do seu proxy

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

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

  • O protocolo é HTTP ou HTTPS. O daemon Docker pode usar qualquer um dos protocolos dependendo das definições do registo do contentor, mas o daemon IoT Edge e os containers de runtime usam sempre HTTP para se ligar 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: user:password@proxy_host.

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

Instale o IoT Edge através de um proxy

Quer o seu dispositivo IoT Edge funcione em Windows ou Linux, aceda aos pacotes de instalação através do servidor proxy. Dependendo do seu sistema operativo, siga os passos para instalar o runtime do IoT Edge através de um servidor proxy.

Dispositivos Linux

Se estiveres a instalar o runtime IoT Edge num dispositivo Linux, configura o gestor de pacotes para usar o teu servidor proxy para aceder ao pacote de instalação. Por exemplo, configure o apt-get para usar um http-proxy. Depois de configurar o gestor de pacotes, siga as instruções em Instalar Azure IoT Edge runtime.

Dispositivos Windows que utilizam IoT Edge para Linux no Windows

Se estiver a instalar o ambiente de execução do IoT Edge usando o IoT Edge para Linux no Windows, o ambiente de execução do IoT Edge é instalado por padrão na sua máquina virtual Linux. Não é necessário instalar ou atualizar quaisquer outros passos.

Configurar IoT Edge e Moby

O IoT Edge utiliza dois daemons a correr no dispositivo IoT Edge. O daemon Moby extrai imagens de contêiner de registros de contêineres. O daemon IoT Edge comunica com o Hub IoT.

Configure tanto os daemons Moby como IoT Edge para usarem o servidor proxy para funcionalidades contínuas do dispositivo. Realize este passo no dispositivo IoT Edge durante a configuração inicial.

Moby daemon

Como o Moby é construído no Docker, consulte a documentação do Docker para configurar o daemon Moby com variáveis de ambiente. A maioria dos registos de contentores, incluindo o DockerHub e Azure Container Registries, suporta pedidos HTTPS, por isso define o parâmetro HTTPS_PROXY. Se você estiver extraindo imagens de um registro que não suporta TLS (Transport Layer Security), defina o parâmetro HTTP_PROXY .

Selecione o artigo que se aplica ao seu sistema operativo de dispositivo IoT Edge:

IoT Edge daemon

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 no seu sistema operacional.

O daemon IoT Edge usa sempre HTTPS para enviar pedidos para o Hub IoT.

Linux

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

sudo systemctl edit aziot-edged

Insira o seguinte texto, substituindo <proxy URL> pelo endereço e 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 utiliza o serviço de identidade IoT para gerir o provisionamento de dispositivos com o Hub IoT ou o Hub IoT Device Provisioning Service. Abra um editor no terminal para configurar o daemon do serviço de identidade IoT.

sudo systemctl edit aziot-identityd

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

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

Atualize o gerenciador de serviços para pegar as novas configurações.

sudo systemctl daemon-reload

Reinicie os serviços do sistema 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 usando IoT Edge para Linux no âmbito do Windows

Inicie sessão no IoT Edge para Linux na máquina virtual Windows:

Connect-EflowVm

Siga os mesmos passos da secção Linux deste artigo para configurar o daemon IoT Edge.

Configurar o agente IoT Edge

O agente IoT Edge é o primeiro módulo a começar em qualquer dispositivo IoT Edge. Este módulo começa pela primeira vez com base na informação do ficheiro de configuração do IoT Edge. O agente IoT Edge liga-se então ao Hub IoT para recuperar os 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 configuração inicial do dispositivo.

  1. Abra o ficheiro de configuração no 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 sudo comando antes de abrir o arquivo em 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 para o módulo edgeAgent usar na inicialização. Verifique se a [agent] seção não tem comentários. Se a seção [agent] estiver faltando, adicione a seção ao config.toml. A definição de agente IoT Edge inclui uma subsecção [agent.env] onde podes adicionar variáveis de ambiente.

  3. Adicione o parâmetro https_proxy à seção de variáveis de ambiente e defina sua URL de 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 runtime do IoT Edge utiliza o AMQP por padrão para comunicar com o Hub IoT. Alguns servidores proxy bloqueiam portas AMQP. Se esse for o caso, você também precisará configurar o edgeAgent para usar AMQP sobre 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 do IoT Edge recria edgeAgent em um minuto. Quando o edgeAgent contêiner estiver sendo executado novamente, use o docker inspect edgeAgent comando para verificar se as configurações de proxy correspondem ao arquivo de configuração.

Configurar manifestos de implantação

Depois de configurar o seu dispositivo IoT Edge para funcionar com o seu servidor proxy, declare a variável de ambiente HTTPS_PROXY nos manifestos de implementação futuras. Pode editar manifestos de implementação usando o assistente do portal Azure ou editando um ficheiro JSON de manifesto de implementação.

Configure sempre os dois módulos de execução, edgeAgent e edgeHub, para comunicarem através do servidor proxy, de modo a que mantenham uma ligação com o 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. 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 ficheiro de manifesto de implementação.

Este procedimento aplica-se ao longo de toda a vida útil do dispositivo IoT Edge.

portal do Azure

Quando usas o assistente Set modules para criar implementações para IoT Edge dispositivos, cada módulo tem uma secção Variáveis de Ambiente onde podes configurar ligações a servidores proxy.

Para configurar os módulos agente IoT Edge e IoT Edge hub, selecione Runtime Settings no primeiro passo do assistente.

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

Adicione a variável de ambiente https_proxy às definições de definições de tempo de execução tanto do agente IoT Edge como do módulo IoT Edge hub. Se incluir a variável de ambiente UpstreamProtocol no ficheiro de configuração do seu dispositivo IoT Edge, adicione-a também à definição do módulo de agente IoT Edge.

Todos os outros módulos que você adiciona a um manifesto de implantação seguem o mesmo padrão. Selecione Aplicar para guardar as alterações.

Arquivos de manifesto de implantação JSON

Se criar implementações para dispositivos IoT Edge usando os templates no Visual Studio Code ou criando manualmente ficheiros JSON, pode adicionar as variáveis de ambiente diretamente a cada definição de módulo. Se não os adicionaste no portal do Azure, adiciona-os aqui ao teu ficheiro de manifestos 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 de 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 incluiu a variável de ambiente UpstreamProtocol no ficheiro config.toml do seu dispositivo IoT Edge, adicione-a também à definição do módulo IoT Edge agent.

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

Trabalhando com proxies para inspeção de tráfego

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

Para corrigir o aperto de mão falhado, configure tanto o sistema operativo como os módulos IoT Edge para confiarem no certificado raiz do proxy, seguindo estes passos.

  1. Configure o certificado de proxy no armazenamento de certificados raiz confiável do seu sistema operacional host. Para obter mais informações sobre como instalar um certificado raiz, consulte Instalar a autoridade de certificação raiz no repositório de certificados do sistema operacional.

  2. Configure o seu dispositivo IoT Edge para comunicar através de um servidor proxy, referenciando o certificado no trust bundle. Para obter mais informações sobre como configurar o pacote de confiança, consulte Gerenciar CA raiz confiável (pacote de confiança).

Para configurar suporte de proxies de inspeção de tráfego para containers não geridos pela IoT Edge, contacte o seu fornecedor de proxy.

Nomes de domínio totalmente qualificados (FQDNs) dos destinos com que o IoT Edge comunica

Se o firewall do seu proxy exigir a adição de todos os FQDNs à sua lista de permissões para conectividade à internet, reveja a lista de Permitir ligações de dispositivos IoT Edge para determinar quais FQDNs adicionar.

Próximos passos

Saiba mais sobre as funções do tempo de execução IoT Edge.

Resolução de erros de instalação e configuração em Questões comuns e suas resoluções para Azure IoT Edge.