Руководство. Создание иерархии устройств IoT Edge с помощью IoT Edge для Linux в Windows
Область применения: IoT Edge 1.5
Внимание
IoT Edge 1.5 LTS является поддерживаемым выпуском. IoT Edge 1.4 LTS заканчивается жизнью с 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.
Узлы Azure IoT Edge можно развертывать в сетях, упорядоченных в иерархических слоях. Каждый слой в иерархии — это устройство шлюза, которое обрабатывает сообщения и запросы от устройств, находящихся в слое под ним. Эта конфигурация также называется вложенным краем.
Структурировать иерархию устройств можно так, чтобы только верхний слой имел возможность подключения к облаку, а нижние слои могли взаимодействовать только с соседними северным и южным слоями. Такое сетевое наложение — это основа большинства промышленных сетей, соответствующих стандарту ISA-95.
В этом руководстве описывается создание иерархии устройств IoT Edge с помощью IoT Edge для Linux в Windows, развертывание контейнеров среды выполнения IoT Edge на устройствах и настройка устройств локально. Выполните следующие задачи:
- создавать и определять связи в иерархии устройств IoT Edge;
- настраивать среду выполнения IoT Edge на устройствах в иерархии;
- устанавливать согласованные сертификаты в иерархии устройств;
- добавлять рабочие нагрузки на устройства в иерархии;
- использовать модуль прокси-сервера API IoT Edge для безопасной маршрутизации трафика HTTP через один порт на устройствах нижнего слоя.
Совет
В этом учебнике содержится набор шагов, выполняемых вручную или автоматизированно, которые демонстрируют использование вложенных функций IoT Edge.
Если вы хотите полностью автоматизированный взгляд на настройку иерархии устройств IoT Edge, вы руководствуейтесь собственным скриптом на основе скрипта Azure IoT Edge для промышленного Интернета вещей. Этот основанный на скриптах сценарий развертывает виртуальные машины Azure в качестве предварительно настроенных устройств для имитации заводской среды.
Если вы хотите больше узнать о том, как вручную создать иерархию IoT Edge устройств и управлять ею, см. практическое руководство по иерархии шлюзов устройств IOT Edge.
В этом учебнике определены следующие слои сети.
Верхний уровень: устройства IoT Edge на этом уровне могут подключаться непосредственно к облаку.
Более низкие уровни: устройства IoT Edge на уровнях ниже верхнего слоя не могут подключаться непосредственно к облаку. Для отправки и получения данных им нужно миновать одно или несколько промежуточных устройств IoT Edge.
Для простоты в этом учебнике используется иерархия двух устройств. Устройство верхнего уровня представляет устройство на верхнем уровне иерархии, которое может подключаться непосредственно к облаку. Это устройство называется родительским устройством. Устройство нижнего уровня представляет устройство на нижнем уровне иерархии, которое не может подключиться непосредственно к облаку. Вы можете добавить дополнительные устройства для представления рабочей среды по мере необходимости. Устройства на более низких уровнях называются дочерними устройствами.
Примечание.
Дочернее устройство может быть подчиненным устройством или устройством шлюза в вложенной топологии.
Необходимые компоненты
Чтобы создать иерархию устройств IoT Edge, вам потребуется:
- Установленная оболочка Bash в Azure Cloud Shell с Azure CLI версии 2.3.1 и расширением Azure IoT версии 0.10.6 или более поздней. В этом учебнике используется Azure Cloud Shell. Чтобы просмотреть текущие версии расширений и модулей Azure CLI, выполните команду az version.
- Два устройства Windows под управлением Azure IoT Edge для Linux в Windows. Оба устройства должны развертываться с помощью внешнего виртуального коммутатора.
Совет
Можно использовать внутренний или стандартный виртуальный коммутатор, если переадресация портов настроена в ос узла Windows. Однако для простоты этого руководства оба устройства должны использовать внешний виртуальный коммутатор и подключаться к одной внешней сети.
Дополнительные сведения о сети см. в разделе Azure IoT Edge для Linux в сети Windows и конфигурации сети для Azure IoT Edge для Linux в Windows.
Если вам нужно настроить устройства EFLOW в dmZ, см. инструкции по настройке Azure IoT Edge для Linux в конфигурации Windows Industrial IoT и DMZ.
- Учетная запись Azure с действительной подпиской. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.
- Центр Интернета вещей ценовой категории "Бесплатный" или "Стандартный" в Azure.
- Убедитесь, что для всех устройств, кроме самого низкого уровня, открыты следующие порты: 443, 5671, 8883:
- Порт 443 используется для вызовов REST API между родительским и дочерними центрами Edge и для извлечения образов из контейнеров Docker.
- 5671, 8883: используется для AMQP и MQTT.
Совет
Дополнительные сведения о брандмауэре виртуальной машины EFLOW см. в статье IoT Edge для Linux в системе безопасности Windows.
Создание иерархии устройств IoT Edge
Устройства IoT Edge составляют слои вашей иерархии. В этом руководстве создается иерархия двух устройств IoT Edge: устройства верхнего уровня и устройства нижнего уровня. При необходимости можно создать более подчиненные устройства.
Чтобы создать и настроить иерархию устройств IoT Edge, используйте команду az iot edge devices create Azure CLI. Эта команда упрощает настройку иерархии, автоматив и уплотнив несколько шагов:
- Создает устройства в Центр Интернета вещей
- Задает отношения "родительский-дочерний" для авторизации обмена данными между устройствами
- Применение манифеста развертывания к каждому устройству
- Создает цепочку сертификатов для каждого устройства для установления безопасного взаимодействия между ними
- Создает файлы конфигурации для каждого устройства
Создание конфигурации устройства
Вы создаете группу вложенных пограничных устройств с родительским устройством с одним дочерним устройством. В этом руководстве мы используем базовые примеры манифестов развертывания. Дополнительные примеры сценариев см. в шаблонах примеров конфигурации.
Прежде чем использовать команду создания устройств az iot edge, необходимо определить манифест развертывания для устройств верхнего уровня и нижнего слоя. Скачайте deploymentTopLayer.json пример файла на локальный компьютер.
Манифест развертывания устройства верхнего уровня определяет модуль прокси-сервера API IoT Edge и объявляет маршрут от устройства нижнего уровня к Центр Интернета вещей.
Скачайте deploymentLowerLayer.json пример файла на локальный компьютер.
Манифест развертывания устройства нижнего слоя включает модуль имитированного датчика температуры и объявляет маршрут к устройству верхнего уровня. В разделе systemModules можно увидеть, что модули среды выполнения настроены для извлечения из $upstream:443, а не mcr.microsoft.com. Устройство нижнего слоя отправляет образ Docker запрашивает модуль прокси-сервера API IoT Edge через порт 443, так как он не может напрямую извлекать изображения из облака. Другой модуль, развернутый на устройстве нижнего уровня (модуль Simulated Temperature Sensor), также отправляет запрос на получение образа в
$upstream:443
.Дополнительные сведения о создании манифеста развертывания нижнего слоя см. в статье "Подключение устройств Azure IoT Edge для создания иерархии".
В Azure Cloud Shell используйте команду az iot edge device create Azure CLI для создания устройств в Центр Интернета вещей и пакетах конфигурации для каждого устройства в иерархии. Замените следующие заполнители соответствующими значениями:
Заполнитель Description <имя концентратора> Имя Центра Интернета вещей. <config-bundle-output-path> Путь к папке, в котором требуется сохранить пакеты конфигурации. <parent-device-name> Имя идентификатора родительского устройства верхнего уровня . <parent-deployment-manifest> Файл манифеста развертывания родительского устройства. <parent-fqdn-or-ip> Полное доменное имя родительского устройства (FQDN) или IP-адрес. <child-device-name> Имя дочернего устройства нижнего уровня . <дочерний манифест развертывания> Файл манифеста развертывания дочернего устройства. <child-fqdn-or-ip> Полное доменное имя дочернего устройства (FQDN) или IP-адрес. az iot edge devices create \ --hub-name <hub-name> \ --output-path <config-bundle-output-path> \ --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.5" \ --device id=<parent-device-name> \ deployment=<parent-deployment-manifest> \ hostname=<parent-fqdn-or-ip> \ --device id=child-1 \ parent=parent-1 \ deployment=<child-deployment-manifest> \ hostname=<child-fqdn-or-ip>
Например, следующая команда создает иерархию двух устройств IoT Edge в Центр Интернета вещей. Устройство верхнего слоя с именем parent-1 и устройство нижнего слоя с именем child-1*. Команда сохраняет пакеты конфигурации для каждого устройства в выходном каталоге. Команда также создает самозаверяющие тестовые сертификаты и включает их в пакет конфигурации. Пакеты конфигурации устанавливаются на каждом устройстве с помощью скрипта установки.
az iot edge devices create \ --hub-name my-iot-hub \ --output-path ./output \ --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.5" \ --device id=parent-1 \ deployment=./deploymentTopLayer.json \ hostname=10.0.0.4 \ --device id=child-1 \ parent=parent-1 \ deployment=./deploymentLowerLayer.json \ hostname=10.1.0.4
После выполнения команды можно найти пакеты конфигурации устройства в выходном каталоге. Например:
PS C:\nested-edge\output> dir
Directory: C:\nested-edge\output
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 4/10/2023 4:12 PM 7192 child-1.tgz
-a--- 4/10/2023 4:12 PM 6851 parent-1.tgz
Вы можете использовать собственные сертификаты и ключи, переданные в качестве аргументов в команду, или создать более сложную иерархию устройств. Дополнительные сведения о создании вложенных устройств с помощью команды az см. в статье az iot edge devices create. Если вы не знакомы с тем, как сертификаты используются в сценарии шлюза, ознакомьтесь с разделом сертификатов руководства.
В этом руководстве вы используете встроенные аргументы для создания устройств и пакетов конфигурации. Вы также можете использовать файл конфигурации в формате YAML или JSON. Пример файла конфигурации см. в примере sample_devices_config.yaml.
Настройка среды выполнения IoT Edge
Помимо подготовки устройств, шаги настройки позволяет установить доверенный обмен данными между устройствами в иерархии с использованием ранее созданных сертификатов. Эти шаги также начнут формировать сетевую структуру иерархии. Устройство верхнего уровня поддерживает подключение к Интернету, позволяя ему извлекать образы для своей среды выполнения из облака, а устройства нижнего слоя направляются через устройство верхнего слоя для доступа к этим изображениям.
Чтобы настроить среду выполнения IoT Edge, необходимо применить пакеты конфигурации к устройствам. Конфигурации отличаются между устройством верхнего уровня и устройством нижнего уровня, поэтому учитывайте файл конфигурации устройства, который вы применяете к каждому устройству.
Каждому устройству нужен свой пакет конфигурации. Для перемещения пакетов конфигурации на каждое устройство можно использовать USB-накопитель или безопасное копирование файлов. Необходимо скопировать пакет конфигурации в операционную систему узла Windows каждого устройства EFLOW, а затем скопировать его на виртуальную машину EFLOW.
Предупреждение
Обязательно проследите за тем, чтобы на каждое устройство был скопирован правильный пакет конфигурации.
Конфигурация устройства верхнего уровня
Подключитесь к устройству узла Windows верхнего уровня и скопируйте файл parent-1.tzg на устройство.
Запустите сеанс PowerShell с повышенными привилегиями с помощью запуска от имени администратора.
Скопируйте parent-1.tzg в виртуальную машину EFLOW.
Copy-EflowVmFile -fromFile parent-1.tzg -toFile ~/ -pushFile
Подключение к виртуальной машине EFLOW
Connect-EflowVm
Извлеките архив пакета конфигурации. Например, используйте команду tar для извлечения архивного файла parent-1 :
tar -xzf ./parent-1.tgz
Задайте разрешение на выполнение скрипта установки.
chmod +x install.sh
Выполните сценарий install.sh.
sudo sh ./install.sh
Примените правильные разрешения на сертификат и перезапустите среду выполнения IoT Edge.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Убедитесь, что все службы IoT Edge работают правильно.
sudo iotedge system status
Наконец, добавьте соответствующие правила брандмауэра, чтобы включить подключение между устройством нижнего уровня и устройством верхнего уровня.
sudo iptables -A INPUT -p tcp --dport 5671 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 8883 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT sudo iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT sudo iptables-save | sudo tee /etc/systemd/scripts/ip4save
Выполните проверки конфигурации и подключения на устройствах.
sudo iotedge check
На устройстве верхнего уровня выходные данные будут содержать сведения о нескольких пройденных проверках. Возможно, вы увидите некоторые предупреждения о политиках журналов и политиках DNS (в зависимости от характеристик сети).
Если вы хотите подробнее изучить, какие изменения вносятся в файл конфигурации устройства, см. раздел практического руководства по настройке IoT Edge на устройствах.
Конфигурация устройства нижнего уровня
Подключитесь к устройству узла Windows нижнего уровня и скопируйте дочерний файл 1.tzg на устройство.
Запустите сеанс PowerShell с повышенными привилегиями с помощью запуска от имени администратора.
Скопируйте дочерний-1.tzg в виртуальную машину EFLOW.
Copy-EflowVmFile -fromFile child-1.tzg -toFile ~/ -pushFile
Подключение к виртуальной машине EFLOW
Connect-EflowVm
Извлеките архив пакета конфигурации. Например, используйте команду tar для извлечения файла архива дочернего-1:
tar -xzf ./child-1.tgz
Задайте разрешение на выполнение скрипта установки.
chmod +x install.sh
Выполните сценарий install.sh.
sudo sh ./install.sh
Примените правильные разрешения на сертификат и перезапустите среду выполнения IoT Edge.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Убедитесь, что все службы IoT Edge работают правильно.
sudo iotedge system status
Выполните проверки конфигурации и подключения на устройствах. Для устройства нижнего уровня образ диагностики придется вручную указать в команде:
sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:443/azureiotedge-diagnostics:1.2
Если вы выполнили предыдущие шаги правильно, вы можете проверить правильность настройки устройств. После того как вы будете удовлетворены конфигурацией на каждом устройстве, вы будете готовы продолжить.
Развертывание модуля устройства
Развертывание модуля для ваших устройств было применено при создании устройств в Центр Интернета вещей. Команда az iot edge devices create применяет json-файлы развертывания для устройств верхнего и нижнего слоя. После завершения развертывания устройство нижнего уровня использует модуль прокси-сервера API IoT Edge для извлечения необходимых образов.
Кроме модулей агента IoT Edge и Центра IoT Edge для среды выполнения, устройство верхнего уровня получает модули реестра Docker и прокси-сервера API для IoT Edge.
Модуль реестра Docker указывает на существующий Реестр контейнеров Azure. В этом случае REGISTRY_PROXY_REMOTEURL
указывает на Microsoft Container Registry. По умолчанию реестр Docker прослушивает порт 5000.
Модуль прокси-сервера API для IoT Edge направляет HTTP-запросы к другим модулям, позволяя устройствам нижнего уровня получать образы контейнеров или отправлять большие двоичные объекты в хранилище. В нашем случае он использует порт 443 и настроен так, чтобы отправлять запросы на вытягивание образов контейнеров Docker в модуль реестра Docker через порт 5000. Кроме того, все запросы на отправку в хранилище BLOB-объектов перенаправляются в модуль AzureBlobStorageonIoTEdge через порт 11002. Дополнительные сведения о модуле прокси-сервера API для IoT Edge и о его настройке см. в соответствующем руководстве.
Если вы хотите узнать, как создать подобное развертывание с помощью портала Azure или Azure Cloud Shell, см. раздел руководства по устройству верхнего уровня.
Состояние модулей можно проверить с помощью такой команды:
az iot hub module-twin show --device-id <edge-device-id> --module-id '$edgeAgent' --hub-name <iot-hub-name> --query "properties.reported.[systemModules, modules]"
Эта команда выводит все сообщаемые свойства edgeAgent. Вот некоторые из них, которые полезны для мониторинга состояния устройства: runtime status (состояние среды выполнения), runtime start time (время запуска среды выполнения), runtime last exit time (время последнего выхода среды выполнения), runtime restart count (число перезапусков среды выполнения).
Вы также можете проверить состояние модулей на портале Azure. Перейдите в раздел "Устройства" Центр Интернета вещей, чтобы просмотреть устройства и модули.
просмотр сформированных данных.
Модуль смоделированного датчика температуры, который вы развернули, генерирует выборку данных о состоянии окружающей среды. Он отправляет сообщения, которые содержат данные о температуре и влажности окружающей среды, температуре и давлении оборудования, а также метки времени.
Это также можно делать с помощью Azure Cloud Shell:
az iot hub monitor-events -n <iot-hub-name> -d <lower-layer-device-name>
Например:
az iot hub monitor-events -n my-iot-hub -d child-1
{
"event": {
"origin": "child-1",
"module": "simulatedTemperatureSensor",
"interface": "",
"component": "",
"payload": "{\"machine\":{\"temperature\":104.29281270901808,\"pressure\":10.48905461241978},\"ambient\":{\"temperature\":21.086561171611102,\"humidity\":24},\"timeCreated\":\"2023-04-17T21:50:30.1082487Z\"}"
}
}
Устранение неполадок
Выполните команду iotedge check
, чтобы проверить конфигурацию и устранить неполадки.
Вы можете работать iotedge check
в вложенной иерархии, даже если подчиненные устройства не имеют прямого доступа к Интернету.
При запуске команды iotedge check
на нижнем уровне иерархии программа пытается извлечь образ из родительского объекта через порт 443.
sudo iotedge check --diagnostics-image-name $upstream:443/azureiotedge-diagnostics:1.2
Значение azureiotedge-diagnostics
извлекается из реестра контейнеров, связанного с модулем реестра. В этом руководстве задано значение по умолчанию https://mcr.microsoft.com:
Имя. | Значение |
---|---|
REGISTRY_PROXY_REMOTEURL |
https://mcr.microsoft.com |
Если вы используете частный реестр контейнеров, убедитесь, что все образы (IoTEdgeAPIProxy, edgeAgent, edgeHub, Simulated Temperature Sensor и diagnostics) находятся в реестре контейнеров.
Если нижнее устройство имеет другую архитектуру процессора от родительского устройства, вам потребуется соответствующий образ архитектуры. Вы можете использовать подключенный реестр или указать правильный образ для модулей edgeAgent и edgeHub в файле config.toml нижестоящего устройства. Например, если родительское устройство работает на архитектуре ARM32v7 и нижестоящем устройстве выполняется на архитектуре AMD64, необходимо указать соответствующий тег версии и образа архитектуры в файле config.toml нижестоящего устройства.
[agent.config]
image = "$upstream:443/azureiotedge-agent:1.5.15-linux-amd64"
"systemModules": {
"edgeAgent": {
"settings": {
"image": "$upstream:443/azureiotedge-agent:1.5.15-linux-amd64"
},
},
"edgeHub": {
"settings": {
"image": "$upstream:443/azureiotedge-hub:1.5.15-linux-amd64",
}
}
}
Очистка ресурсов
Чтобы избежать расходов, можно удалить локальные конфигурации и ресурсы Azure, созданные при работе с этой статьей.
Удаление ресурсов:
Войдите в портал Azure и выберитеГруппы ресурсов.
Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.
Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, можно выбрать каждый ресурс, чтобы удалить их по отдельности.
Следующие шаги
При работе с этим учебником вы настроили два устройства IoT Edge в качестве шлюзов и настроили одно из них для выполнения роли родительского устройства для другого. Затем вы продемонстрировали извлечение образа контейнера на дочернее устройство через шлюз с помощью модуля прокси-сервера API для IoT Edge. Если вам хотите узнать больше, изучите инструкции по использованию модуля прокси-сервера.
Дополнительные сведения об использовании шлюзов для создания иерархических слоев устройств IoT Edge см. в следующей статье.