Share via


Guida introduttiva: Distribuire un registro connesso in un dispositivo IoT Edge

In questa guida introduttiva si userà l'interfaccia della riga di comando di Azure per distribuire un registro connesso come modulo in un dispositivo azure IoT Edge. Il dispositivo IoT Edge può accedere al Registro Azure Container padre nel cloud.

Per una panoramica dell'uso di un registro connesso con IoT Edge, vedere Uso del Registro di sistema connesso con Azure IoT Edge. Questo scenario corrisponde a un dispositivo al livello superiore di una gerarchia di IoT Edge.

Prerequisiti

Importare immagini nel registro cloud

Importare le immagini del contenitore seguenti nel registro cloud usando il comando az acr import . Ignorare questo passaggio se queste immagini sono già state importate.

Immagine del Registro di sistema connessa

Per supportare scenari di IoT Edge annidati, l'immagine del contenitore per il runtime del Registro di sistema connesso deve essere disponibile nel Registro Azure Container privato. Usare il comando az acr import per importare l'immagine del Registro di sistema connessa nel registro privato.

# Use the REGISTRY_NAME variable in the following Azure CLI commands to identify the registry
REGISTRY_NAME=<container-registry-name>

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/acr/connected-registry:0.8.0

IoT Edge e immagini proxy API

Per supportare il Registro di sistema connesso in IoT Edge annidati, è necessario distribuire moduli per il proxy API e il IoT Edge. Importare queste immagini nel registro privato.

Il modulo proxy API IoT Edge consente a un dispositivo IoT Edge di esporre più servizi usando il protocollo HTTPS sulla stessa porta, ad esempio 443.

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/azureiotedge-agent:1.2.4

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/azureiotedge-hub:1.2.4

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/azureiotedge-api-proxy:1.1.2

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/azureiotedge-diagnostics:1.2.4

Immagine Hello-world

Per testare il Registro di sistema connesso, importare l'immagine hello-world . Questo repository verrà sincronizzato con il Registro di sistema connesso ed eseguito il pull dai client del Registro di sistema connessi.

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/hello-world:1.1.2

Recuperare la configurazione del Registro di sistema connesso

Prima di distribuire il Registro di sistema connesso al dispositivo IoT Edge, è necessario recuperare le impostazioni di configurazione dalla risorsa del Registro di sistema connesso in Azure.

Usare il comando az acr connected-registry get-settings per ottenere le informazioni sulle impostazioni necessarie per installare un registro connesso. Nell'esempio seguente viene specificato HTTPS come protocollo padre. Questo protocollo è necessario quando il registro padre è un registro cloud.

az acr connected-registry get-settings \
  --registry $REGISTRY_NAME \
  --name $CONNECTED_REGISTRY_RW \
  --parent-protocol https

Per impostazione predefinita, le informazioni sulle impostazioni non includono la password del token di sincronizzazione , necessaria anche per distribuire il Registro di sistema connesso. Facoltativamente, generare una delle password passando il --generate-password 1 parametro o generate-password 2 . Salvare la password generata in un percorso sicuro. Non può essere recuperato di nuovo.

Avviso

La rigenerazione di una password ruota le credenziali del token di sincronizzazione. Se è stato configurato un dispositivo usando la password precedente, è necessario aggiornare la configurazione.

L'output dei comandi include la stringa di connessione del Registro di sistema e le impostazioni correlate. L'output di esempio seguente mostra la stringa di connessione per il Registro di sistema connesso denominato myconnectedregistry con il registro padre contosoregistry:

{
  "ACR_REGISTRY_CONNECTION_STRING": "ConnectedRegistryName=myconnectedregistry;SyncTokenName=myconnectedregistry-sync-token;SyncTokenPassword=xxxxxxxxxxxxxxxx;ParentGatewayEndpoint=contosoregistry.eastus.data.azurecr.io;ParentEndpointProtocol=https"
}

Configurare un manifesto della distribuzione per IoT Edge

Un manifesto della distribuzione è un documento JSON che descrive i moduli da distribuire nel dispositivo IoT Edge. Per altre informazioni, vedere Informazioni su come usare, configurare e riutilizzare i moduli IoT Edge.

Per distribuire il Registro di sistema connesso e i moduli proxy API usando l'interfaccia della riga di comando di Azure, salvare il manifesto della distribuzione seguente in locale come manifest.json file. Il percorso del file verrà usato nella sezione successiva quando si eseguirà il comando per applicare la configurazione al dispositivo.

Impostazioni del modulo del Registro di sistema connesso

  • Usare le credenziali del token e la stringa di connessione delle sezioni precedenti per aggiornare i valori JSON pertinenti nel env nodo.

  • Nel nodo sono facoltative env le variabili di ambiente seguenti:

    Variabile Descrizione
    ACR_REGISTRY_LOGIN_SERVER Specifica un nome host univoco o un nome di dominio completo. Se usato, il Registro di sistema connesso accetta solo le richieste effettuate a questo valore del server di accesso.

    Se non viene specificato alcun valore, è possibile accedere al Registro di sistema connesso con qualsiasi valore del server di accesso.
    ACR_REGISTRY_CERTIFICATE_VOLUME Se il registro connesso sarà accessibile tramite HTTPS, punta al volume in cui sono archiviati i certificati HTTPS.

    Se non è impostato, il percorso predefinito è /var/acr/certs.
    ACR_REGISTRY_DATA_VOLUME Sovrascrive il percorso /var/acr/data predefinito in cui le immagini verranno archiviate dal Registro di sistema connesso.

    Questo percorso deve corrispondere all'associazione di volumi per il contenitore.

    Importante

    Se il Registro di sistema connesso è in ascolto su una porta diversa da 80 e 443, il ACR_REGISTRY_LOGIN_SERVER valore (se specificato) deve includere la porta. Esempio: 192.168.0.100:8080.

  • È necessario impostare un'associazione HostPort per il Registro di sistema connesso se il modulo proxy API non viene usato. Esempio:

     "createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"],\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"8080\"}]}}}"
    

Impostazioni del modulo proxy API

  • Il proxy API sarà in ascolto sulla porta 8000 configurata come NGINX_DEFAULT_PORT. Per altre informazioni sulle impostazioni del proxy API, vedere il repository GitHub IoT Edge.
{
    "modulesContent": {
        "$edgeAgent": {
            "properties.desired": {
                "modules": {
                    "connected-registry": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/acr/connected-registry:0.8.0",
                            "createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"]}}"
                        },
                        "type": "docker",
                        "env": {
                            "ACR_REGISTRY_CONNECTION_STRING": {
                                "value": "ConnectedRegistryName=<REPLACE_WITH_CONNECTED_REGISTRY_NAME>;SyncTokenName=<REPLACE_WITH_SYNC_TOKEN_NAME>;SyncTokenPassword=REPLACE_WITH_SYNC_TOKEN_PASSWORD;ParentGatewayEndpoint=<REPLACE_WITH_CLOUD_REGISTRY_NAME>.<REPLACE_WITH_CLOUD_REGISTRY_REGION>.data.azurecr.io;ParentEndpointProtocol=https"
                            }
                        },
                        "status": "running",
                        "restartPolicy": "always",
                        "version": "1.0"
                    },
                    "IoTEdgeAPIProxy": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-api-proxy:1.1.2",
                            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8000/tcp\":[{\"HostPort\":\"8000\"}]}}}"
                        },
                        "type": "docker",
                        "env": {
                            "NGINX_DEFAULT_PORT": {
                                "value": "8000"
                            },
                            "CONNECTED_ACR_ROUTE_ADDRESS": {
                                "value": "connected-registry:8080"
                            },
                            "BLOB_UPLOAD_ROUTE_ADDRESS": {
                                "value": "AzureBlobStorageonIoTEdge:11002"
                            }
                        },
                        "status": "running",
                        "restartPolicy": "always",
                        "version": "1.0"
                    }
                },
                "runtime": {
                    "settings": {
                        "minDockerVersion": "v1.25",
                        "registryCredentials": {
                            "cloudregistry": {
                                "address": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io",
                                "password": "<REPLACE_WITH_SYNC_TOKEN_PASSWORD>",
                                "username": "<REPLACE_WITH_SYNC_TOKEN_NAME>"
                            }
                        }
                    },
                    "type": "docker"
                },
                "schemaVersion": "1.1",
                "systemModules": {
                    "edgeAgent": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-agent:1.2.4",
                            "createOptions": ""
                        },
                        "type": "docker",
                        "env": {
                            "SendRuntimeQualityTelemetry": {
                                "value": "false"
                            }
                        }
                    },
                    "edgeHub": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-hub:1.2.4",
                            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
                        },
                        "type": "docker",
                        "status": "running",
                        "restartPolicy": "always"
                    }
                }
            }
        },
        "$edgeHub": {
            "properties.desired": {
                "routes": {
                    "route": "FROM /messages/* INTO $upstream"
                },
                "schemaVersion": "1.1",
                "storeAndForwardConfiguration": {
                    "timeToLiveSecs": 7200
                }
            }
        }
    }
}

Distribuire i moduli proxy api e registro connessi in IoT Edge

Usare il comando seguente per distribuire i moduli proxy del Registro di sistema e dell'API connessi nel dispositivo IoT Edge usando il manifesto della distribuzione creato nella sezione precedente. Specificare l'ID del dispositivo IoT Edge livello superiore e il nome del hub IoT dove indicato.

# Set the IOT_EDGE_TOP_LAYER_DEVICE_ID and IOT_HUB_NAME environment variables for use in the following Azure CLI command
IOT_EDGE_TOP_LAYER_DEVICE_ID=<device-id>
IOT_HUB_NAME=<hub-name>

az iot edge set-modules \
  --device-id $IOT_EDGE_TOP_LAYER_DEVICE_ID \
  --hub-name $IOT_HUB_NAME \
  --content manifest.json

Per informazioni dettagliate, vedere Distribuire moduli di Azure IoT Edge con l'interfaccia della riga di comando di Azure.

Per controllare lo stato del Registro di sistema connesso, usare il comando az acr connected-registry show seguente. Il nome del Registro di sistema connesso è il valore di $CONNECTED_REGISTRY_RW.

az acr connected-registry show \
  --registry $REGISTRY_NAME \
  --name $CONNECTED_REGISTRY_RW \
  --output table

Al termine della distribuzione, il Registro di sistema connesso mostra lo stato .Online

Passaggi successivi

In questa guida introduttiva si è appreso come distribuire un registro connesso in un dispositivo IoT Edge. Continuare con le guide successive per informazioni su come eseguire il pull delle immagini dal registro connesso appena distribuito o per distribuire il Registro di sistema connesso nei dispositivi annidati IoT Edge.