Поделиться через


Руководство. Создание иерархии устройств IoT Edge с помощью IoT Edge для Linux в Windows

Область применения:Отметка IoT Edge 1.5 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. Эта команда упрощает настройку иерархии, автоматив и уплотнив несколько шагов:

  • Создает устройства в Центр Интернета вещей
  • Задает отношения "родительский-дочерний" для авторизации обмена данными между устройствами
  • Применение манифеста развертывания к каждому устройству
  • Создает цепочку сертификатов для каждого устройства для установления безопасного взаимодействия между ними
  • Создает файлы конфигурации для каждого устройства

Создание конфигурации устройства

Вы создаете группу вложенных пограничных устройств с родительским устройством с одним дочерним устройством. В этом руководстве мы используем базовые примеры манифестов развертывания. Дополнительные примеры сценариев см. в шаблонах примеров конфигурации.

  1. Прежде чем использовать команду создания устройств az iot edge, необходимо определить манифест развертывания для устройств верхнего уровня и нижнего слоя. Скачайте deploymentTopLayer.json пример файла на локальный компьютер.

    Манифест развертывания устройства верхнего уровня определяет модуль прокси-сервера API IoT Edge и объявляет маршрут от устройства нижнего уровня к Центр Интернета вещей.

  2. Скачайте deploymentLowerLayer.json пример файла на локальный компьютер.

    Манифест развертывания устройства нижнего слоя включает модуль имитированного датчика температуры и объявляет маршрут к устройству верхнего уровня. В разделе systemModules можно увидеть, что модули среды выполнения настроены для извлечения из $upstream:443, а не mcr.microsoft.com. Устройство нижнего слоя отправляет образ Docker запрашивает модуль прокси-сервера API IoT Edge через порт 443, так как он не может напрямую извлекать изображения из облака. Другой модуль, развернутый на устройстве нижнего уровня (модуль Simulated Temperature Sensor), также отправляет запрос на получение образа в $upstream:443.

    Дополнительные сведения о создании манифеста развертывания нижнего слоя см. в статье "Подключение устройств Azure IoT Edge для создания иерархии".

  3. В Azure Cloud Shell используйте команду az iot edge device create Azure CLI для создания устройств в Центр Интернета вещей и пакетах конфигурации для каждого устройства в иерархии. Замените следующие заполнители соответствующими значениями:

    Заполнитель Description
    <имя концентратора> Имя Центра Интернета вещей.
    <config-bundle-output-path> Путь к папке, в котором требуется сохранить пакеты конфигурации.
    <имя родительского устройства> Имя идентификатора родительского устройства верхнего уровня .
    <манифест родительского развертывания> Файл манифеста развертывания родительского устройства.
    <родительский-fqdn-или-ip> Полное доменное имя родительского устройства (FQDN) или IP-адрес.
    <имя дочернего устройства> Имя дочернего устройства нижнего уровня .
    <дочерний манифест развертывания> Файл манифеста развертывания дочернего устройства.
    <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.

Предупреждение

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

Конфигурация устройства верхнего уровня

  1. Подключитесь к устройству узла Windows верхнего уровня и скопируйте файл parent-1.tzg на устройство.

  2. Запустите сеанс PowerShell с повышенными привилегиями с помощью запуска от имени администратора.

  3. Скопируйте parent-1.tzg в виртуальную машину EFLOW.

    Copy-EflowVmFile -fromFile parent-1.tzg -toFile ~/ -pushFile
    
  4. Подключение к виртуальной машине EFLOW

    Connect-EflowVm
    
  5. Извлеките архив пакета конфигурации. Например, используйте команду tar для извлечения архивного файла parent-1 :

    tar -xzf ./parent-1.tgz
    
  6. Задайте разрешение на выполнение скрипта установки.

    chmod +x install.sh
    
  7. Выполните сценарий install.sh.

    sudo sh ./install.sh
    
  8. Примените правильные разрешения на сертификат и перезапустите среду выполнения IoT Edge.

    sudo chmod -R 755 /etc/aziot/certificates/
    sudo iotedge system restart
    
  9. Убедитесь, что все службы IoT Edge работают правильно.

    sudo iotedge system status
    
  10. Наконец, добавьте соответствующие правила брандмауэра, чтобы включить подключение между устройством нижнего уровня и устройством верхнего уровня.

    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
    
  11. Выполните проверки конфигурации и подключения на устройствах.

    sudo iotedge check
    

На устройстве верхнего уровня выходные данные будут содержать сведения о нескольких пройденных проверках. Вы можете увидеть некоторые предупреждения о политиках журналов и, в зависимости от вашей сети, политиках DNS.

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

Конфигурация устройства нижнего уровня

  1. Подключитесь к устройству узла Windows нижнего уровня и скопируйте дочерний файл 1.tzg на устройство.

  2. Запустите сеанс PowerShell с повышенными привилегиями с помощью запуска от имени администратора.

  3. Скопируйте дочерний-1.tzg в виртуальную машину EFLOW.

    Copy-EflowVmFile -fromFile child-1.tzg -toFile ~/ -pushFile
    
  4. Подключение к виртуальной машине EFLOW

    Connect-EflowVm
    
  5. Извлеките архив пакета конфигурации. Например, используйте команду tar для извлечения файла архива дочернего-1:

    tar -xzf ./child-1.tgz
    
  6. Задайте разрешение на выполнение скрипта установки.

    chmod +x install.sh
    
  7. Выполните сценарий install.sh.

    sudo sh ./install.sh
    
  8. Примените правильные разрешения на сертификат и перезапустите среду выполнения IoT Edge.

    sudo chmod -R 755 /etc/aziot/certificates/
    sudo iotedge system restart
    
  9. Убедитесь, что все службы IoT Edge работают правильно.

    sudo iotedge system status
    
  10. Выполните проверки конфигурации и подключения на устройствах. Для устройства нижнего уровня образ диагностики придется вручную указать в команде:

    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. Полезные свойства для мониторинга состояния устройства: состояние среды выполнения, время начала среды выполнения, время последнего выхода во время выполнения и число перезапусков среды выполнения.

Вы также увидите состояние модулей на портале 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, имитированный датчик температуры и диагностика) находятся в реестре контейнеров.

Если нижнее устройство имеет другую архитектуру процессора от родительского устройства, используйте соответствующий образ архитектуры. Используйте подключенный реестр или укажите правильный образ для модулей 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, созданные при работе с этой статьей.

Удаление ресурсов:

  1. Войдите в портал Azure и выберитеГруппы ресурсов.

  2. Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.

  3. Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, можно выбрать каждый ресурс, чтобы удалить их по отдельности.

Следующие шаги

При работе с этим учебником вы настроили два устройства IoT Edge в качестве шлюзов и настроили одно из них для выполнения роли родительского устройства для другого. Затем вы продемонстрировали извлечение образа контейнера на дочернее устройство через шлюз с помощью модуля прокси-сервера API для IoT Edge. Если вам хотите узнать больше, изучите инструкции по использованию модуля прокси-сервера.

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