Настройка устройства IoT Edge для обмена данными через прокси-сервер

Область применения:IoT Edge 1.4 флажок IoT Edge 1.4

Важно!

IoT Edge 1.4 является поддерживаемым выпуском. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

Устройства IoT Edge отправляют HTTPS-запросы для обмена данными с центром IoT. Если вы подключили устройство к сети, которая использует прокси-сервер, необходимо настроить среду выполнения IoT Edge для обмена данными через сервер. Прокси-серверы также могут влиять на отдельные модули IoT Edge, если они выполняют HTTP- или HTTPS-запросы, которые вы не перенаправили через концентратор IoT Edge.

В этой статье описаны четыре этапа для настройки и управления устройства IoT Edge через прокси-сервер.

  1. Установка среды выполнения IoT Edge на устройстве

    Скрипты для установки IoT Edge загружают пакеты и файлы из Интернета, чтобы ваше устройство могло выполнять запросы через прокси-сервер. На устройствах под управлением Windows скрипт поддерживает автономную установку.

    На этом этапе вам предстоит настроить устройство IoT Edge для дальнейшего использования. Эти же подключения также требуются при обновлении среды выполнения IoT Edge.

  2. Настройка IoT Edge и среды выполнения контейнеров на устройстве

    IoT Edge обеспечивает обмен данными с Центром Интернета вещей. Для управления контейнерами эта среда выполнения обменивается данными с реестрами контейнеров. Оба этих компонента выполняют веб-запросы через прокси-сервер.

    На этом этапе вам предстоит настроить устройство IoT Edge для дальнейшего использования.

  3. Настройка свойств агента IoT Edge в файле конфигурации на вашем устройстве

    Управляющая программа IoT Edge запускает модуль edgeAgent. Затем модуль edgeAgent извлекает манифест развертывания из Центра Интернета вещей и запускает все остальные модули. Настройте переменные среды модуля edgeAgent вручную на самом устройстве, чтобы агент IoT Edge смог установить начальное подключение к Центр Интернета вещей. После того как исходное соединение будет установлено, вы сможете настроить модуль edgeAgent удаленно.

    На этом этапе вам предстоит настроить устройство IoT Edge для дальнейшего использования.

  4. На случай развертывания модулей в будущем задайте переменные среды для любого модуля, который будет обмениваться данными через прокси-сервер

    После настройки и подключения устройства IoT Edge к Центр Интернета вещей через прокси-сервер необходимо поддерживать подключение во всех будущих развертываниях модулей.

    Это непрерывный процесс, который выполняется удаленно, благодаря чему каждый новый модуль или обновление развертывания поддерживает функцию обмена данными через прокси-сервер.

Узнайте URL-адрес своего прокси-сервера

Прежде чем приступать к описанным здесь действиям, вам необходимо узнать URL-адрес прокси-сервера.

URL-адрес прокси-сервера имеет такой формат: протокол://узел прокси-сервера:порт прокси-сервера.

  • Используется протокол HTTP или HTTPS. Управляющая программа Docker может использовать любой из протоколов, в зависимости от параметров реестра контейнеров, но для подключения управляющей программы IoT Edge и контейнеров среды выполнения к прокси-серверу всегда следует использовать протокол HTTP.

  • Узел прокси-сервера — это адрес прокси-сервера. Если прокси-сервер требует проверки подлинности, можно указать учетные данные в параметре "узел прокси-сервера" в следующем формате: пользователь:пароль@узел прокси-сервера.

  • Порт прокси-сервера — это сетевой порт, по которому прокси-сервер отвечает на сетевой трафик.

Установка IoT Edge через прокси-сервер

Вне зависимости от того, под управлением какой ОС работает ваше устройство IoT Edge — будь то Windows или Linux, — вам необходим доступ к пакетам установки через прокси-сервер. Установите среду выполнения IoT Edge через прокси-сервер, следуя инструкциям для своей операционной системы.

Устройства Linux

При установке среды выполнения IoT Edge на устройстве Linux настройте в диспетчере пакетов прохождение через прокси-сервер для доступа к пакету установки. Например, настройте apt-get для использования прокси-сервера HTTP. После настройки диспетчера пакетов следуйте инструкциям в статье Установка среды выполнения azure IoT Edge обычным образом.

Устройства Windows, использующие IoT Edge для Linux в Windows

Если вы устанавливаете среду выполнения IoT Edge с помощью IoT Edge для Linux в Windows, IoT Edge по умолчанию устанавливается на виртуальной машине Linux. Вам не требуется устанавливать или обновлять другие действия.

Устройства Windows, использующие контейнеры Windows

При установке среды выполнения IoT Edge на устройстве Windows понадобится дважды установить соединение с прокси-сервером. При первом подключении загружается файл сценария установщика, а при втором подключении при установке загружаются необходимые компоненты. Сведения о прокси-сервере можно настроить в параметрах Windows или включить непосредственно в команды PowerShell.

Ниже описан пример установки в Windows с помощью аргумента -proxy.

  1. Для доступа к сценарию установщика команде Invoke-WebRequest требуются сведения о прокси-сервере. Затем команде Deploy-IoTEdge требуются сведения о прокси-сервере для загрузки файлов установки.

    . {Invoke-WebRequest -proxy <proxy URL> -useb aka.ms/iotedge-win} | Invoke-Expression; Deploy-IoTEdge -proxy <proxy URL>
    
  2. Команде Initialize-IoTEdge не нужно проходить через прокси-сервер, поэтому на втором шаге сведения о прокси-сервере требуются только для Invoke-WebRequest.

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

Если у вас есть сложные учетные данные для прокси-сервера, которые нельзя включить в URL-адрес, используйте -ProxyCredential параметр в .-InvokeWebRequestParameters Например,

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

Дополнительные сведения о параметрах прокси-сервера см. в статье Invoke-WebRequest.

Настройка IoT Edge и Moby

IoT Edge работает с помощью двух управляющих программ, выполняющихся на устройстве IoT Edge. Управляющая программа Moby создает веб-запросы для получения образов контейнеров из реестров контейнеров. Управляющая программа IoT Edge отправляет HTTPS-запросы для обмена данными с центром IoT.

Необходимо настроить управляющие программы Moby и IoT Edge для использования прокси-сервера для текущей функциональности устройства. Эта настройка выполняется на устройстве IoT Edge во время первоначальной конфигурации устройства.

Управляющая программа Moby

Поскольку Moby создан на базе Docker, инструкции по настройке переменных среды для управляющей программы Moby см. в документации Docker. Большинство реестров контейнеров (включая DockerHub и реестры контейнеров Azure) поддерживают HTTPS-запросы, поэтому необходимо задать параметр HTTPS_PROXY. Если вы извлекаете образы из реестра, который не поддерживает протокол TLS, необходимо задать параметр HTTP_PROXY.

Выберите статью, содержащую инструкцию для операционной системы вашего устройства IoT Edge.

Управляющая программа IoT Edge

Управляющая программа IoT Edge аналогична управляющей программе Moby. Создайте переменную среды для службы, выполнив указанные ниже действия с учетом своей операционной системы.

Для отправки запросов в Центр Интернета вещей управляющая программа IoT Edge всегда использует протокол HTTPS.

Linux

Откройте редактор в терминале, чтобы настроить управляющую программу IoT Edge.

sudo systemctl edit aziot-edged

Введите следующий текст, заменив <URL-адрес> прокси-сервера адресом и портом прокси-сервера. Сохранитесь и закройте редактор.

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

Начиная с версии 1.2, IoT Edge использует службу идентификации IoT для подготовки устройств к добавлению в Центр Интернета вещей. Откройте редактор в терминале и настройте управляющую программу службы идентификации.

sudo systemctl edit aziot-identityd

Введите следующий текст, заменив <URL-адрес> прокси-сервера адресом и портом прокси-сервера. Сохранитесь и закройте редактор.

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

Обновите диспетчер служб, чтобы получить новые конфигурации.

sudo systemctl daemon-reload

Перезапустите системные службы IoT Edge, чтобы изменения обеих управляющих программ вступили в силу.

sudo iotedge system restart

Убедитесь, что переменные среды и новая конфигурация присутствуют.

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

Устройства Windows, использующие IoT Edge для Linux в Windows

Войдите в свою IoT Edge для Linux на виртуальной машине Windows:

Connect-EflowVm

Для настройки управляющей программы IoT Edge выполните те же действия, что и в разделе linux этой статьи.

Windows с использованием контейнеров Windows

Откройте окно PowerShell от имени администратора и выполните следующую команду, чтобы внести изменения в реестр с помощью новой переменной среды. Замените <URL-адрес> прокси-сервера адресом и портом прокси-сервера.

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

Перезапустите IoT Edge, чтобы изменения вступили в силу.

Restart-Service iotedge

Настройка агента IoT Edge

Агент IoT Edge — это первый модуль, который нужно запустить на любом устройстве IoT Edge. Этот модуль впервые запускается на основе сведений в файле конфигурации IoT Edge. Затем агент IoT Edge подключается к Центр Интернета вещей для получения манифестов развертывания. Манифест объявляет, какие другие модули устройство должно развернуть.

Эта настройка выполняется один раз на устройстве IoT Edge во время первоначальной конфигурации устройства.

  1. Откройте файл конфигурации на устройстве IoT Edge: /etc/aziot/config.toml. Для доступа к файлу конфигурации требуются права администратора. Прежде чем открывать файл в предпочтительном текстовом редакторе в системах Linux, выполните команду sudo.

  2. В файле конфигурации найдите [agent] раздел, где содержатся все сведения о конфигурации для запуска модуля edgeAgent. Убедитесь, что [agent] раздел не содержит комментариев. [agent] Если раздел отсутствует, добавьте его в config.toml. Определение агента IoT Edge включает подраздел [agent.env], в который можно добавить переменные среды.

  3. Добавьте параметр https_proxy в раздел переменных среды, а в качестве его значения укажите URL-адрес прокси-сервера.

    [agent]
    name = "edgeAgent"
    type = "docker"
    
    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.4"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    # "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  4. По умолчанию среда выполнения IoT Edge использует AMQP для обмена данными с центром IoT. Некоторые прокси-серверы блокируют порты AMQP. Если это так, настройте edgeAgent на использование протокола AMQP через WebSocket. Раскомментируйте параметр UpstreamProtocol.

    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.4"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  5. Добавьте параметр https_proxy в раздел переменных среды, а в качестве его значения укажите URL-адрес прокси-сервера.

    [agent]
    name = "edgeAgent"
    type = "docker"
    
    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.4"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    # "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  6. По умолчанию среда выполнения IoT Edge использует AMQP для обмена данными с центром IoT. Некоторые прокси-серверы блокируют порты AMQP. Если это так, настройте edgeAgent на использование протокола AMQP через WebSocket. Раскомментируйте параметр UpstreamProtocol.

    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.4"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  7. Сохраните изменения и закройте редактор. Примените недавние изменения.

    sudo iotedge config apply
    
  8. Убедитесь, что параметры прокси-сервера распространяются с помощью docker inspect edgeAgent в Env разделе . В противном случае необходимо повторно создать контейнер.

    sudo docker rm -f edgeAgent
    
  9. Среда выполнения IoT Edge должна повторно создаться edgeAgent в течение минуты. После повторного edgeAgent запуска контейнера используйте docker inspect edgeAgent команду , чтобы убедиться, что параметры прокси-сервера соответствуют файлу конфигурации.

Настройка манифестов развертывания

После настройки устройства IoT Edge для работы с прокси-сервером объявите переменную среды HTTPS_PROXY в манифестах будущих развертываний. Редактировать манифесты развертывания можно либо с помощью мастера на портале Azure, либо напрямую в файле манифеста развертывания в формате JSON.

Всегда настраивайте два модуля среды выполнения, edgeAgent и edgeHub, для связи через прокси-сервер, чтобы они могли поддерживать соединение с Центром Интернета вещей. Если вы удалите сведения о прокси-сервере из модуля edgeAgent, то для восстановления подключения вам необходимо будет внести изменения в файл конфигурации на устройстве, как это описано в предыдущем разделе.

Конфигурация прокси-сервера может понадобиться и на других модулях, помимо edgeAgent и edgeHub. Если модулям нужен доступ не только к Центру Интернета вещей, но и другим ресурсам Azure, например хранилищу BLOB-объектов, в файле манифеста развертывания должна быть указана переменная HTTPS_PROXY.

Следующая процедура выполняется посредством устройства IoT Edge.

Портал Azure

Когда вы создаете развертывания для устройств IoT Edge с помощью мастера Настройка модулей, каждый модуль включает раздел Переменные среды, где вы можете настроить подключения прокси-сервера.

Чтобы настроить агент IoT Edge и модули центра IoT Edge, выберите пункт Параметры среды выполнения в первом шаге мастера.

Снимок экрана: настройка дополнительных параметров среды выполнения Edge.

Добавьте переменную среды https_proxy и в агент IoT Edge, и в определения модуля центра IoT Edge. Если вы добавили переменную среды UpstreamProtocol в файл конфигурации на устройстве IoT Edge, добавьте ее также в определение модуля агента IoT Edge.

Снимок экрана: настройка переменной среды https_proxy.

Все остальные модули, добавляемые в манифест развертывания, должны соответствовать той же схеме. Щелкните Применить, чтобы сохранить изменения.

Файлы манифеста развертывания JSON

Если вы создаете развертывания для устройств IoT Edge с помощью шаблонов в Visual Studio Code или путем создания JSON-файлов вручную, вы можете добавить переменные среды в определение каждого модуля напрямую. Если вы не добавили их в портал Azure, добавьте их здесь в файл манифеста JSON. Замените <proxy URL> собственным значением.

Используйте следующий формат JSON:

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

С переменными среды определение модуля должно выглядеть как в следующем примере центра Edge:

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

Если вы добавили переменную среды UpstreamProtocol в файл config.yaml на устройстве IoT Edge, добавьте ее также в определение модуля агента IoT Edge.

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

Работа с прокси-серверами для проверки трафика

Некоторые прокси-серверы, такие как Zscaler, могут проверять трафик с шифрованием TLS. Во время проверки трафика TLS сертификат, возвращаемый прокси-сервером, не является сертификатом с целевого сервера, а сертификатом, подписанным собственным корневым сертификатом прокси-сервера. По умолчанию IoT Edge модули (включая edgeAgent и edgeHub) не доверяют сертификату этого прокси-сервера, и подтверждение TLS завершается сбоем.

Чтобы устранить неудачное подтверждение, настройте модули операционной системы и IoT Edge на доверие корневому сертификату прокси-сервера, выполнив следующие действия.

  1. Настройте прокси-сертификат в доверенном корневом хранилище сертификатов операционной системы узла. Дополнительные сведения об установке корневого сертификата см. в разделе Установка корневого ЦС в хранилище сертификатов ОС.

  2. Настройте устройство IoT Edge для обмена данными через прокси-сервер, указав ссылку на сертификат в пакете доверия. Дополнительные сведения о настройке пакета доверия см. в разделе Управление доверенным корневым ЦС (пакетом доверия).

Чтобы настроить поддержку прокси-сервера проверки трафика для контейнеров, не управляемых IoT Edge, обратитесь к поставщику прокси-сервера.

Полные доменные имена (FQDN) назначений, с которыми IoT Edge взаимодействует

Если брандмауэру прокси-сервера требуется добавить все полные доменные имена в список разрешений для подключения к Интернету, просмотрите список в разделе Разрешить подключения с IoT Edge устройств, чтобы определить, какие полные доменные имена следует добавить.

Дальнейшие действия

Дополнительные сведения о ролях см. в статье о среде выполнения IoT Edge.

Информацию об устранении ошибок при установке и настройке см. в статье Распространенные проблемы и их решения для Azure IoT Edge.