Zelfstudie: Een hiërarchie van IoT Edge-apparaten maken met Behulp van IoT Edge voor Linux in Windows
Van toepassing op: IoT Edge 1.5 IoT Edge 1.4
Belangrijk
IoT Edge 1.5 LTS en IoT Edge 1.4 LTS worden ondersteund releases. IoT Edge 1.4 LTS eindigt op 12 november 2024. Raadpleeg IoT Edge bijwerken als u een eerdere versie hebt.
U kunt Azure IoT Edge-knooppunten implementeren in netwerken die zijn ingedeeld in hiërarchische lagen. Elke laag in een hiërarchie is een gateway-apparaat dat berichten en aanvragen verwerkt van apparaten in de onderliggende laag. Deze configuratie wordt ook wel geneste rand genoemd.
U kunt een hiërarchie van apparaten zo structureren dat alleen de bovenste laag verbinding heeft met de cloud en de onderliggende lagen alleen kunnen communiceren met aangrenzende noord- en zuidlagen. Deze vorming van netwerklagen vormt de basis van de meeste industriële netwerken, die de ISA-95-standaard volgen.
Deze zelfstudie begeleidt u bij het maken van een hiërarchie van IoT Edge-apparaten met behulp van IoT Edge voor Linux in Windows, het implementeren van IoT Edge-runtimecontainers op uw apparaten en het lokaal configureren van uw apparaten. U voert de volgende taken uit:
- De relaties in een hiërarchie van IoT Edge-apparaten maken en definiëren.
- De IoT Edge-runtime op de apparaten in uw hiërarchie configureren.
- Consistente certificaten in de hiërarchie van uw apparaat installeren.
- Workloads toevoegen aan de apparaten in uw hiërarchie.
- Gebruik de Api-proxymodule van IoT Edge om HTTP-verkeer veilig te routeren via één poort vanaf uw apparaten met een lagere laag.
Tip
Deze zelfstudie bevat een combinatie van handmatige en geautomatiseerde stappen voor een presentatie van geneste IoT Edge-functies.
Als u een volledig geautomatiseerde weergave wilt van het instellen van een hiërarchie van IoT Edge-apparaten, begeleidt u uw eigen script op basis van het gescripte Azure IoT Edge for Industrial IoT-voorbeeld. Met dit scriptscenario worden virtuele Azure-machines geïmplementeerd als vooraf geconfigureerde apparaten om een fabrieksomgeving te simuleren.
Als u een uitgebreid overzicht wilt van de handmatige stappen voor het maken en beheren van een hiërarchie van IoT Edge-apparaten, raadpleegt u de handleiding voor ioT Edge-apparaatgatewayhiërarchieën.
In deze zelfstudie worden de volgende netwerklagen gedefinieerd:
Bovenste laag: IoT Edge-apparaten op deze laag kunnen rechtstreeks verbinding maken met de cloud.
Lagere lagen: IoT Edge-apparaten op lagen onder de bovenste laag kunnen niet rechtstreeks verbinding maken met de cloud. Ze moeten via een of meer tussenliggende IoT Edge-apparaten gaan om gegevens te verzenden en te ontvangen.
In deze zelfstudie wordt voor het gemak een hiërarchie van twee apparaten gebruikt. Het apparaat met de bovenste laag vertegenwoordigt een apparaat op de bovenste laag van de hiërarchie die rechtstreeks verbinding kan maken met de cloud. Dit apparaat wordt het bovenliggende apparaat genoemd. Het apparaat met een lagere laag vertegenwoordigt een apparaat op de onderste laag van de hiërarchie die niet rechtstreeks verbinding kan maken met de cloud. U kunt zo nodig meer apparaten toevoegen om uw productieomgeving weer te geven. Apparaten op lagere lagen worden onderliggende apparaten genoemd.
Notitie
Een onderliggend apparaat kan een downstreamapparaat of een gatewayapparaat in een geneste topologie zijn.
Vereisten
Als u een hiërarchie van IoT Edge-apparaten wilt maken, hebt u het volgende nodig:
- Een Bash-shell in Azure Cloud Shell met behulp van Azure CLI v2.3.1 waarop de Azure IoT-extensie v0.10.6 of hoger is geïnstalleerd. Deze zelfstudie maakt gebruik van de Azure Cloud Shell. Als u uw huidige versies van de Azure CLI-modules en -extensies wilt zien, voert u az-versie uit.
- Twee Windows-apparaten met Azure IoT Edge voor Linux in Windows. Beide apparaten moeten worden geïmplementeerd met behulp van een externe virtuele switch.
Tip
Het is mogelijk om interne of standaard virtuele switch te gebruiken als het doorsturen van poorten is geconfigureerd op het Windows-host besturingssysteem. Voor het gemak van deze zelfstudie moeten beide apparaten echter een externe virtuele switch gebruiken en zijn verbonden met hetzelfde externe netwerk.
Zie Azure IoT Edge voor Linux in Windows-netwerk - en netwerkconfiguratie voor Azure IoT Edge voor Linux in Windows voor meer informatie over netwerken.
Als u de EFLOW-apparaten wilt instellen op een DMZ, raadpleegt u Hoe u Azure IoT Edge voor Linux configureert in windows Industrial IoT & DMZ-configuratie.
- Een Azure-account met een geldig abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
- Een gratis of standaard IoT-hub-laag in Azure.
- Zorg ervoor dat de volgende poorten zijn geopend voor alle apparaten, met uitzondering van het apparaat met de laagste laag: 443, 5671, 8883:
- 443: Wordt gebruikt tussen bovenliggende en onderliggende edge-hubs voor REST API-aanroepen en om Docker-containerinstallatiekopieën op te halen.
- 5671, 8883: Wordt gebruikt voor AMQP en MQTT.
Tip
Zie IoT Edge voor Linux op Windows-beveiliging voor meer informatie over de firewall van virtuele EFLOW-machines.
Uw IoT Edge-apparaathiërarchie maken
IoT Edge-apparaten vormen de lagen van uw hiërarchie. In deze zelfstudie maakt u een hiërarchie van twee IoT Edge-apparaten: het apparaat met de bovenste laag en het apparaat met de onderste laag. U kunt naar behoefte meer downstreamapparaten maken.
Als u uw hiërarchie van IoT Edge-apparaten wilt maken en configureren, gebruikt u de opdracht az iot edge devices create Azure CLI. De opdracht vereenvoudigt de configuratie van de hiërarchie door verschillende stappen te automatiseren en samen te vatten:
- Apparaten maken in uw IoT Hub
- Hiermee stelt u de bovenliggende en onderliggende relaties in om communicatie tussen apparaten te autoriseren
- Het implementatiemanifest toepassen op elk apparaat
- Genereert een keten van certificaten voor elk apparaat om beveiligde communicatie tussen het apparaat tot stand te brengen
- Hiermee worden configuratiebestanden voor elk apparaat gegenereerd
Apparaatconfiguratie maken
U maakt een groep geneste edge-apparaten met een bovenliggend apparaat met één onderliggend apparaat. In deze zelfstudie gebruiken we eenvoudige voorbeeldimplementatiemanifesten. Bekijk de sjablonen voor configuratievoorbeelden voor andere scenario's.
Voordat u de opdracht az iot edge devices create gebruikt , moet u het implementatiemanifest definiëren voor de apparaten in de bovenste laag en de onderste laag. Download het deploymentTopLayer.json voorbeeldbestand naar uw lokale computer.
Het implementatiemanifest van het apparaat op de bovenste laag definieert de IoT Edge API-proxymodule en declareert de route van het apparaat met de onderste laag naar IoT Hub.
Download het deploymentLowerLayer.json voorbeeldbestand naar uw lokale computer.
Het implementatiemanifest van het apparaat in de onderste laag bevat de module voor de gesimuleerde temperatuursensor en declareert de route naar het apparaat met de bovenste laag. U kunt in de sectie systemModules zien dat de runtimemodules zijn ingesteld op het ophalen van $upstream:443 in plaats van mcr.microsoft.com. Het apparaat met de onderste laag verzendt Docker-installatiekopieaanvragen voor de IoT Edge API-proxymodule op poort 443, omdat de installatiekopieën niet rechtstreeks uit de cloud kunnen worden opgehaald. De andere module die is geïmplementeerd op het apparaat met een lagere laag, de module Gesimuleerde temperatuursensor, doet ook de aanvraag voor de afbeelding.
$upstream:443
Zie Azure IoT Edge-apparaten verbinden om een hiërarchie te maken voor meer informatie over het maken van een distributiemanifest met een lagere laag.
Gebruik in Azure Cloud Shell de opdracht az iot edge devices create Azure CLI om apparaten te maken in IoT Hub en configuratiebundels voor elk apparaat in uw hiërarchie. Vervang de volgende tijdelijke aanduidingen door de juiste waarden:
Plaatsaanduiding Beschrijving <hub-name> De naam van uw IoT Hub. <config-bundle-output-path> Het mappad waar u de configuratiebundels wilt opslaan. <bovenliggende apparaatnaam> De naam van de bovenliggende apparaat-id op de bovenste laag . <parent-deployment-manifest> Het manifestbestand voor de implementatie van het bovenliggende apparaat. <parent-fqdn-or-ip> Volledig gekwalificeerde domeinnaam (FQDN) of IP-adres van bovenliggend apparaat. <naam onderliggend apparaat> De naam van de onderliggende apparaat-id van de onderste laag . <child-deployment-manifest> Het manifestbestand voor de implementatie van onderliggende apparaten. <child-fqdn-or-ip> FQDN(Fully Qualified Domain Name) of IP-adres van onderliggend apparaat. az iot edge devices create \ --hub-name <hub-name> \ --output-path <config-bundle-output-path> \ --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.4" \ --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>
Met de volgende opdracht maakt u bijvoorbeeld een hiërarchie van twee IoT Edge-apparaten in IoT Hub. Een apparaat in de bovenste laag met de naam bovenliggend-1 en een apparaat met een lagere laag met de naam onderliggende-1*. Met de opdracht worden de configuratiebundels voor elk apparaat in de uitvoermap opgeslagen. Met de opdracht worden ook zelfondertekende testcertificaten gegenereerd en opgenomen in de configuratiebundel. De configuratiebundels worden op elk apparaat geïnstalleerd met behulp van een installatiescript.
az iot edge devices create \ --hub-name my-iot-hub \ --output-path ./output \ --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.4" \ --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
Nadat u de opdracht hebt uitgevoerd, kunt u de apparaatconfiguratiebundels vinden in de uitvoermap. Voorbeeld:
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
U kunt uw eigen certificaten en sleutels gebruiken die als argumenten worden doorgegeven aan de opdracht of een complexere apparaathiërarchie maken. Zie az iot edge devices create voor meer informatie over het maken van geneste apparaten met behulp van de az-opdracht. Als u niet bekend bent met hoe certificaten worden gebruikt in een gatewayscenario, raadpleegt u de handleidingsectie van het certificaat.
In deze zelfstudie gebruikt u inlineargumenten om de apparaten en configuratiebundels te maken. U kunt ook een configuratiebestand gebruiken in YAML- of JSON-indeling. Zie het voorbeeld van sample_devices_config.yaml voor een voorbeeldconfiguratiebestand.
De IoT Edge-runtime configureren
Naast het inrichten van uw apparaten zorgen de configuratiestappen voor vertrouwde communicatie tussen de apparaten in uw hiërarchie met behulp van de certificaten die u eerder hebt gemaakt. De stappen beginnen ook met het instellen van de netwerkstructuur van uw hiërarchie. Het apparaat in de bovenste laag onderhoudt de internetverbinding, zodat het installatiekopieën kan ophalen voor de runtime vanuit de cloud, terwijl apparaten met een lagere laag via het apparaat in de bovenste laag worden gerouteerd om toegang te krijgen tot deze installatiekopieën.
Als u de IoT Edge-runtime wilt configureren, moet u de configuratiebundels toepassen op uw apparaten. De configuraties verschillen tussen het apparaat in de bovenste laag en een apparaat met een lagere laag, dus houd rekening met het apparaatconfiguratiebestand dat u op elk apparaat toepast.
Elk apparaat heeft de bijbehorende configuratiebundel nodig. U kunt een USB-station of een beveiligde bestandskopie gebruiken om de configuratiebundels naar elk apparaat te verplaatsen. U moet de configuratiebundel kopiëren naar het Windows-host-besturingssysteem van elk EFLOW-apparaat en deze vervolgens naar de EFLOW-VM kopiëren.
Waarschuwing
Zorg ervoor dat u de juiste configuratiebundel naar elk apparaat verzendt.
Apparaatconfiguratie op de hoogste laag
Maak verbinding met uw Windows-hostapparaat op het hoogste niveau en kopieer het bovenliggende 1.tzg-bestand naar het apparaat.
Start een PowerShell-sessie met verhoogde bevoegdheid met Run as Administrator.
Kopieer parent-1.tzg naar de EFLOW-VM.
Copy-EflowVmFile -fromFile parent-1.tzg -toFile ~/ -pushFile
Verbinding maken met uw virtuele EFLOW-machine
Connect-EflowVm
Pak het archief van de configuratiebundel uit. Gebruik bijvoorbeeld de tar-opdracht om het bovenliggende-1 archiefbestand te extraheren:
tar -xzf ./parent-1.tgz
Stel de machtiging voor uitvoeren in voor het installatiescript.
chmod +x install.sh
Voer het script install.sh uit.
sudo sh ./install.sh
Pas de juiste certificaatmachtigingen toe en start de IoT Edge-runtime opnieuw op.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Controleer of alle IoT Edge-services correct worden uitgevoerd.
sudo iotedge system status
Voeg ten slotte de juiste firewallregels toe om connectiviteit mogelijk te maken tussen het apparaat met de onderste laag en het apparaat met de bovenste laag.
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
Voer de configuratie- en connectiviteitscontroles uit op uw apparaten.
sudo iotedge check
Op uw apparaat in de bovenste laag ziet u een uitvoer met verschillende geslaagde evaluaties. Mogelijk ziet u enkele waarschuwingen over logboekbeleidsregels en, afhankelijk van uw netwerk, DNS-beleid.
Zie de sectie IoT Edge configureren op apparaten in de handleiding als u meer wilt weten welke wijzigingen worden aangebracht in het configuratiebestand van uw apparaat.
Apparaatconfiguratie met een lagere laag
Maak verbinding met uw Windows-hostapparaat op lager niveau en kopieer het child-1.tzg-bestand naar het apparaat.
Start een PowerShell-sessie met verhoogde bevoegdheid met Run as Administrator.
Kopieer child-1.tzg naar de EFLOW-VM.
Copy-EflowVmFile -fromFile child-1.tzg -toFile ~/ -pushFile
Verbinding maken met uw virtuele EFLOW-machine
Connect-EflowVm
Pak het archief van de configuratiebundel uit. Gebruik bijvoorbeeld de tar-opdracht om het archiefbestand child-1 uit te pakken:
tar -xzf ./child-1.tgz
Stel de machtiging voor uitvoeren in voor het installatiescript.
chmod +x install.sh
Voer het script install.sh uit.
sudo sh ./install.sh
Pas de juiste certificaatmachtigingen toe en start de IoT Edge-runtime opnieuw op.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Controleer of alle IoT Edge-services correct worden uitgevoerd.
sudo iotedge system status
Voer de configuratie- en connectiviteitscontroles uit op uw apparaten. Voor het apparaat met een lagere laag moet de diagnostische installatiekopieën handmatig worden doorgegeven in de opdracht:
sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:443/azureiotedge-diagnostics:1.2
Als u de eerdere stappen correct hebt voltooid, kunt u controleren of uw apparaten correct zijn geconfigureerd. Zodra u tevreden bent dat uw configuraties correct zijn op elk apparaat, kunt u doorgaan.
Implementatie van apparaatmodule
De module-implementatie voor uw apparaten is toegepast toen de apparaten zijn gemaakt in IoT Hub. Met de opdracht az iot edge devices create worden de JSON-implementatiebestanden toegepast voor de apparaten met de bovenste en lagere laag. Nadat deze implementaties zijn voltooid, gebruikt het apparaat in de onderste laag de IoT Edge API Proxy-module om de benodigde installatiekopieën op te halen.
Daarnaast ontvangen de Runtime-modules IoT Edge Agent en IoT Edge Hub het bovenste laagapparaat de Docker-registermodule en de IoT Edge API-proxymodule.
De Docker-registermodule verwijst naar een bestaand Azure Container Registry. In dit geval REGISTRY_PROXY_REMOTEURL
verwijst u naar het Microsoft Container Registry. Docker-register luistert standaard op poort 5000.
De Api-proxymodule van IoT Edge stuurt HTTP-aanvragen naar andere modules, zodat apparaten met een lagere laag containerinstallatiekopieën kunnen ophalen of blobs naar de opslag kunnen pushen. In deze zelfstudie communiceert deze op poort 443 en is geconfigureerd voor het verzenden van pull-aanvragen voor Docker-containerinstallatiekopieën naar uw Docker-registermodule op poort 5000. Bovendien worden aanvragen voor het uploaden van blobopslag doorgestuurd naar module AzureBlobStorageonIoTEdge op poort 11002. Voor meer informatie over de IoT Edge API-proxymodule en hoe u deze configureert, raadpleegt u de instructies van de module.
Als u wilt zien hoe u een implementatie zoals deze maakt via Azure Portal of Azure Cloud Shell, raadpleegt u de sectie apparaat in de bovenste laag van de handleiding.
U kunt de status van uw modules weergeven met behulp van de opdracht:
az iot hub module-twin show --device-id <edge-device-id> --module-id '$edgeAgent' --hub-name <iot-hub-name> --query "properties.reported.[systemModules, modules]"
Met deze opdracht worden alle gerapporteerde eigenschappen van edgeAgent uitgevoerd. Hier volgen enkele nuttige functies voor het controleren van de status van het apparaat: runtimestatus, runtime-begintijd, laatste afsluittijd van runtime, aantal runtime-herstarts.
U kunt ook de status van uw modules bekijken in Azure Portal. Navigeer naar de sectie Apparaten van uw IoT Hub om uw apparaten en modules te bekijken.
Gegenereerde gegevens weergeven
De gesimuleerde temperatuursensormodule die u hebt gepusht, genereert samples van omgevingsgegevens. De module verzendt berichten met informatie over omgevingstemperatuur, luchtvochtigheid, machinetemperatuur en druk, evenals een tijdstempel.
U kunt deze berichten ook bekijken via de Azure Cloud Shell:
az iot hub monitor-events -n <iot-hub-name> -d <lower-layer-device-name>
Voorbeeld:
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\"}"
}
}
Probleemoplossing
Voer de iotedge check
opdracht uit om de configuratie te controleren en om fouten op te lossen.
U kunt uitvoeren iotedge check
in een geneste hiërarchie, zelfs als de downstreamapparaten geen directe internettoegang hebben.
Wanneer u vanaf de onderste laag wordt uitgevoerd iotedge check
, probeert het programma de installatiekopie van het bovenliggende element op te halen via poort 443.
sudo iotedge check --diagnostics-image-name $upstream:443/azureiotedge-diagnostics:1.2
De azureiotedge-diagnostics
-waarde wordt opgehaald uit het containerregister dat aan de registermodule is gekoppeld. In deze zelfstudie is deze standaard ingesteld op https://mcr.microsoft.com:
Naam | Weergegeven als |
---|---|
REGISTRY_PROXY_REMOTEURL |
https://mcr.microsoft.com |
Als u een privécontainerregister gebruikt, moet u ervoor zorgen dat alle installatiekopieën (IoTEdgeAPIProxy, edgeAgent, edgeHub, Simulated Temperature Sensor en diagnostische gegevens) aanwezig zijn in het containerregister.
Als een downstreamapparaat een andere processorarchitectuur heeft dan het bovenliggende apparaat, hebt u de juiste architectuurinstallatiekopieën nodig. U kunt een verbonden register gebruiken of u kunt de juiste installatiekopieën opgeven voor de edgeAgent- en EdgeHub-modules in het downstreamapparaatconfig.toml-bestand. Als het bovenliggende apparaat bijvoorbeeld wordt uitgevoerd op een ARM32v7-architectuur en het downstreamapparaat wordt uitgevoerd op een AMD64-architectuur, moet u de overeenkomende versie en architectuurafbeeldingstag opgeven in het downstream-apparaatconfig.toml-bestand.
[agent.config]
image = "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
"systemModules": {
"edgeAgent": {
"settings": {
"image": "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
},
},
"edgeHub": {
"settings": {
"image": "$upstream:443/azureiotedge-hub:1.4.10-linux-amd64",
}
}
}
Resources opschonen
U kunt de lokale configuraties en Azure-resources die u in dit artikel hebt gemaakt, verwijderen om kosten te voorkomen.
Om de resources te verwijderen:
Meld u aan bij de Azure-portal en selecteer Resourcegroepen.
Selecteer de naam van de resourcegroep die uw IoT Edge-testresources bevat.
Bekijk de lijst met resources die zich bevinden in de resourcegroep. Als u alle mappen wilt verwijderen, kunt u Resourcegroep verwijderen selecteren. Als u slechts enkele resources wilt verwijderen, kunt u elke resource selecteren om ze afzonderlijk te verwijderen.
Volgende stappen
In deze zelfstudie hebt u twee IoT Edge-apparaten geconfigureerd als gateways, en het ene ingesteld als bovenliggend apparaat van het andere. Vervolgens hebt u gedemonstreerd hoe u een containerinstallatiekopie naar het onderliggende apparaat haalt via een gateway met behulp van de IoT Edge API Proxy-module. Zie de handleiding over het gebruik van de proxymodule als u meer wilt weten.
Zie het volgende artikel voor meer informatie over het gebruik van gateways voor het maken van hiërarchische lagen van IoT Edge-apparaten.