Dela via


Självstudie: Skapa en hierarki med IoT Edge-enheter med IoT Edge för Linux i Windows

Gäller för: Bockmarkering för IoT Edge 1.4 IoT Edge 1.4

Viktigt!

IoT Edge 1.5 LTS och IoT Edge 1.4 stöds. IoT Edge 1.4 LTS upphör den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.

Du kan distribuera Azure IoT Edge-noder mellan nätverk ordnade i hierarkiska lager. Varje lager i en hierarki är en gatewayenhet som hanterar meddelanden och begäranden från enheter i lagret under den. Den här konfigurationen kallas även kapslad kant.

Du kan strukturera en hierarki med enheter så att endast det översta lagret har anslutning till molnet, och de lägre lagren kan bara kommunicera med angränsande norra och södra lager. Detta nätverk skiktning är grunden för de flesta industriella nätverk, som följer ISA-95 standard.

Den här självstudien beskriver hur du skapar en hierarki med IoT Edge-enheter med IoT Edge för Linux i Windows, distribuerar IoT Edge-körningscontainrar till dina enheter och konfigurerar dina enheter lokalt. Du utför följande uppgifter:

  • Skapa och definiera relationerna i en hierarki med IoT Edge-enheter.
  • Konfigurera IoT Edge-körningen på enheterna i hierarkin.
  • Installera konsekventa certifikat i enhetshierarkin.
  • Lägg till arbetsbelastningar i enheterna i hierarkin.
  • Använd IoT Edge API Proxy-modulen för att på ett säkert sätt dirigera HTTP-trafik över en enda port från dina enheter på lägre nivå.

Dricks

Den här självstudien innehåller en blandning av manuella och automatiserade steg för att tillhandahålla en visning av kapslade IoT Edge-funktioner.

Om du vill ha en helt automatiserad titt på hur du konfigurerar en hierarki med IoT Edge-enheter vägleder du ditt eget skript baserat på det skriptade Azure IoT Edge for Industrial IoT-exemplet. Det här skriptade scenariot distribuerar virtuella Azure-datorer som förkonfigurerade enheter för att simulera en fabriksmiljö.

Om du vill ha en djupgående titt på de manuella stegen för att skapa och hantera en hierarki med IoT Edge-enheter kan du läsa instruktionsguiden för IoT Edge-enhetsgatewayhierarkier.

I den här självstudien definieras följande nätverkslager:

  • Översta lagret: IoT Edge-enheter på det här lagret kan ansluta direkt till molnet.

  • Lägre lager: IoT Edge-enheter i lager under det översta lagret kan inte ansluta direkt till molnet. De måste gå igenom en eller flera mellanliggande IoT Edge-enheter för att skicka och ta emot data.

I den här självstudien används en tvåenhetshierarki för enkelhetens skull. Den översta lagerenheten representerar en enhet på det översta lagret i hierarkin som kan ansluta direkt till molnet. Den här enheten kallas för den överordnade enheten. Den lägre lagerenheten representerar en enhet i det nedre lagret i hierarkin som inte kan ansluta direkt till molnet. Du kan lägga till fler enheter för att representera din produktionsmiljö efter behov. Enheter i lägre lager kallas underordnade enheter.

Strukturen i självstudiehierarkin, som innehåller två enheter: den översta lagerenheten och den lägre lagerenheten

Kommentar

En underordnad enhet kan vara en underordnad enhet eller en gatewayenhet i en kapslad topologi.

Förutsättningar

Om du vill skapa en hierarki med IoT Edge-enheter behöver du:

  • Ett Bash-gränssnitt i Azure Cloud Shell med Azure CLI v2.3.1 med Azure IoT-tillägget v0.10.6 eller senare installerat. I den här självstudien används Azure Cloud Shell. Om du vill se dina aktuella versioner av Azure CLI-moduler och -tillägg kör du az version.
  • Två Windows-enheter som kör Azure IoT Edge för Linux i Windows. Båda enheterna ska distribueras med hjälp av en extern virtuell växel.

Dricks

Det är möjligt att använda en intern eller standard virtuell växel om en portvidarebefordring har konfigurerats på Windows-värdoperativsystemet. För enkelhetens skull bör båda enheterna dock använda en extern virtuell växel och anslutas till samma externa nätverk.

Mer information om netowrking finns i Azure IoT Edge för Linux i Windows-nätverk och Nätverkskonfiguration för Azure IoT Edge för Linux i Windows.

Om du behöver konfigurera EFLOW-enheterna på en DMZ kan du läsa Konfigurera Azure IoT Edge för Linux i Windows Industrial IoT & DMZ-konfiguration.

  • Ett Azure-konto med en giltig prenumeration. Om du inte har en Azure-prenumeration kan du skapa ettkostnadsfritt konto innan du börjar.
  • En kostnadsfri eller standardnivå-IoT Hub i Azure.
  • Kontrollera att följande portar är öppna inkommande för alla enheter utom den lägsta lagerenheten: 443, 5671, 8883:
    • 443: Används mellan överordnade och underordnade gränshubbar för REST API-anrop och för att hämta Docker-containeravbildningar.
    • 5671, 8883: Används för AMQP och MQTT.

Skapa IoT Edge-enhetshierarkin

IoT Edge-enheter utgör skikten i hierarkin. I den här självstudien skapas en hierarki med två IoT Edge-enheter: den översta lagerenheten och den lägre lagerenheten. Du kan skapa fler underordnade enheter efter behov.

Om du vill skapa och konfigurera hierarkin för IoT Edge-enheter använder du kommandot az iot edge devices create Azure CLI. Kommandot förenklar konfigurationen av hierarkin genom att automatisera och komprimera flera steg:

  • Skapar enheter i din IoT Hub
  • Anger överordnade och underordnade relationer för att auktorisera kommunikation mellan enheter
  • Tillämpar distributionsmanifestet på varje enhet
  • Genererar en kedja med certifikat för varje enhet för att upprätta säker kommunikation mellan dem
  • Genererar konfigurationsfiler för varje enhet

Skapa enhetskonfiguration

Du skapar en grupp kapslade gränsenheter med en överordnad enhet med en underordnad enhet. I den här självstudien använder vi grundläggande exempeldistributionsmanifest. Andra scenarioexempel finns i mallarna för konfigurationsexempel.

  1. Innan du använder kommandot az iot edge devices create måste du definiera distributionsmanifestet för de översta och lägre nivåenheterna. Ladda ned deploymentTopLayer.json-exempelfilen till den lokala datorn.

    Distributionsmanifestet för den översta nivån definierar IoT Edge API Proxy-modulen och deklarerar vägen från enheten på den nedre nivån till IoT Hub.

  2. Ladda ned den deploymentLowerLayer.json exempelfilen till den lokala datorn.

    Distributionsmanifestet för enhet på lägre nivå innehåller modulen för simulerad temperatursensor och deklarerar vägen till den översta lagerenheten. I avsnittet systemModules ser du att runtime-modulerna är inställda på att hämtas från $upstream:443 i stället för mcr.microsoft.com. Den lägre lagerenheten skickar Docker-avbildningsbegäranden till IoT Edge API Proxy-modulen på port 443, eftersom den inte direkt kan hämta avbildningarna från molnet. Den andra modulen som distribueras till enheten på lägre nivå, modulen Simulerad temperatursensor, gör också avbildningsbegäran till $upstream:443.

    Mer information om hur du skapar ett distributionsmanifest på lägre nivå finns i Ansluta Azure IoT Edge-enheter för att skapa en hierarki.

  3. I Azure Cloud Shell använder du kommandot az iot edge create Azure CLI för att skapa enheter i IoT Hub och konfigurationspaket för varje enhet i hierarkin. Ersätt följande platshållare med lämpliga värden:

    Platshållare beskrivning
    <hubbnamn> Namnet på din IoT Hub.
    <config-bundle-output-path> Mappsökvägen där du vill spara konfigurationspaketen.
    <parent-device-name> Det överordnade enhets-ID:t på översta lagret .
    <parent-deployment-manifest> Manifestfilen för den överordnade enhetsdistributionen.
    <parent-fqdn-or-ip> Fullständigt domännamn för överordnad enhet (FQDN) eller IP-adress.
    <child-device-name> Underordnat enhets-ID för lägre lager .
    <child-deployment-manifest> Manifestfilen för den underordnade enhetsdistributionen.
    <child-fqdn-or-ip> Fullständigt domännamn för underordnad enhet (FQDN) eller IP-adress.
    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>
    

    Följande kommando skapar till exempel en hierarki med två IoT Edge-enheter i IoT Hub. En enhet på översta lagret med namnet parent-1 och en enhet med lägre lager med namnet child-1*. Kommandot sparar konfigurationspaketen för varje enhet i utdatakatalogen. Kommandot genererar också självsignerade testcertifikat och innehåller dem i konfigurationspaketet. Konfigurationspaketen installeras på varje enhet med hjälp av ett installationsskript.

    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
    

När du har kört kommandot kan du hitta enhetskonfigurationspaketen i utdatakatalogen. Till exempel:

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

Du kan använda dina egna certifikat och nycklar som skickas som argument till kommandot eller skapa en mer komplex enhetshierarki. Mer information om hur du skapar kapslade enheter med kommandot az finns i az iot edge devices create. Om du inte känner till hur certifikat används i ett gatewayscenario kan du läsa guidens certifikatavsnitt.

I den här självstudien använder du infogade argument för att skapa enheter och konfigurationspaket. Du kan också använda en konfigurationsfil i YAML- eller JSON-format. En exempelkonfigurationsfil finns i exemplet sample_devices_config.yaml.

Konfigurera IoT Edge-körningen

Förutom etableringen av dina enheter upprättar konfigurationsstegen betrodd kommunikation mellan enheterna i hierarkin med hjälp av de certifikat som du skapade tidigare. Stegen börjar också att upprätta nätverksstrukturen i hierarkin. Den översta lagerenheten upprätthåller internetanslutningen, vilket gör att den kan hämta avbildningar för sin körning från molnet, medan enheter på lägre nivå dirigerar via den översta lagerenheten för att få åtkomst till dessa bilder.

För att konfigurera IoT Edge-körningen måste du tillämpa konfigurationspaketen på dina enheter. Konfigurationerna skiljer sig mellan den översta lagerenheten och en enhet med lägre lager, så tänk på den enhetskonfigurationsfil som du tillämpar på varje enhet.

Varje enhet behöver motsvarande konfigurationspaket. Du kan använda en USB-enhet eller en säker filkopia för att flytta konfigurationspaketen till varje enhet. Du måste kopiera konfigurationspaketet till Windows-värdoperativsystemet för varje EFLOW-enhet och sedan kopiera det till den virtuella EFLOW-datorn.

Varning

Se till att skicka rätt konfigurationspaket till varje enhet.

Enhetskonfiguration på översta nivån

  1. Anslut till windows-värdenheten på den översta nivån och kopiera filen parent-1.tzg till enheten.

  2. Starta en upphöjd PowerShell-session med Kör som administratör.

  3. Kopiera parent-1.tzg till den virtuella EFLOW-datorn.

    Copy-EflowVmFile -fromFile parent-1.tzg -toFile ~/ -pushFile
    
  4. Ansluta till din virtuella EFLOW-dator

    Connect-EflowVm
    
  5. Extrahera konfigurationspaketets arkiv. Använd till exempel tjärkommandot för att extrahera den överordnade-1-arkivfilen :

    tar -xzf ./parent-1.tgz
    
  6. Ange körningsbehörighet för installationsskriptet.

    chmod +x install.sh
    
  7. Kör skriptet install.sh .

    sudo sh ./install.sh
    
  8. Använd rätt certifikatbehörigheter och starta om IoT Edge-körningen.

    sudo chmod -R 755 /etc/aziot/certificates/
    sudo iotedge system restart
    
  9. Kontrollera att alla IoT Edge-tjänster körs korrekt.

    sudo iotedge system status
    
  10. Lägg slutligen till lämpliga brandväggsregler för att aktivera anslutning mellan enheten på den lägre nivån och den översta nivån.

    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. Kör konfigurations- och anslutningskontrollerna på dina enheter.

    sudo iotedge check
    

På den översta lagerenheten förväntar du dig att se utdata med flera utvärderingar som skickas. Du kan se några varningar om loggprinciper och, beroende på ditt nätverk, DNS-principer.

Om du vill ha en närmare titt på vilka ändringar som görs i enhetens konfigurationsfil kan du läsa avsnittet konfigurera IoT Edge på enheter i instruktioner.

Enhetskonfiguration på lägre nivå

  1. Anslut till windows-värdenheten på lägre nivå och kopiera filen child-1.tzg till enheten.

  2. Starta en upphöjd PowerShell-session med Kör som administratör.

  3. Kopiera underordnade 1,tzg till den virtuella EFLOW-datorn.

    Copy-EflowVmFile -fromFile child-1.tzg -toFile ~/ -pushFile
    
  4. Ansluta till din virtuella EFLOW-dator

    Connect-EflowVm
    
  5. Extrahera konfigurationspaketets arkiv. Använd till exempel tar-kommandot för att extrahera arkivfilen child-1 :

    tar -xzf ./child-1.tgz
    
  6. Ange körningsbehörighet för installationsskriptet.

    chmod +x install.sh
    
  7. Kör skriptet install.sh .

    sudo sh ./install.sh
    
  8. Använd rätt certifikatbehörigheter och starta om IoT Edge-körningen.

    sudo chmod -R 755 /etc/aziot/certificates/
    sudo iotedge system restart
    
  9. Kontrollera att alla IoT Edge-tjänster körs korrekt.

    sudo iotedge system status
    
  10. Kör konfigurations- och anslutningskontrollerna på dina enheter. För den lägre lagerenheten måste diagnostikbilden skickas manuellt i kommandot:

    sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:443/azureiotedge-diagnostics:1.2
    

Om du har slutfört de tidigare stegen korrekt kan du kontrollera att enheterna är korrekt konfigurerade. När du är nöjd med att konfigurationerna är korrekta på varje enhet är du redo att fortsätta.

Distribution av enhetsmodul

Moduldistributionen för dina enheter tillämpades när enheterna skapades i IoT Hub. Kommandot az iot edge devices create tillämpade JSON-distributionsfilerna för de översta och lägre nivåenheterna. När distributionerna har slutförts använder enheten på lägre nivå IoT Edge API Proxy-modulen för att hämta nödvändiga avbildningar.

Dessutom tar runtime-modulerna IoT Edge Agent och IoT Edge Hub emot den översta lagerenheten Docker-registermodulen och IoT Edge API Proxy-modulen.

Docker-registermodulen pekar på ett befintligt Azure Container Registry. I det här fallet REGISTRY_PROXY_REMOTEURL pekar på Microsoft Container Registry. Som standard lyssnar Docker-registret på port 5000.

IoT Edge API Proxy-modulen dirigerar HTTP-begäranden till andra moduler, vilket gör att enheter på lägre nivå kan hämta containeravbildningar eller push-överföra blobar till lagring. I den här självstudien kommunicerar den på port 443 och är konfigurerad för att skicka Docker-containeravbildningens pull-begäranden till docker-registermodulen på port 5000. Dessutom dirigerar alla bloblagringsöverföringsbegäranden till modulen AzureBlobStorageonIoTEdge på port 11002. Mer information om IoT Edge API Proxy-modulen och hur du konfigurerar den finns i modulens instruktioner.

Om du vill se hur du skapar en distribution som den här via Azure-portalen eller Azure Cloud Shell kan du läsa avsnittet enhet på översta nivån i guiden.

Du kan visa status för dina moduler med hjälp av kommandot :

az iot hub module-twin show --device-id <edge-device-id> --module-id '$edgeAgent' --hub-name <iot-hub-name> --query "properties.reported.[systemModules, modules]"

Det här kommandot matar ut alla rapporterade egenskaper för edgeAgent. Här följer några användbara exempel för att övervaka enhetens status: körningsstatus, körningsstarttid, körnings senaste sluttid, antal omstarter av körning.

Du kan också se statusen för dina moduler på Azure-portalen. Gå till avsnittet Enheter i din IoT Hub för att se dina enheter och moduler.

Visa genererade data

Modulen Simulerad temperatursensor som du pushade genererar exempelmiljödata. Den skickar meddelanden som innehåller omgivningstemperatur och luftfuktighet, maskintemperatur och tryck samt en tidsstämpel.

Du kan också visa dessa meddelanden via Azure Cloud Shell:

az iot hub monitor-events -n <iot-hub-name> -d <lower-layer-device-name>

Till exempel:

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\"}"
    }
}

Felsökning

iotedge check Kör kommandot för att verifiera konfigurationen och för att felsöka fel.

Du kan köra iotedge check i en kapslad hierarki, även om de underordnade enheterna inte har direkt internetåtkomst.

När du kör iotedge check från det nedre lagret försöker programmet hämta avbildningen från den överordnade via port 443.

sudo iotedge check --diagnostics-image-name $upstream:443/azureiotedge-diagnostics:1.2

Värdet azureiotedge-diagnostics hämtas från containerregistret som är länkat till registermodulen. Den här självstudien har angetts som standard till https://mcr.microsoft.com:

Name Värde
REGISTRY_PROXY_REMOTEURL https://mcr.microsoft.com

Om du använder ett privat containerregister kontrollerar du att alla avbildningar (IoTEdgeAPIProxy, edgeAgent, edgeHub, Simulerad temperatursensor och diagnostik) finns i containerregistret.

Om en nedströmsenhet har en annan processorarkitektur än den överordnade enheten behöver du lämplig arkitekturbild. Du kan använda ett anslutet register eller ange rätt avbildning för edgeAgent - och edgeHub-modulerna i den nedströms filen config.toml . Om den överordnade enheten till exempel körs på en ARM32v7-arkitektur och den underordnade enheten körs i en AMD64-arkitektur måste du ange taggen matchande version och arkitekturbild i filen config.toml för nedströmsenheten.

[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",
      }
   }
}

Rensa resurser

Du kan ta bort de lokala konfigurationerna och De Azure-resurser som du skapade i den här artikeln för att undvika avgifter.

Ta bort resurser:

  1. Logga in på Azure Portal och välj Resursgrupper.

  2. Välj namnet på resursgruppen som innehåller dina IoT Edge-testresurser.

  3. Granska listan över resurser som ingår i din resursgrupp. Om du vill ta bort alla kan du välja Ta bort resursgrupp. Om du bara vill ta bort några av dem kan du välja varje resurs för att ta bort dem individuellt.

Nästa steg

I den här självstudien konfigurerade du två IoT Edge-enheter som gatewayer och anger en som den överordnade enheten för den andra. Sedan visade du hur du hämtade en containeravbildning till den underordnade enheten via en gateway med hjälp av IoT Edge API Proxy-modulen. Se instruktionsguiden för proxymodulens användning om du vill veta mer.

Mer information om hur du använder gatewayer för att skapa hierarkiska lager av IoT Edge-enheter finns i följande artikel.