Настройка устройства IoT Edge для обмена данными через прокси-сервер
Область применения: IoT Edge 1.1
Внимание
Дата окончания поддержки IoT Edge 1.1 была 13 декабря 2022 г. Чтобы получить сведения о поддержке определенного продукта, службы, технологии или API, перейдите на страницу Политика жизненного цикла поддержки Майкрософт. Дополнительные сведения об обновлении до последней версии IoT Edge см. в разделе "Обновление IoT Edge".
Устройства IoT Edge отправляют HTTPS-запросы для обмена данными с центром IoT. Если устройство подключено к сети, которая использует прокси-сервер, необходимо настроить среду выполнения IoT Edge для обмена данными через сервер. Прокси-серверы могут также влиять на отдельные модули IoT Edge, если они отправляют HTTP- или HTTPS-запросы, которые невозможно направить через центр IoT Edge.
В этой статье описаны четыре этапа для настройки и управления устройства IoT Edge через прокси-сервер.
Установка среды выполнения IoT Edge на устройстве
Скрипты для установки IoT Edge загружают пакеты и файлы из Интернета, чтобы ваше устройство могло выполнять запросы через прокси-сервер. На устройствах под управлением Windows скрипт поддерживает автономную установку.
На этом этапе вам предстоит настроить устройство IoT Edge для дальнейшего использования. При обновлении среды выполнения IoT Edge вам понадобится установить те же соединения.
Настройка IoT Edge и среды выполнения контейнеров на устройстве
IoT Edge обеспечивает обмен данными с Центром Интернета вещей. Для управления контейнерами эта среда выполнения обменивается данными с реестрами контейнеров. Оба этих компонента выполняют веб-запросы через прокси-сервер.
На этом этапе вам предстоит настроить устройство IoT Edge для дальнейшего использования.
Настройка свойств агента IoT Edge в файле конфигурации на вашем устройстве
Управляющая программа IoT Edge запускает модуль edgeAgent. Затем модуль edgeAgent извлекает манифест развертывания из Центра Интернета вещей и запускает все остальные модули. Чтобы наладить соединение агента IoT Edge к Центру Интернета вещей, вручную настройте переменные среды модуля edgeAgent на самом устройстве. После того как исходное соединение будет установлено, вы сможете настроить модуль edgeAgent удаленно.
На этом этапе вам предстоит настроить устройство IoT Edge для дальнейшего использования.
-
После того как устройство 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
.
Для доступа к сценарию установщика команде Invoke-WebRequest требуются сведения о прокси-сервере. Затем команде Deploy-IoTEdge требуются сведения о прокси-сервере для загрузки файлов установки.
. {Invoke-WebRequest -proxy <proxy URL> -useb aka.ms/iotedge-win} | Invoke-Expression; Deploy-IoTEdge -proxy <proxy URL>
Команде 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. Дополнительные сведения о параметрах установки Windows см. в разделе Сценарии PowerShell для IoT Edge в Windows.
Настройка 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.
- Настройка управляющей программы Docker в Linux Управляющая программа Moby на устройствах Linux оставляет себе имя Docker.
- Настройка управляющей программы Docker в Windows Управляющая программа Moby на устройствах Windows называется iotedge-moby. У управляющих программ разные имена, поскольку Docker и Moby можно запустить одновременно на одном устройстве Windows.
Управляющая программа IoT Edge
Управляющая программа IoT Edge настраивается точно так же, как управляющая программа Moby. Создайте переменную среды для службы, выполнив указанные ниже действия с учетом своей операционной системы.
Для отправки запросов в Центр Интернета вещей управляющая программа IoT Edge всегда использует протокол HTTPS.
Linux
Откройте редактор в терминале, чтобы настроить управляющую программу IoT Edge.
sudo systemctl edit iotedge
Введите следующий текст, заменив <URL-адрес> прокси-сервера адресом и портом прокси-сервера. Сохранитесь и закройте редактор.
[Service]
Environment=https_proxy=<proxy URL>
Обновите диспетчер служб, чтобы получить новую конфигурацию для IoT Edge.
sudo systemctl daemon-reload
Перезапустите IoT Edge, чтобы изменения вступили в силу.
sudo systemctl restart iotedge
Убедитесь, что переменная среды была создана, а новая конфигурация загружена.
systemctl show --property=Environment iotedge
Устройства 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. Затем агент Edge подключается к Центру Интернета вещей для получения манифестов развертывания и таким образом сообщает, что на устройстве можно развертывать и другие модули.
Эта настройка выполняется один раз на устройстве IoT Edge во время первоначальной конфигурации устройства.
Откройте файл config.yaml на устройстве IoT Edge. В системах Linux он находится в папке /etc/iotedge/config.yaml. В системах Windows он находится в папке C:\ProgramData\iotedge\config.yaml. Файл конфигурации защищен, поэтому для доступа к этому файлу требуются права администратора. Прежде чем открывать файл в предпочтительном текстовом редакторе в системах Linux, выполните команду
sudo
. В Windows сначала нужно запустить текстовый редактор, например Блокнот, от имени администратора, а затем открыть файл.В файле config.yaml найдите раздел Edge Agent module spec. Определение агента IoT Edge включает параметр env, в который можно добавить переменные среды.
Удалите фигурные скобки, которые служат заменителями для параметра env, и добавьте новую переменную в новой строке. Помните, что отступы в YAML составляют два пробела.
https_proxy: "<proxy URL>"
По умолчанию среда выполнения IoT Edge использует AMQP для обмена данными с центром IoT. Некоторые прокси-серверы блокируют порты AMQP. Если это так, настройте edgeAgent на использование протокола AMQP через WebSocket. Добавьте вторую переменную среды.
UpstreamProtocol: "AmqpWs"
Сохраните изменения в файле config.yaml и закройте редактор. Перезапустите IoT Edge, чтобы изменения вступили в силу.
Linux и IoT Edge для Linux в Windows:
sudo systemctl restart iotedge
Windows с использованием контейнеров Windows:
Restart-Service iotedge
Добавьте параметр 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>"
По умолчанию среда выполнения 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>"
Сохраните изменения и закройте редактор. Примените недавние изменения.
sudo iotedge config apply
Убедитесь, что параметры прокси-сервера распространяются в
docker inspect edgeAgent
Env
разделе. В противном случае контейнер должен быть повторно создан.sudo docker rm -f edgeAgent
Среда выполнения 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, выберите пункт Параметры среды выполнения в первом шаге мастера.
Добавьте переменную среды https_proxy и в агент IoT Edge, и в определения модуля центра IoT Edge. Если вы добавили переменную среды UpstreamProtocol в файл конфигурации на устройстве IoT Edge, добавьте ее также в определение модуля агента IoT Edge.
Все остальные модули, добавляемые в манифест развертывания, должны соответствовать той же схеме.
Файлы манифеста развертывания JSON
Если вы создаете развертывания для устройств IoT Edge с помощью шаблонов в Visual Studio Code или путем создания JSON-файлов вручную, вы можете добавить переменные среды в определение каждого модуля напрямую.
Используйте следующий формат JSON:
"env": {
"https_proxy": {
"value": "<proxy URL>"
}
}
С переменными среды определение модуля должно выглядеть как в следующем примере центра Edge:
"edgeHub": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.1",
"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.
Настройте прокси-сертификат в доверенном корневом хранилище сертификатов операционной системы узла. Дополнительные сведения об установке корневого сертификата см. в разделе "Установка корневого ЦС" в хранилище сертификатов ОС.
Настройте устройство IoT Edge для обмена данными через прокси-сервер, ссылаясь на сертификат в пакете доверия. Дополнительные сведения о настройке пакета доверия см. в разделе Управление доверенным корневым ЦС (пакетом доверия).
Чтобы настроить поддержку прокси-сервера проверки трафика для контейнеров, не управляемых IoT Edge, обратитесь к поставщику прокси-сервера.
Полные доменные имена (FQDN) назначений, с которыми взаимодействует IoT Edge
Если у прокси-сервера есть брандмауэр, для которого требуется разрешить список всех полных доменных имен для подключения к Интернету, просмотрите список из списка разрешений подключений с устройств IoT Edge, чтобы определить, какие полные доменные имена необходимо добавить.
Следующие шаги
Дополнительные сведения о ролях см. в статье о среде выполнения IoT Edge.
Информацию об устранении ошибок при установке и настройке см. в статье Распространенные проблемы и их решения для Azure IoT Edge.