Verbinden von Azure IoT Edge-Geräten zum Erstellen einer Hierarchie

Gilt für:IoT Edge 1.4 Häkchen IoT Edge 1.4

Wichtig

IoT Edge Version 1.4 wird unterstützt. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.

Dieser Artikel enthält Schritte zum Herstellen einer vertrauenswürdigen Verbindung zwischen einem IoT Edge-Gateway und einem nachgeschalteten IoT Edge-Gerät. Diese Konfiguration wird auch als Nested Edge bezeichnet.

In einem Gatewayszenario kann ein IoT Edge-Gerät sowohl ein Gateway als auch ein nachgeschaltetes Gerät sein. Mehrere IoT Edge-Geräte können auf mehreren Ebenen angeordnet werden, um eine Gerätehierarchie zu erstellen. Die nachgeschalteten (untergeordneten) Geräte können sich authentifizieren und Nachrichten über das jeweils dazugehörige Gatewaygerät (übergeordnete Gerät) senden oder empfangen.

Es gibt zwei verschiedene Konfigurationen für IoT Edge-Geräte in einer Gatewayhierarchie, und in diesem Artikel werden beide thematisiert. Beim ersten handelt es sich um das IoT Edge-Gerät der obersten Ebene. Wenn mehrere IoT Edge-Geräte jeweils Verbindungen miteinander herstellen, gilt jedes Gerät, das über kein übergeordnetes Gerät verfügt, sich aber direkt mit IoT Hub verbindet, als ein Gerät der obersten Ebene. Dieses Gerät ist verantwortlich dafür, Anforderungen von allen untergeordneten Geräten zu verarbeiten. Die andere Konfiguration gilt für alle IoT Edge-Geräte auf einer niedrigeren Ebene der Hierarchie. Diese Geräte könnten möglicherweise ein Gateway für andere nachgeschaltete IoT- und IoT Edge-Geräte sein. Sie müssen sämtliche Kommunikation jedoch auch über ihre jeweiligen übergeordneten Geräte weiterleiten.

Für manche Netzwerkarchitekturen ist es erforderlich, dass nur das oberste IoT Edge-Gerät einer Hierarchie eine Verbindung zur Cloud herstellen kann. In dieser Konfiguration können alle IoT Edge-Geräte auf niedrigeren Ebenen einer Hierarchie nur mit ihrem Gatewaygerät (übergeordneten Gerät) und beliebigen nachgeschalteten (untergeordneten) Geräten kommunizieren.

Alle Schritte in diesem Artikel basieren auf den Schritten im Artikel Konfigurieren eines IoT Edge-Geräts als transparentes Gateway. Dabei wird ein IoT Edge-Gerät als Gateway für nachgeschaltete IoT-Geräte eingerichtet. Die selben grundlegenden Schritte gelten für alle Gatewayszenarios:

  • Authentifizierung: Erstellen Sie IoT Hub-Identitäten für alle Geräte in der Gatewayhierarchie.
  • Autorisierung: Richten Sie die übergeordnet/untergeordnet-Beziehung in IoT Hub ein, um nachgeschaltete Geräte für die Herstellung einer Verbindung zum jeweiligen übergeordneten Gerät zu autorisieren, wie wenn eine Verbindung zu IoT Hub hergestellt würde.
  • Gatewayermittlung: Sorgen Sie dafür, dass das nachgeschaltete Gerät sein übergeordnetes Gerät im lokalen Netzwerk finden kann.
  • Sichere Verbindung: Stellen Sie eine sichere Verbindung mit vertrauenswürdigen Zertifikaten her, die Teil derselben Kette sind.

Voraussetzungen

Tipp

In diesem Artikel finden Sie detaillierte Schritte und Optionen, die Sie beim Erstellen einer geeigneten Gatewayhierarchie für Ihr Szenario unterstützen. Ein Tutorial finden Sie unter Tutorial: Erstellen einer Hierarchie für IoT Edge-Geräte mit Gateways.

Erstellen einer Gatewayhierarchie

Sie erstellen eine IoT Edge-Gatewayhierarchie, indem Sie Beziehungen zwischen übergeordneten/untergeordneten Geräten für die IoT Edge-Geräte im Szenario definieren. Sie können ein übergeordnetes Gerät beim Erstellen einer neuen Geräteidentität festlegen, oder Sie verwalten das übergeordnete Gerät und untergeordnete Geräte einer vorhandenen Geräteidentität.

Beim Einrichten von übergeordnet/untergeordnet-Beziehungen werden nachgeschaltete Geräte autorisiert, eine Verbindung zu ihrem übergeordneten Gerät herzustellen, wie wenn sie eine Verbindung zu IoT Hub herstellen würden.

Nur IoT Edge-Geräte können übergeordnete Geräte sein. Sowohl IoT Edge-Geräte als auch IoT-Geräte können jedoch untergeordnete Geräte sein. Ein übergeordnetes Gerät kann über viele untergeordnete Geräte verfügen. Ein untergeordnetes Gerät kann jedoch nur ein übergeordnetes Gerät haben. Eine Gatewayhierarchie wird erstellt, indem jeweils übergeordnete und untergeordnete Geräte verkettet werden, sodass das untergeordnete Geräte eines Geräts das übergeordnete Gerät eines anderen ist.

Bei einem übergeordneten Gerät kann es standardmäßig bis zu 100 untergeordnete Geräte geben. Sie können diesen Grenzwert ändern, indem Sie im edgeHub-Modul des übergeordneten Geräts die Umgebungsvariable MaxConnectedClients festlegen.

Im Azure-Portal können Sie die Beziehung zwischen übergeordnetem und untergeordnetem Gerät beim Erstellen neuer Geräteidentitäten verwalten, oder indem Sie vorhandene Geräte bearbeiten.

Wenn Sie ein neues IoT Edge-Gerät erstellen, steht Ihnen die Option zur Verfügung, übergeordnete und untergeordnete Geräte aus einer Liste vorhandener IoT Edge-Geräte im jeweiligen Hub auszuwählen.

  1. Navigieren Sie im Azure-Portal zu Ihrem IoT Hub.
  2. Wählen Sie Geräte im Menü Geräteverwaltung aus.
  3. Wählen Sie Gerät hinzufügen und aktivieren Sie dann das Kontrollkästchen IoT Edge-Gerät.
  4. Zusammen mit dem Festlegen der Geräte-ID und der Authentifizierungseinstellungen können Sie ein übergeordnetes Gerät festlegen oder untergeordnete Geräte auswählen.
  5. Wählen Sie das Gerät oder die Geräte aus, die übergeordnetes Gerät bzw. untergeordnete Geräte sein sollen.

Sie können auch Beziehungen zwischen übergeordneten und untergeordneten Geräten für vorhandene Geräte erstellen oder sie verwalten.

  1. Navigieren Sie im Azure-Portal zu Ihrem IoT Hub.
  2. Wählen Sie Geräte im Menü Geräteverwaltung aus.
  3. Wählen Sie das IoT Edge-Gerät, das Sie verwalten möchten, aus der Liste aus.
  4. Wählen Sie das Übergeordnetes Gerät festlegenZahnrad-Symbol oder Untergeordnete Geräte verwalten aus.
  5. Fügen Sie übergeordnete oder untergeordnete Geräte hinzu, oder entfernen Sie sie.

Hinweis

Wenn Sie Beziehungen zwischen über- und untergeordneten Elementen programmgesteuert einrichten möchten, können Sie das IoT Hub Service SDK für C#, Java oder Node.js verwenden.

Dies ist ein Beispiel für die Zuordnung von untergeordneten Geräten mit dem C#-SDK. Die Aufgabe RegistryManager_AddAndRemoveDeviceWithScope() zeigt, wie Sie programmgesteuert eine Hierarchie mit drei Ebenen erstellen. Ein IoT Edge-Gerät befindet sich als übergeordnetes Element auf der ersten Ebene. Ein weiteres IoT Edge-Gerät befindet sich auf der zweiten Ebene und dient sowohl als untergeordnetes als auch als übergeordnetes Element. Schließlich befindet sich ein IoT-Gerät auf der dritten Ebene als untergeordnetes Gerät der untersten Ebene.

Generieren von Zertifikaten

Auf den Geräten einer Gatewayhierarchie muss eine konsistente Zertifikatkette installiert sein, damit eine sichere Kommunikation zwischen diesen Geräten möglich ist. Jedes Gerät in der Hierarchie – ob IoT Edge-Gerät oder nachgeschaltetes IoT-Gerät – benötigt eine Kopie desselben Zertifikats der Stammzertifizierungsstelle. Die einzelnen IoT Edge-Geräte in der Hierarchie verwenden das Zertifikat der Stammzertifizierungsstelle dann als Stamm für ihr jeweiliges Stammzertifizierungsstellenzertifikat.

Mit dieser Einrichtung kann jedes nachgeschaltete IoT Edge-Gerät die Identität des jeweiligen übergeordneten Geräts überprüfen, indem überprüft wird, ob der Edgehub, mit dem die Verbindung hergestellt wird, über ein Serverzertifikat verfügt, das vom gemeinsamen Stammzertifizierungsstellenzertifikat signiert ist.

Darstellung der Zertifikatkette, die von der Stammzertifizierungsstelle auf dem Gateway und nachgeordneten Gerät ausgegeben wird

Weitere Informationen zu den IoT Edge-Zertifikatanforderungen finden Sie unter Grundlegendes zur Verwendung von Zertifikaten durch Azure IoT Edge.

  1. Erstellen Sie die folgenden Zertifikate, oder fordern Sie sie an:

    • Ein Zertifikat der Stammzertifizierungsstelle: Dabei handelt es sich um das oberste gemeinsam genutzte Zertifikat für alle Geräte in einer bestimmten Gatewayhierarchie. Dieses Zertifikat ist auf allen Geräten installiert.
    • Alle Zwischenzertifikate, die in die Stammzertifikatkette eingeschlossen werden sollen.
    • Ein Gerätezertifizierungsstellenzertifikat und der dazugehörige private Schlüssel, die vom Stamm- und den Zwischenzertifikaten erstellt werden. Sie benötigen ein eindeutiges Gerätezertifizierungsstellenzertifikat für jedes einzelne IoT Edge-Gerät in der Gatewayhierarchie.

    Sie können entweder eine selbstsignierte Zertifizierungsstelle verwenden oder ein Zertifikat von einer vertrauenswürdigen kommerziellen Zertifizierungsstelle wie Baltimore, Verisign, DigiCert oder GlobalSign erwerben.

  2. Wenn Sie keine eigenen Zertifikate zum Testen besitzen, erstellen Sie Stamm- und Zwischenzertifikate und dann Zertifizierungsstellenzertifikate für IoT Edge-Geräte für jedes Gerät. In diesem Artikel verwenden Sie Testzertifikate, die mithilfe von Zertifizierungsstellen-Testzertifikaten für Beispiele und Tutorials generiert werden. Beispielsweise erstellen die folgenden Befehle ein Stammzertifizierungsstellenzertifikat, ein Zertifikat für das übergeordnete Gerät und ein Zertifikat für das untergeordnete Gerät.

    # !!! For test only - do not use in production !!!
    
    # Create the the root CA test certificate
    ./certGen.sh create_root_and_intermediate
    
    # Create the parent (gateway) device test certificate 
    # signed by the shared root CA certificate
    ./certGen.sh create_edge_device_ca_certificate "gateway"
    
    # Create the downstream device test certificate
    # signed by the shared root CA certificate
    ./certGen.sh create_edge_device_ca_certificate "downstream"
    

    Warnung

    Verwenden Sie Zertifikate, die von den Testskripts erstellt wurden, nicht für die Produktion. Sie enthalten hartcodierte Kennwörter und laufen standardmäßig nach 30 Tagen ab. Die Zertifizierungsstellen-Testzertifikate werden zu Demonstrationszwecken bereitgestellt, damit Sie sich mit Zertifizierungsstellenzertifikaten vertraut machen können. Verwenden Sie in der Produktion Ihre eigenen bewährten Sicherheitsmethoden für die Zertifizierungserstellung und Lebensdauerverwaltung.

    Weitere Informationen zum Erstellen von Testzertifikaten finden Sie unter Erstellen von Demozertifikaten zum Testen der Features von IoT Edge-Geräten.

  3. Sie müssen die Zertifikate und Schlüssel auf jedes Gerät übertragen. Sie können dazu einen USB-Datenträger, einen Dienst wie Azure Key Vault oder eine Funktion wie Secure file copy verwenden. Wählen Sie eine Methode aus, die am besten zu Ihrem Szenario passt. Kopieren Sie die Dateien in das bevorzugte Verzeichnis für Zertifikate und Schlüssel. Verwenden Sie /var/aziot/certs für Zertifikate und /var/aziot/secrets für Schlüssel.

Weitere Informationen zum Installieren von Zertifikaten auf einem Gerät finden Sie unter Verwalten von Zertifikaten auf einem IoT Edge Gerät.

Konfigurieren des übergeordneten Geräts

Öffnen Sie zum Konfigurieren Ihres übergeordneten Geräts eine lokale Befehlsshell oder eine Remotebefehlsshell.

Für sichere Verbindungen muss jedes übergeordnete IoT Edge-Gerät in einem Gatewayszenario mit einem eindeutigen Gerätezertifizierungsstellenzertifikat und einer Kopie des Stammzertifizierungsstellenzertifikats konfiguriert werden, das von allen Geräten in der Gatewayhierarchie genutzt wird.

  1. Überprüfen Sie, ob Ihre Zertifikate die Formatanforderungen erfüllen.

  2. Übertragen Sie das Stammzertifizierungsstellenzertifikat, das Zertifikat des übergeordneten Geräts und den übergeordneten privaten Schlüssel auf das übergeordnete Gerät.

  3. Kopieren Sie die Zertifikate und Schlüssel in die richtigen Verzeichnisse. Die bevorzugten Verzeichnisse für Gerätezertifikate sind /var/aziot/certs für die Zertifikate und /var/aziot/secrets für Schlüssel.

    ### Copy device certificate ###
    
    # If the device certificate and keys directories don't exist, create, set ownership, and set permissions
    sudo mkdir -p /var/aziot/certs
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    sudo mkdir -p /var/aziot/secrets
    sudo chown aziotks:aziotks /var/aziot/secrets
    sudo chmod 700 /var/aziot/secrets
    
    # Copy full-chain device certificate and private key into the correct directory
    sudo cp iot-edge-device-ca-gateway-full-chain.cert.pem /var/aziot/certs
    sudo cp iot-edge-device-ca-gateway.key.pem /var/aziot/secrets
    
    ### Root certificate ###
    
    # Copy root certificate into the /certs directory
    sudo cp azure-iot-test-only.root.ca.cert.pem /var/aziot/certs
    
    # Copy root certificate into the CA certificate directory and add .crt extension.
    # The root certificate must be in the CA certificate directory to install it in the certificate store.
    # Use the appropriate copy command for your device OS or if using EFLOW.
    
    # For Ubuntu and Debian, use /usr/local/share/ca-certificates/
    sudo cp azure-iot-test-only.root.ca.cert.pem /usr/local/share/azure-iot-test-only.root.ca.cert.pem.crt
    # For EFLOW, use /etc/pki/ca-trust/source/anchors/
    sudo cp azure-iot-test-only.root.ca.cert.pem /etc/pki/ca-trust/source/anchors/azure-iot-test-only.root.ca.pem.crt
    
  4. Ändern Sie den Besitz und die Berechtigungen der Zertifikate und Schlüssel.

    # Give aziotcs ownership to certificates
    # Read and write for aziotcs, read-only for others
    sudo chown -R aziotcs:aziotcs /var/aziot/certs
    sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
    
    # Give aziotks ownership to private keys
    # Read and write for aziotks, no permission for others
    sudo chown -R aziotks:aziotks /var/aziot/secrets
    sudo find /var/aziot/secrets -type f -name "*.*" -exec chmod 600 {} \;
    
    # Verify permissions of directories and files
    sudo ls -Rla /var/aziot
    

    Die Ausgabe der Liste mit korrektem Eigentum und Berechtigungen ähnelt der folgenden:

    azureUser@vm:/var/aziot$ sudo ls -Rla /var/aziot
    /var/aziot:
    total 16
    drwxr-xr-x  4 root    root    4096 Dec 14 00:16 .
    drwxr-xr-x 15 root    root    4096 Dec 14 00:15 ..
    drwxr-xr-x  2 aziotcs aziotcs 4096 Jan 14 00:31 certs
    drwx------  2 aziotks aziotks 4096 Jan 23 17:23 secrets
    
    /var/aziot/certs:
    total 20
    drwxr-xr-x 2 aziotcs aziotcs 4096 Jan 14 00:31 .
    drwxr-xr-x 4 root    root    4096 Dec 14 00:16 ..
    -rw-r--r-- 1 aziotcs aziotcs 1984 Jan 14 00:24 azure-iot-test-only.root.ca.cert.pem
    -rw-r--r-- 1 aziotcs aziotcs 5887 Jan 14 00:27 iot-edge-device-ca-gateway-full-chain.cert.pem
    
    /var/aziot/secrets:
    total 16
    drwx------ 2 aziotks aziotks 4096 Jan 23 17:23 .
    drwxr-xr-x 4 root    root    4096 Dec 14 00:16 ..
    -rw------- 1 aziotks aziotks 3243 Jan 14 00:28 iot-edge-device-ca-gateway.key.pem
    
  5. Installieren Sie das Stammzertifikat der Zertifizierungsstelle auf dem übergeordneten IoT Edge-Gerät, indem Sie den Zertifikatspeicher auf dem Gerät mithilfe des plattformspezifischen Befehls aktualisieren.

    # Update the certificate store
    
    # For Ubuntu or Debian - use update-ca-certificates
    sudo update-ca-certificates
    # For EFLOW or RHEL - use update-ca-trust
    sudo update-ca-trust
    

    Weitere Informationen zur Verwendung von update-ca-trust in EFLOW finden Sie unter CBL-Mariner: Verwaltung von SSL-Zertifizierungsstellenzertifikaten.

Der Befehl meldet, dass /etc/ssl/certs ein Zertifikat hinzugefügt wurde.

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.

Aktualisieren der übergeordneten Konfigurationsdatei

Auf Ihrem Gerät sollte IoT Edge bereits installiert sein. Falls nicht, führen Sie die Schritte unter Manuelles Bereitstellen eines einzelnen Linux-IoT Edge aus.

  1. Überprüfen Sie, ob die Konfigurationsdatei /etc/aziot/config.toml auf dem übergeordneten Gerät vorhanden ist.

    Wenn die Konfigurationsdatei auf Ihrem Gerät nicht vorhanden ist, erstellen Sie sie mit dem folgenden Befehl basierend auf der Vorlagendatei:

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    

    Sie können die Vorlagendatei auch als Referenz verwenden, um Konfigurationsparameter in diesem Abschnitt hinzuzufügen.

  2. Öffnen Sie die IoT Edge-Konfigurationsdatei mithilfe eines Editors. Verwenden Sie beispielsweise den nano-Editor, um die Datei /etc/aziot/config.toml zu öffnen.

    sudo nano /etc/aziot/config.toml
    
  3. Suchen Sie den Parameter hostname, oder fügen Sie ihn am Anfang der Konfigurationsdatei hinzu. Aktualisieren Sie den Wert auf den vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) oder die IP-Adresse des übergeordneten IoT Edge-Geräts. Zum Beispiel:

    hostname = "10.0.0.4"
    

    Damit die Gatewayermittlung möglich ist, muss jedes (übergeordnete) IoT Edge-Gatewaygerät den Parameter hostname angeben, den die untergeordneten Geräte verwenden, um es im lokalen Netzwerk zu finden. Jedes nachgeschaltete IoT Edge-Gerät muss den Parameter parent_hostname angeben, um das übergeordnete Gerät zu identifizieren. In einem hierarchischen Szenario, in dem ein einzelnes IoT Edge-Gerät sowohl übergeordnetes als auch untergeordnetes Gerät ist, sind beide Parameter erforderlich.

    Die Parameter hostname und trust_bundle_cert müssen sich am Anfang der Konfigurationsdatei vor allen Abschnitten befinden. Durch das Hinzufügen des Parameters vor definierten Abschnitten wird sichergestellt, dass er ordnungsgemäß angewendet wird.

    Verwenden Sie einen Hostnamen mit weniger als 64 Zeichen. Dies ist das Zeichenlimit für einen allgemeinen Namen für ein Serverzertifikat.

    Nutzen Sie das Muster des Hostnamens für die gesamte Gatewayhierarchie konsistent. Verwenden Sie entweder FQDNs oder IP-Adressen, nicht beides. Der FQDN oder die IP-Adresse ist erforderlich, um eine Verbindung mit nachgeschalteten Geräten herzustellen.

    Legen Sie den Hostnamen fest, bevor der Container edgeHub erstellt wird. Wenn edgeHub ausgeführt wird, wird die Änderung des Hostnamens in der Konfigurationsdatei erst wirksam, wenn der Container neu erstellt wird. Weitere Informationen dazu, wie Sie überprüfen, ob der Hostnamen angewendet wurde, finden Sie im Abschnitt Überprüfen der übergeordneten Konfiguration.

  4. Suchen Sie den Parameter Trust bundle cert, oder fügen Sie ihn am Anfang der Konfigurationsdatei hinzu.

    Aktualisieren Sie den Parameter trust_bundle_cert mit dem Datei-URI auf das Zertifikat der Stammzertifizierungsstelle auf Ihrem Gerät. Zum Beispiel:

    trust_bundle_cert = "file:///var/aziot/certs/azure-iot-test-only.root.ca.cert.pem"
    
  5. Suchen Sie in der Konfigurationsdatei den Abschnitt für das Edge-Zertifikat der Zertifizierungsstelle, oder fügen Sie ihn hinzu. Aktualisieren Sie die Parameter für das Zertifikat (cert) und den privaten Schlüssel (pk) mit den Datei-URI-Pfaden für das Zertifikat mit vollständiger Kette und die Schlüsseldateien auf dem übergeordneten IoT Edge-Gerät. IoT Edge erfordert, dass das Zertifikat und der private Schlüssel im textbasierten Privacy Enhanced Mail-Format (PEM) vorliegen. Zum Beispiel:

    [edge_ca]
    cert = "file:///var/aziot/certs/iot-edge-device-ca-gateway-full-chain.cert.pem"
    pk = "file:///var/aziot/secrets/iot-edge-device-ca-gateway.key.pem"
    
  6. Überprüfen Sie, ob Ihr IoT Edge-Gerät beim Start die richtige Version des IoT Edge-Agents verwendet. Suchen Sie den Abschnitt für den Standard-Edge-Agent, und legen Sie den Imagewert für IoT Edge auf Version 1.4 fest. Zum Beispiel:

    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.4"
    
  7. Der Anfang der übergeordneten Konfigurationsdatei sollte dem folgenden Beispiel ähneln:

    hostname = "10.0.0.4"
    trust_bundle_cert = "file:///var/aziot/certs/azure-iot-test-only.root.ca.cert.pem"
    
    [edge_ca]
    cert = "file:///var/aziot/certs/iot-edge-device-ca-gateway-full-chain.cert.pem"
    pk = "file:///var/aziot/secrets/iot-edge-device-ca-gateway.key.pem"
    
  8. Speichern und schließen Sie die Konfigurationsdatei config.toml. Wenn Sie beispielsweise den nano-Editor verwenden, wählen Sie STRG+O - Write Out, EINGABE und STRG+X - Exit aus.

  9. Wenn Sie zuvor bereits andere Zertifikate für IoT Edge verwendet haben, löschen Sie die Dateien in den folgenden beiden Verzeichnissen, um dafür zu sorgen, dass Ihre neuen Zertifikate verwendet werden:

    • /var/lib/aziot/certd/certs
    • /var/lib/aziot/keyd/keys
  10. Wenden Sie Ihre Änderungen an.

    sudo iotedge config apply
    
  11. Überprüfen Sie, ob Fehler in der Konfiguration vorhanden sind.

    sudo iotedge check --verbose
    

    Hinweis

    Auf einem neu bereitgestellten Gerät wird möglicherweise ein Fehler im Zusammenhang mit dem IoT Edge-Hub angezeigt:

    × Produktionsbereitschaft: Das Speicherverzeichnis des Edge-Hubs wird im Hostdateisystem beibehalten – Fehler.

    Der aktuelle Zustand des edgeHub-Containers konnte nicht überprüft werden.

    Dieser Fehler wird auf einem neu bereitgestellten Gerät erwartet, da das IoT Edge-Hubmodul nicht ausgeführt wird. Um den Fehler zu beheben, legen Sie in IoT Hub die Module für das Gerät fest, und erstellen Sie eine Bereitstellung. Durch das Erstellen einer Bereitstellung für das Gerät werden die Module auf dem Gerät gestartet, einschließlich des IoT Edge-Hubmoduls.

Überprüfen der übergeordneten Konfiguration

Der Hostname muss ein vollqualifizierter Domänenname (FQDN) oder die IP-Adresse des IoT Edge-Geräts sein, da IoT Edge diesen Wert im Serverzertifikat verwendet, wenn nachgeschaltete Geräte eine Verbindung herstellen. Die Werte müssen übereinstimmen, oder Sie erhalten einen Fehler zu einem IP-Adresskonflikt.

Um den Hostnamen zu überprüfen, müssen Sie die Umgebungsvariablen des edgeHub-Containers überprüfen.

  1. Listen Sie die ausgeführten IoT Edge-Container auf:

    iotedge list
    

    Überprüfen Sie, ob die Container edgeAgent und edgeHub ausgeführt werden. Die Befehlsausgabe sollte ungefähr wie das folgende Beispiel aussehen:

    NAME                        STATUS           DESCRIPTION      CONFIG
    SimulatedTemperatureSensor  running          Up 5 seconds     mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
    edgeAgent                   running          Up 17 seconds    mcr.microsoft.com/azureiotedge-agent:1.4
    edgeHub                     running          Up 6 seconds     mcr.microsoft.com/azureiotedge-hub:1.4
    
  2. Überprüfen Sie den edgeHub-Container:

    sudo docker inspect edgeHub
    
  3. Suchen Sie in der Ausgabe den Parameter EdgeDeviceHostName im Abschnitt Env:

    "EdgeDeviceHostName=10.0.0.4"
    
  4. Vergewissern Sie sich, dass der Parameter EdgeDeviceHostName mit der Einstellung für hostname in config.toml übereinstimmt. Wenn sie nicht übereinstimmen, wurde der edgeHub-Container ausgeführt, als Sie die Konfiguration geändert und angewendet haben. Um EdgeDeviceHostName zu aktualisieren, entfernen Sie den edgeAgent-Container.

    sudo docker rm -f edgeAgent
    

    Die Container edgeAgent und edgeHub werden innerhalb weniger Minuten neu erstellt und gestartet. Wenn der Container edgeHub ausgeführt wird, überprüfen Sie den Container, und vergewissern Sie sich, dass der Parameter EdgeDeviceHostName mit der Konfigurationsdatei übereinstimmt.

Konfigurieren Ihres nachgeschalteten Geräts

Öffnen Sie zum Konfigurieren Ihres nachgeschalteten Geräts eine lokale Befehlsshell oder eine Remotebefehlsshell.

Für sichere Verbindungen muss jedes nachgeschaltete IoT Edge-Gerät in einem Gatewayszenario mit einem eindeutigen Zertifikat der Gerätezertifizierungsstelle und einer Kopie des Zertifikats der Stammzertifizierungsstelle konfiguriert werden, das von allen Geräten in der Gatewayhierarchie genutzt wird.

  1. Überprüfen Sie, ob Ihre Zertifikate die Formatanforderungen erfüllen.

  2. Übertragen Sie das Zertifikat der Stammzertifizierungsstelle, das Zertifikat der Gerätezertifizierungsstelle für das untergeordnete Gerät und den untergeordneten privaten Schlüssel auf das nachgeschaltete Gerät.

  3. Kopieren Sie die Zertifikate und Schlüssel in die richtigen Verzeichnisse. Die bevorzugten Verzeichnisse für Gerätezertifikate sind /var/aziot/certs für die Zertifikate und /var/aziot/secrets für Schlüssel.

    ### Copy device certificate ###
    
    # If the device certificate and keys directories don't exist, create, set ownership, and set permissions
    sudo mkdir -p /var/aziot/certs
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    sudo mkdir -p /var/aziot/secrets
    sudo chown aziotks:aziotks /var/aziot/secrets
    sudo chmod 700 /var/aziot/secrets
    
    # Copy device full-chain certificate and private key into the correct directory
    sudo cp iot-device-downstream-full-chain.cert.pem /var/aziot/certs
    sudo cp iot-device-downstream.key.pem /var/aziot/secrets
    
    ### Root certificate ###
    
    # Copy root certificate into the /certs directory
    sudo cp azure-iot-test-only.root.ca.cert.pem /var/aziot/certs
    
    # Copy root certificate into the CA certificate directory and add .crt extension.
    # The root certificate must be in the CA certificate directory to install it in the certificate store.
    # Use the appropriate copy command for your device OS or if using EFLOW.
    
    # For Ubuntu and Debian, use /usr/local/share/ca-certificates/
    sudo cp azure-iot-test-only.root.ca.cert.pem /usr/local/share/azure-iot-test-only.root.ca.cert.pem.crt
    # For EFLOW, use /etc/pki/ca-trust/source/anchors/
    sudo cp azure-iot-test-only.root.ca.cert.pem /etc/pki/ca-trust/source/anchors/azure-iot-test-only.root.ca.pem.crt
    
  4. Ändern Sie den Besitz und die Berechtigungen der Zertifikate und Schlüssel.

    # Give aziotcs ownership to certificates
    # Read and write for aziotcs, read-only for others
    sudo chown -R aziotcs:aziotcs /var/aziot/certs
    sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
    
    # Give aziotks ownership to private keys
    # Read and write for aziotks, no permission for others
    sudo chown -R aziotks:aziotks /var/aziot/secrets
    sudo find /var/aziot/secrets -type f -name "*.*" -exec chmod 600 {} \;
    
  5. Installieren Sie das Stammzertifikat der Zertifizierungsstelle auf dem untergeordneten IoT Edge-Gerät, indem Sie den Zertifikatspeicher auf dem Gerät mithilfe des plattformspezifischen Befehls aktualisieren.

    # Update the certificate store
    
    # For Ubuntu or Debian - use update-ca-certificates
    sudo update-ca-certificates
    # For EFLOW or RHEL - use update-ca-trust
    sudo update-ca-trust
    

    Weitere Informationen zur Verwendung von update-ca-trust in EFLOW finden Sie unter CBL-Mariner: Verwaltung von SSL-Zertifizierungsstellenzertifikaten.

Der Befehl meldet, dass /etc/ssl/certs ein Zertifikat hinzugefügt wurde.

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.

Aktualisieren der nachgeschalteten Konfigurationsdatei

Auf Ihrem Gerät sollte IoT Edge bereits installiert sein. Falls nicht, führen Sie die Schritte unter Manuelles Bereitstellen eines einzelnen Linux-IoT Edge aus.

  1. Überprüfen Sie, ob die Konfigurationsdatei /etc/aziot/config.toml auf dem nachgeschalteten Gerät vorhanden ist.

    Wenn die Konfigurationsdatei auf Ihrem Gerät nicht vorhanden ist, erstellen Sie sie mit dem folgenden Befehl basierend auf der Vorlagendatei:

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    

    Sie können die Vorlagendatei auch als Referenz verwenden, um Konfigurationsparameter in diesem Abschnitt hinzuzufügen.

  2. Öffnen Sie die IoT Edge-Konfigurationsdatei mithilfe eines Editors. Verwenden Sie beispielsweise den nano-Editor, um die Datei /etc/aziot/config.toml zu öffnen.

    sudo nano /etc/aziot/config.toml
    
  3. Suchen Sie den Parameter parent_hostname, oder fügen Sie ihn am Anfang der Konfigurationsdatei hinzu. Jedes nachgeschaltete IoT Edge-Gerät muss den Parameter parent_hostname angeben, um das übergeordnete Gerät zu identifizieren. Aktualisieren Sie den Parameter parent_hostname auf den FQDN oder die IP-Adresse des übergeordneten Geräts. Der Wert muss mit dem Wert übereinstimmen, der in der Konfigurationsdatei des übergeordneten Geräts als Hostname angegeben wurde. Zum Beispiel:

    parent_hostname = "10.0.0.4"
    
  4. Suchen Sie den Parameter Trust bundle cert, oder fügen Sie ihn am Anfang der Konfigurationsdatei hinzu.

    Aktualisieren Sie den Parameter trust_bundle_cert mit dem Datei-URI auf das Zertifikat der Stammzertifizierungsstelle auf Ihrem Gerät. Zum Beispiel:

    trust_bundle_cert = "file:///var/aziot/certs/azure-iot-test-only.root.ca.cert.pem"
    
  5. Suchen Sie in der Konfigurationsdatei den Abschnitt für das Edge-Zertifikat der Zertifizierungsstelle, oder fügen Sie ihn hinzu. Aktualisieren Sie die Parameter für das Zertifikat (cert) und den privaten Schlüssel (pk) mit den Datei-URI-Pfaden für das Zertifikat mit vollständiger Kette und die Schlüsseldateien auf dem nachgelagerten IoT Edge-Gerät. IoT Edge erfordert, dass das Zertifikat und der private Schlüssel im textbasierten Privacy Enhanced Mail-Format (PEM) vorliegen. Zum Beispiel:

    [edge_ca]
    cert = "file:///var/aziot/certs/iot-device-downstream-full-chain.cert.pem"
    pk = "file:///var/aziot/secrets/iot-device-downstream.key.pem"
    
  6. Überprüfen Sie, ob Ihr IoT Edge-Gerät beim Start die richtige Version des IoT Edge-Agents verwendet. Suchen Sie den Abschnitt für den Standard-Edge-Agent, und legen Sie den Imagewert für IoT Edge auf Version 1.4 fest. Zum Beispiel:

    [agent.config]
    image: "mcr.microsoft.com/azureiotedge-agent:1.4"
    
  7. Der Anfang Ihrer nachgeschalteten Konfigurationsdatei sollte ähnlich wie im folgenden Beispiel aussehen.

    parent_hostname = "10.0.0.4"
    trust_bundle_cert = "file:///var/aziot/certs/azure-iot-test-only.root.ca.cert.pem"
    
    [edge_ca]
    cert = "file:///var/aziot/certs/iot-device-downstream-full-chain.cert.pem"
    pk = "file:///var/aziot/secrets/iot-device-downstream.key.pem"
    
  8. Speichern und schließen Sie die Konfigurationsdatei config.toml. Wenn Sie beispielsweise den nano-Editor verwenden, wählen Sie STRG+O - Write Out, EINGABE und STRG+X - Exit aus.

  9. Wenn Sie zuvor bereits andere Zertifikate für IoT Edge verwendet haben, löschen Sie die Dateien in den folgenden beiden Verzeichnissen, um dafür zu sorgen, dass Ihre neuen Zertifikate verwendet werden:

    • /var/lib/aziot/certd/certs
    • /var/lib/aziot/keyd/keys
  10. Wenden Sie Ihre Änderungen an.

    sudo iotedge config apply
    
  11. Überprüfen Sie, ob Fehler in der Konfiguration vorhanden sind.

    sudo iotedge check --verbose
    

    Tipp

    Das Prüftool für IoT Edge verwendet einen Container, um einige der Diagnoseüberprüfungen durchzuführen. Wenn Sie dieses Tool auf nachgeschalteten IoT Edge-Geräten verwenden möchten, sorgen Sie dafür, dass diese auf mcr.microsoft.com/azureiotedge-diagnostics:latest zugreifen können. Sorgen Sie alternativ dafür, dass sich das Containerimage in Ihrer privaten Containerregistrierung befindet.

    Hinweis

    Auf einem neu bereitgestellten Gerät wird möglicherweise ein Fehler im Zusammenhang mit dem IoT Edge-Hub angezeigt:

    × Produktionsbereitschaft: Das Speicherverzeichnis des Edge-Hubs wird im Hostdateisystem beibehalten – Fehler.

    Der aktuelle Zustand des edgeHub-Containers konnte nicht überprüft werden.

    Dieser Fehler wird auf einem neu bereitgestellten Gerät erwartet, da das IoT Edge-Hubmodul nicht ausgeführt wird. Um den Fehler zu beheben, legen Sie in IoT Hub die Module für das Gerät fest, und erstellen Sie eine Bereitstellung. Durch das Erstellen einer Bereitstellung für das Gerät werden die Module auf dem Gerät gestartet, einschließlich des IoT Edge-Hubmoduls.

Isolieren von nachgeschalteten Geräten im Netzwerk

Mit den bisherigen Schritten dieses Artikels wurden IoT Edge-Geräte entweder als Gateway oder als nachgeschaltetes Gerät eingerichtet. Außerdem wurde eine vertrauenswürdige Verbindung zwischen ihnen erstellt. Das Gatewaygerät verarbeitet Interaktionen zwischen dem nachgeschalteten Gerät und IoT Hub, einschließlich der Authentifizierung und Nachrichtenrouting. Auf nachgeschalteten IoT Edge-Geräten bereitgestellte Module können weiterhin ihre eigenen Verbindungen zu Clouddiensten herstellen.

Bei einigen Netzwerkarchitekturen, z. B. solchen, die den ISA-95-Standard befolgen, wird versucht, die Anzahl an Internetverbindungen zu minimieren. In diesen Szenarios können Sie nachgeschaltete IoT Edge-Geräte ohne direkte Internetkonnektivität konfigurieren. Zusätzlich zum Routing der IoT Hub-Kommunikation über das Gatewaygerät können IoT Edge-Geräte alle Cloudverbindungen über das Gatewaygerät herstellen.

Für diese Netzwerkkonfiguration ist erforderlich, dass nur das IoT Edge-Gerät der obersten Ebene einer Gatewayhierarchie direkte Verbindungen zur Cloud aufweist. IoT Edge-Geräte in den unteren Ebenen können jeweils nur mit ihrem übergeordneten Gerät oder untergeordneten Geräten kommunizieren. Sondermodule auf den Gatewaygeräten ermöglichen dieses Szenario. Dazu gehören die folgenden:

  • Das API-Proxymodul ist für jedes IoT Edge-Gateway erforderlich, das ein weiteres untergeordnetes IoT Edge-Gerät aufweist. Das bedeutet, das Modul muss sich auf jeder Ebene einer Gatewayhierarchie mit Ausnahme der untersten Ebene befinden. Dieses Modul verwendet einen nginx-Reverseproxy, um HTTP-Daten über Netzwerkebenen über einen einzelnen Port weiterzuleiten. Über den dazugehörigen Modulzwilling und die Umgebungsvariablen ist eine umfangreiche Konfiguration möglich. Das Modul kann also exakt an Ihre Gatewayszenarioanforderungen angepasst werden.

  • Das Docker-Registrierungsmodul kann auf dem IoT Edge-Gatewaygerät auf der obersten Ebene einer Gatewayhierarchie bereitgestellt werden. Dieses Modul ist verantwortlich für das Abrufen und Zwischenspeichern von Containerimages im Auftrag aller IoT Edge-Geräte unterer Ebenen. Die Alternative zum Bereitstellen dieses Moduls auf der obersten Ebene ist die Verwendung einer lokalen Registrierung oder das manuelle Laden von Containerimages auf Geräte bei Festlegung der Pullrichtlinie des Moduls auf Nie.

  • Das Modul Azure Blob Storage für IoT Edge kann auf dem IoT Edge-Gatewaygerät auf der obersten Ebene einer Gatewayhierarchie bereitgestellt werden. Dieses Modul ist verantwortlich für das Hochladen von Blobs im Auftrag aller IoT Edge-Geräte unterer Ebenen. Die Möglichkeit, Blobs hochzuladen, ermöglicht auch hilfreiche Troubleshootingfunktionen für IoT Edge-Geräte auf unteren Ebenen, z. B. Hochladen von Modulprotokollen und Unterstützung für das Hochladen von Paketen.

Netzwerkkonfiguration

Für jedes Gatewaygerät der oberen Ebene müssen Netzwerkbetreiber Folgendes tun:

  • Angeben einer statischen IP-Adresse oder eines vollqualifizierten Domänennamens (FQDN)

  • Autorisieren der ausgehenden Kommunikation von dieser IP-Adresse zu Ihrem Azure IoT Hub-Hostname über die Ports 443 (HTTPS) und 5671 (AMQP)

  • Autorisieren ausgehender Kommunikation von dieser IP-Adresse zu Ihrem Azure Container Registry-Hostname über Port 443 (HTTPS)

    Das API-Proxymodul kann jeweils nur Verbindungen zu einer Containerregistrierung zur selben Zeit verarbeiten. Es wird empfohlen, alle Containerimages, einschließlich der öffentlichen von der Containerregistrierung von Microsoft (mcr.microsoft.com) bereitgestellten Images, in Ihrer privaten Containerregistrierung zu speichern.

Für jedes Gatewaygerät einer unteren Ebene müssen Netzwerkbetreiber Folgendes tun:

  • Bereitstellen einer statischen IP-Adresse
  • Autorisieren ausgehender Kommunikation von dieser IP-Adresse zur IP-Adresse des übergeordneten Gateway über die Ports 443 (HTTPS) und 5671 (AMQP)

Bereitstellen von Modulen auf Geräten oberer Ebenen

Das IoT Edge-Gerät auf der obersten Ebene einer Gatewayhierarchie verfügt über mehrere erforderliche Module, die zusätzlich zu Workloadmodulen, die Sie möglicherweise auf dem Gerät ausführen, für es bereitgestellt werden müssen.

Das API-Proxymodul wurde so entworfen, dass es angepasst werden kann, um die häufigsten Gatewayszenarios zu verarbeiten. In diesem Artikel finden Sie ein Beispiel für das Einrichten der Module in einer einfachen Konfiguration. Unter Konfigurieren des API-Proxymoduls für Ihr Gatewayhierarchieszenario finden Sie detailliertere Informationen und Beispiele.

  1. Navigieren Sie im Azure-Portal zu Ihrem IoT Hub.

  2. Wählen Sie Geräte im Menü Geräteverwaltung aus.

  3. Wählen Sie das IoT Edge-Gerät der obersten Ebene, das Sie konfigurieren, aus der Liste aus.

  4. Wählen Sie Module festlegen aus.

  5. Klicken Sie im Abschnitt IoT Edge-Modul auf Hinzufügen und dann auf Marketplace-Modul.

  6. Suchen Sie nach dem Modul IoT Edge-API-Proxy, und klicken Sie darauf.

  7. Wählen Sie den Namen des API-Proxymoduls aus der Liste bereitgestellter Module aus, und aktualisieren Sie die folgenden Moduleinstellungen:

    1. Aktualisieren Sie auf der Registerkarte Umgebungsvariablen den Wert von NGINX_DEFAULT_PORT in 443.

    2. Aktualisieren Sie auf der Registerkarte mit Optionen zum Erstellen von Containern die Portbindungen in den Referenzport 443.

      {
        "HostConfig": {
          "PortBindings": {
            "443/tcp": [
              {
                "HostPort": "443"
              }
            ]
          }
        }
      }
      

    Diese Änderungen konfigurieren das API-Proxymodul so, dass es an Port 443 lauscht. Zur Vermeidung von Portbindungskollisionen müssen Sie das edgeHub-Modul so konfigurieren, dass es nicht an Port 443 lauscht. Stattdessen leitet das API-Proxymodul sämtlichen edgeHub-Datenverkehr für Port 443 weiter.

  8. Klicken Sie auf Runtimeeinstellungen, und suchen Sie nach den Optionen zum Erstellen des edgeHub-Moduls. Löschen Sie die Portbindung für Port 443, übernehmen Sie jedoch die Bindungen für die Ports 5671 und 8883.

    {
      "HostConfig": {
        "PortBindings": {
          "5671/tcp": [
            {
              "HostPort": "5671"
            }
          ],
          "8883/tcp": [
            {
              "HostPort": "8883"
            }
          ]
        }
      }
    }
    
  9. Klicken Sie auf Speichern zum Speichern der Änderungen an den Runtimeeinstellungen.

  10. Klicken Sie noch mal auf Hinzufügen, und klicken Sie dann auf das IoT Edge-Modul.

  11. Geben Sie die folgenden Werte an, um das Docker-Registrierungsmodul Ihrer Bereitstellung hinzuzufügen:

    1. Name des IoT Edge-Moduls:registry

    2. Image-URI (Auf der Registerkarte Moduleinstellungen): registry:latest.

    3. Fügen Sie auf der Registerkarte Umgebungsvariablen die folgenden Umgebungsvariablen hinzu:

      • Name: REGISTRY_PROXY_REMOTEURLWert: Die URL für die Containerregistrierung, der dieses Registrierungsmodul zugeordnet werden soll Beispiel: https://myregistry.azurecr.

        Das Registrierungsmodul kann nur einer Containerregistrierung zugeordnet werden, es wird also empfohlen, dass alle Containerimages in einer einzelnen privaten Containerregistrierung gespeichert werden.

      • Name: REGISTRY_PROXY_USERNAMEWert: Benutzername für die Authentifizierung bei der Containerregistrierung

      • Name: REGISTRY_PROXY_PASSWORDWert: Kennwort für die Authentifizierung bei der Containerregistrierung

    4. Öffnen Sie die Registerkarte mit Optionen für die Containererstellung. Fügen Sie dort Folgendes ein:

      {
          "HostConfig": {
              "PortBindings": {
                  "5000/tcp": [
                      {
                          "HostPort": "5000"
                      }
                  ]
              }
          }
      }
      
  12. Klicken Sie auf Hinzufügen, um das Modul der Bereitstellung hinzuzufügen.

  13. Wählen Sie "Weiter": Routen aus, um zum nächsten Schritt zu wechseln.

  14. Wenn Gerät-zu-Cloud-Nachrichten von nachgeschalteten Geräten IoT Hub erreichen sollen, schließen Sie eine Route ein, die alle Nachrichten an IoT Hub übergibt. Zum Beispiel:

    1. Name: Route
    2. Wert: FROM /messages/* INTO $upstream
  15. Klicken Sie auf Überprüfen + erstellen, um zum letzten Schritt zu gelangen.

  16. Klicken Sie auf Erstellen, um die Bereitstellung für Ihr Gerät durchzuführen.

Bereitstellen von Modulen auf Geräten unterer Ebenen

IoT Edge-Geräte auf niedrigeren Ebenen einer Gatewayhierarchie verfügen über ein erforderliches Modul, das zusätzlich zu Workloadmodulen, die Sie möglicherweise auf dem Gerät ausführen, für sie bereitgestellt werden muss.

Weiterleiten von Pullvorgängen für Containerimages

Bevor Sie Informationen zum erforderlichen Proxymodul für IoT Edge-Geräte in Gatewayhierarchien erhalten, ist es wichtig, zu verstehen, wie IoT Edge-Geräte auf unteren Ebenen ihre Modulimages abrufen.

Wenn Ihre Geräte auf unteren Ebenen keine Verbindung zur Cloud herstellen können, Sie jedoch möchten, dass sie wie gewohnt Modulimages pullen können, muss das Gerät der obersten Ebene der Gatewayhierarchie so konfiguriert werden, dass diese Anforderungen verarbeitet werden. Das Gerät der obersten Ebene muss ein Docker-Registrierungsmodul ausführen, das Ihrer Containerregistrierung zugeordnet ist. Konfigurieren Sie das API-Proxymodul dann so, dass Containeranforderungen dorthin weitergeleitet werden. Diese Details werden in den oberen Abschnitten dieses Artikels erläutert. In dieser Konfiguration sollten die Geräte der unteren Ebenen nicht auf Cloudcontainerregistrierungen verweisen, sondern auf Registrierungen, die auf der oberen Ebene ausgeführt werden.

Anstatt mcr.microsoft.com/azureiotedge-api-proxy:1.1 aufzurufen, sollten Geräte niedrigerer Ebenen beispielsweise $upstream:443/azureiotedge-api-proxy:1.1 aufrufen.

Der $upstream-Parameter verweist auf das übergeordnete Gerät eines Geräts auf einer niedrigeren Ebene. Die Anforderung wird also über alle Ebenen weitergeleitet, bis sie die oberste Ebene erreicht, die über eine Proxyumgebung verfügt, die Containeranforderungen an das Registrierungsmodul weiterleitet. Der :443-Port in diesem Beispiel sollte durch den Port ersetzt werden, an dem das API-Proxymodul des übergeordneten Geräts lauscht.

Das API-Proxymodul kann Weiterleitungen nur zu einem Registrierungsmodul durchführen, und die einzelnen Registrierungsmodule können nur einer Containerregistrierung zugeordnet werden. Deshalb müssen alle Images, die von Geräten auf niedrigeren Ebenen benötigt werden, in einer einzelnen Containerregistrierung gespeichert werden.

Wenn Sie nicht möchten, dass Geräte niedrigerer Ebenen Pull Requests für Module über eine Gatewayhierarchie durchführen können, besteht eine andere Option darin, eine lokale Registrierungslösung zu verwalten. Alternativ können Sie die Modulimages auf die Geräte pushen, bevor Sie Bereitstellungen erstellen. Anschließend legen Sie imagePullPolicy auf Nie fest.

Bootstrapping für den IoT Edge-Agent

Der IoT Edge-Agent ist die erste Runtimekomponente, die auf einem IoT Edge-Gerät gestartet wird. Sie müssen dafür sorgen, dass alle nachgeschalteten IoT Edge-Geräte beim Start auf das edgeAgent-Modulimage zugreifen können. Danach können sie auf Bereitstellungen zugreifen und die restlichen Modulimages starten.

Wenn Sie die Konfigurationsdatei auf einem IoT Edge-Gerät aufrufen, um dessen Authentifizierungsinformationen, Zertifikate und den übergeordneten Hostnamen anzugeben, aktualisieren Sie auch das edgeAgent-Containerimage.

Wenn das Gatewaygerät der obersten Ebene so konfiguriert ist, Containerimageanforderungen zu verarbeiten, ersetzen Sie mcr.microsoft.com durch den übergeordneten Hostname und den API-Proxyport, an dem gelauscht wird. Im Bereitstellungsmanifest können Sie $upstream als Verknüpfung verwenden. Dafür ist aber erforderlich, dass das edgeHub-Modul das Routing verarbeitet und dass das Modul zu diesem Zeitpunkt noch nicht gestartet wurde. Zum Beispiel:

[agent]
name = "edgeAgent"
type = "docker"

[agent.config]
image: "{Parent FQDN or IP}:443/azureiotedge-agent:1.4"

Wenn Sie eine lokale Containerregistrierung verwenden oder die Containerimages auf dem Gerät manuell bereitstellen, aktualisieren Sie die Konfigurationsdatei entsprechend.

Konfigurieren der Runtime und Bereitstellen des Proxymoduls

Das API-Proxymodul ist für das Weiterleiten der gesamten Kommunikation zwischen der Cloud und allen nachgeschalteten IoT Edge-Geräten erforderlich. Ein IoT Edge-Gerät auf der untersten Ebene der Hierarchie, das keine nachgeschalteten IoT Edge-Geräte aufweist, benötigt dieses Modul nicht.

Das API-Proxymodul wurde so entworfen, dass es angepasst werden kann, um die häufigsten Gatewayszenarios zu verarbeiten. In diesem Artikel werden die Schritte zum Einrichten der Module in einer einfachen Konfiguration kurz erläutert. Unter Konfigurieren des API-Proxymoduls für Ihr Gatewayhierarchieszenario finden Sie detailliertere Informationen und Beispiele.

  1. Navigieren Sie im Azure-Portal zu Ihrem IoT Hub.

  2. Wählen Sie Geräte im Menü Geräteverwaltung aus.

  3. Wählen Sie das IoT Edge-Gerät der unteren Ebene, das Sie konfigurieren, aus der Liste aus.

  4. Wählen Sie Module festlegen aus.

  5. Klicken Sie im Abschnitt IoT Edge-Modul auf Hinzufügen und dann auf Marketplace-Modul.

  6. Suchen Sie nach dem Modul IoT Edge-API-Proxy, und klicken Sie darauf.

  7. Wählen Sie den Namen des API-Proxymoduls aus der Liste bereitgestellter Module aus, und aktualisieren Sie die folgenden Moduleinstellungen:

    1. Aktualisieren Sie auf der Registerkarte Moduleinstellungen den Wert für Image-URI. Ersetzen Sie mcr.microsoft.com durch $upstream:443.

    2. Aktualisieren Sie auf der Registerkarte Umgebungsvariablen den Wert von NGINX_DEFAULT_PORT in 443.

    3. Aktualisieren Sie auf der Registerkarte mit Optionen zum Erstellen von Containern die Portbindungen in den Referenzport 443.

      {
        "HostConfig": {
          "PortBindings": {
            "443/tcp": [
              {
                "HostPort": "443"
              }
            ]
          }
        }
      }
      

    Diese Änderungen konfigurieren das API-Proxymodul so, dass es an Port 443 lauscht. Zur Vermeidung von Portbindungskollisionen müssen Sie das edgeHub-Modul so konfigurieren, dass es nicht an Port 443 lauscht. Stattdessen leitet das API-Proxymodul sämtlichen edgeHub-Datenverkehr für Port 443 weiter.

  8. Wählen Sie Runtimeeinstellungen aus.

  9. Aktualisieren Sie die edgeHub-Moduleinstellungen:

    1. Ersetzen Sie im Feld Imagemcr.microsoft.com durch $upstream:443.
    2. Löschen Sie im Feld mit Erstelloptionen die Portbindung für Port 443, übernehmen Sie jedoch die Bindungen für die Ports 5671 und 8883.
    {
      "HostConfig": {
        "PortBindings": {
          "5671/tcp": [
            {
              "HostPort": "5671"
            }
          ],
          "8883/tcp": [
            {
              "HostPort": "8883"
            }
          ]
        }
      }
    }
    
  10. Aktualisieren Sie die edgeAgent-Moduleinstellungen:

    1. Ersetzen Sie im Feld Imagemcr.microsoft.com durch $upstream:443.
  11. Klicken Sie auf Speichern zum Speichern der Änderungen an den Runtimeeinstellungen.

  12. Wählen Sie "Weiter": Routen aus, um zum nächsten Schritt zu wechseln.

  13. Wenn Gerät-zu-Cloud-Nachrichten von nachgeschalteten Geräten IoT Hub erreichen sollen, schließen Sie eine Route ein, die alle Nachrichten an $upstream übergibt. Der Upstreamparameter verweist im Fall von Geräten niedrigerer Ebenen auf das übergeordnete Gerät. Zum Beispiel:

    1. Name: Route
    2. Wert: FROM /messages/* INTO $upstream
  14. Klicken Sie auf Überprüfen + erstellen, um zum letzten Schritt zu gelangen.

  15. Klicken Sie auf Erstellen, um die Bereitstellung für Ihr Gerät durchzuführen.

Überprüfen der Konnektivität zwischen dem untergeordneten und dem übergeordneten Gerät

  1. Überprüfen Sie die TLS/SSL-Verbindung zwischen dem untergeordneten und dem übergeordneten Gerät, indem Sie auf dem nachgeschalteten Gerät den folgenden openssl-Befehl ausführen. Ersetzen Sie <parent hostname> durch den FQDN oder die IP-Adresse des übergeordneten Geräts.

    openssl s_client -connect <parent hostname>:8883 </dev/null 2>&1 >/dev/null
    

    Der Befehl sollte eine erfolgreiche Validierung der übergeordneten Zertifikatkette ähnlich dem folgenden Beispiel bestätigen:

    azureUser@child-vm:~$ openssl s_client -connect <parent hostname>:8883 </dev/null 2>&1 >/dev/null
    Can't use SSL_get_servername
    depth=3 CN = Azure_IoT_Hub_CA_Cert_Test_Only
    verify return:1
    depth=2 CN = Azure_IoT_Hub_Intermediate_Cert_Test_Only
    verify return:1
    depth=1 CN = gateway.ca
    verify return:1
    depth=0 CN = <parent hostname>
    verify return:1
    DONE
    

    Die Meldung „Kann SSL_get_servername nicht verwenden“ kann ignoriert werden.

    Der depth=0 CN = -Wert sollte mit dem hostname-Parameter übereinstimmen, der in der übergeordneten config.toml-Konfigurationsdatei angegeben ist.

    Wenn für den Befehl eine Zeitüberschreitung auftritt, sind zwischen den untergeordneten und übergeordneten Geräten möglicherweise blockierte Ports vorhanden. Überprüfen Sie die Netzwerkkonfiguration und die Einstellungen für die Geräte.

    Warnung

    Wenn Sie im Abschnitt [edge_ca] des Gateways kein vollständig verkettetes Zertifikat verwenden, treten Zertifikatvalidierungsfehler vom untergeordneten Gerät auf. Der oben genannte Befehl openssl s_client ... erzeugt beispielsweise Folgendes:

    Can't use SSL_get_servername
    depth=1 CN = gateway.ca
    verify error:num=20:unable to get local issuer certificate
    verify return:1
    depth=0 CN = <parent hostname>
    verify return:1
    DONE
    

    Das gleiche Problem tritt bei TLS-fähigen Geräten auf, die eine Verbindung mit dem untergeordneten IoT Edge-Gerät herstellen, wenn das vollständig verkettete Gerätezertifikat nicht auf dem untergeordneten Gerät verwendet und konfiguriert wird.

Integrieren von Microsoft Defender für IoT in das IoT Edge-Gateway

Nachgeschaltete Geräte können verwendet werden, um den Micro-Agent von Microsoft Defender for IoT mithilfe der Proxyfunktion für nachgeschaltete Geräte in das IoT Edge-Gateway zu integrieren.

Weitere Informationen finden Sie unter Micro-Agent für Defender für IoT.

So integrieren Sie Microsoft Defender for IoT mithilfe der Proxyfunktion für nachgeschaltete Geräte in IoT Edge:

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu IoT Hub>Your Hub>Geräteverwaltung>Geräte.

  3. Wählen Sie Ihr Gerät aus.

    Screenshot: Position des Geräts für die Auswahl.

  4. Wählen Sie den Modulzwilling DefenderIotMicroAgent aus, den Sie gemäß dieser Anleitung erstellt haben.

    Screenshot: Position des DefenderIotMicroAgent.

  5. Wählen Sie die Schaltfläche aus, um Ihre Verbindungszeichenfolge (Primärschlüssel) zu kopieren.

  6. Fügen Sie die Verbindungszeichenfolge in eine Textbearbeitungsanwendung ein, und fügen Sie der Zeichenfolge den Gatewayhostnamen hinzu. Beispiel: HostName=nested11.azure-devices.net;DeviceId=downstream1;ModuleId=module1;SharedAccessKey=xxx;GatewayHostName=10.16.7.4.

  7. Öffnen Sie auf dem nachgeschalteten Gerät ein Terminal.

  8. Verwenden Sie den folgenden Befehl, um die UTF-8-codierte Verbindungszeichenfolge im Verzeichnis des Defender für Cloud-Agents in der Datei connection_string.txt am folgenden Pfad /etc/defender_iot_micro_agent/connection_string.txt zu platzieren:

    sudo bash -c 'echo "<connection string>" > /etc/defender_iot_micro_agent/connection_string.txt'
    

    Die Datei connection_string.txt sollte sich nun am folgenden Pfad befinden: /etc/defender_iot_micro_agent/connection_string.txt.

  9. Starten Sie den Dienst mithilfe des folgenden Befehls neu:

    sudo systemctl restart defender-iot-micro-agent.service 
    
  10. Navigieren Sie wieder zum Gerät.

    Screenshot: Navigation zurück zum Gerät.

  11. Aktivieren Sie die Verbindung mit IoT Hub, und wählen Sie das Zahnradsymbol aus.

    Screenshot: Auswahl zum Festlegen eines übergeordneten Geräts.

  12. Wählen Sie in der angezeigten Liste das übergeordnete Gerät aus.

  13. Stellen Sie sicher, dass der Port 8883 (MQTT) zwischen dem nachgeschalteten Gerät und dem IoT Edge-Gerät geöffnet ist.

Nächste Schritte

Verwendung eines IoT Edge-Geräts als Gateway

Konfigurieren des API-Proxymoduls für Ihr Gatewayhierarchieszenario (Vorschau)