Preparare la distribuzione della soluzione IoT Edge alla produzione
Si applica a: IoT Edge 1.1
Importante
La data di fine del supporto di IoT Edge 1.1 è stata il 13 dicembre 2022. Controlla il ciclo di vita dei prodotti Microsoft per ottenere informazioni sul modo in cui viene supportato questo prodotto, servizio, tecnologia o API. Per altre informazioni sull'aggiornamento alla versione più recente di IoT Edge, vedere Aggiornare IoT Edge.
Una volta pronti a portare la soluzione IoT Edge dallo sviluppo alla produzione, assicurarsi che sia configurata per prestazioni costanti.
Le informazioni fornite in questo articolo non sono tutte uguali. Per assicurarsi di definire le priorità, ogni sezione inizia con elenchi che dividono il lavoro in due sezioni: importante da completare prima di passare all'ambiente di produzione, o utile da sapere.
Configurazione dispositivo
I dispositivi IoT Edge possono essere qualsiasi cosa, da un dispositivo Raspberry Pi a un computer portatile, a una macchina virtuale in esecuzione in un server. È possibile accedere al dispositivo fisicamente o tramite una connessione virtuale, oppure può essere isolato per lunghi periodi di tempo. In entrambi i casi, è bene assicurarsi che sia configurato per funzionare in modo appropriato.
Importante
- Installare i certificati di produzione
- Disporre di un piano di gestione dei dispositivi
- Usare Moby come motore del contenitore
Utile
- Scegliere il protocollo di upstream
Installare i certificati di produzione
Ogni dispositivo IoT Edge nell'ambiente di produzione richiede un certificato di autorità di certificazione (CA) del dispositivo installato. Il certificato della CA viene quindi dichiarato al runtime di IoT Edge nel file di configurazione. Per gli scenari di sviluppo e test, il runtime di IoT Edge crea certificati temporanei se non vengono dichiarati certificati nel file di configurazione. Tuttavia, questi certificati temporanei scadono dopo tre mesi e non sono sicuri per gli scenari di produzione. Per gli scenari di produzione, è necessario fornire il proprio certificato della CA del dispositivo, da un'autorità di certificazione autofirmato o acquistato da un'autorità di certificazione commerciale.
Nota
Attualmente, una limitazione in Libiothsm impedisce l'uso di certificati con scadenza uguale o successiva al 1° gennaio 2038.
Per comprendere il ruolo del certificato della CA del dispositivo, vedere Come Azure IoT Edge usa i certificati.
Per altre informazioni su come installare i certificati in un dispositivo IoT Edge e farvi riferimento dal file di configurazione, vedere Gestire il certificato in un dispositivo IoT Edge.
Disporre di un piano di gestione dei dispositivi
Prima di rendere disponibili tutti i dispositivi nell'ambiente di produzione è necessario sapere come si intende gestire gli aggiornamenti futuri. Per un dispositivo IoT Edge, l'elenco dei componenti da aggiornare può includere:
- Il firmware del dispositivo
- Le librerie del sistema operativo
- Motore del contenitore, ad esempio Moby
- IoT Edge
- Certificati CA
Aggiornamento dei dispositivi per hub IoT (anteprima) è un servizio che consente di distribuire gli aggiornamenti over-the-air per i dispositivi IoT Edge.
I metodi alternativi per l'aggiornamento di IoT Edge richiedono l'accesso fisico o SSH al dispositivo IoT Edge. Per altre informazioni, vedere Aggiornare il runtime di IoT Edge. Per aggiornare più dispositivi, è consigliabile aggiungere i passaggi di aggiornamento a uno script o usare uno strumento di automazione come Ansible.
Usare Moby come motore del contenitore
Disporre di un motore del contenitore è un prerequisito per qualsiasi dispositivo IoT Edge. Solo il motore moby è supportato nell'ambiente di produzione. Gli altri motori del contenitore, come Docker, funzionano con IoT Edge ed è comunque possibile usare questi motori per lo sviluppo. Il motore moby può essere ridistribuito quando usato con Azure IoT Edge e Microsoft fornisce assistenza per questo motore.
Scegliere il protocollo di upstream
È possibile configurare il protocollo (che determina la porta usata) per la comunicazione upstream con hub IoT sia per l'agente IoT Edge che per l'hub IoT Edge. Il protocollo predefinito è AMQP, ma è possibile modificarlo a seconda della configurazione di rete.
I due moduli runtime hanno una variabile di ambiente UpstreamProtocol. I valori validi per la variabile sono:
- MQTT
- AMQP
- MQTTWS
- AMQPWS
Configurare la variabile UpstreamProtocol per l'agente IoT Edge nel file di configurazione nel dispositivo stesso. Ad esempio, se il dispositivo IoT Edge si trova dietro un server proxy che blocca le porte AMQP, potrebbe essere necessario configurare l'agente di IoT Edge per usare AMQP su WebSocket (AMQPWS) per stabilire la connessione iniziale all'hub IoT.
Una volta che il dispositivo IoT Edge si connette, assicurarsi di continuare a configurare la variabile UpstreamProtocol per entrambi i moduli runtime nelle distribuzioni future. È possibile trovare un esempio di questo processo in Configurare un dispositivo IoT Edge per comunicare tramite un server proxy.
Distribuzione
- Utile
- Essere coerenti con il protocollo upstream
- Configurare l'archiviazione host per i moduli di sistema
- Ridurre lo spazio di memoria usato dall'hub IoT Edge
- Usare le immagini del modulo corrette nei manifesti di distribuzione
- Tenere presente i limiti relativi alle dimensioni dei dispositivi gemelli quando si usano moduli personalizzati
- Configurare la modalità di applicazione degli aggiornamenti ai moduli
Essere coerenti con il protocollo upstream
Se l'agente di IoT Edge nel dispositivo IoT Edge è stato configurato per usare un protocollo diverso rispetto al valore AMQP predefinito, è necessario dichiarare lo stesso protocollo in tutte le distribuzioni future. Ad esempio, se il dispositivo IoT Edge si trova dietro un server proxy che blocca le porte AMQP,è probabile che il dispositivo sia stato configurato per connettersi tramite AMQP su WebSocket (AMQPWS). Quando si distribuiscono i moduli nel dispositivo, configurare lo stesso protocollo APQPWS per l'agente di IoT Edge e l'hub di IoT Edge. In caso contrario, il valore predefinito AMQP sovrascriverà le impostazioni e impedirà di connettersi nuovamente.
È necessario configurare solo la variabile di ambiente UpstreamProtocol per i moduli dell'agente di IoT Edge e dell'hub di IoT Edge. Tutti i moduli aggiuntivi adottano qualsiasi protocollo impostato nei moduli del runtime.
È possibile trovare un esempio di questo processo in Configurare un dispositivo IoT Edge per comunicare tramite un server proxy.
Configurare l'archiviazione host per i moduli di sistema
I moduli dell'hub e dell'agente di IoT Edge usano l'archiviazione locale per mantenere lo stato e abilitare la messaggistica tra moduli, dispositivi e cloud. Per migliorare l'affidabilità e le prestazioni, configurare i moduli di sistema per usare l'archiviazione nel file system host.
Per altre informazioni, vedere Archiviazione host per i moduli di sistema.
Ridurre lo spazio di memoria usato dall'hub di Iot Edge
Se si distribuiscono dispositivi vincolati con memoria limitata, è possibile configurare l'hub di IoT Edge in modo che venga eseguito in una capacità più semplificata e che usi meno spazio su disco. Tuttavia, queste configurazioni limitano le prestazioni dell'hub di IoT Edge, quindi occorre trovare il giusto equilibrio adatto per la soluzione specifica.
Non ottimizzare le prestazioni su dispositivi vincolati
L'hub IoT Edge è ottimizzato per le prestazioni per impostazione predefinita, quindi tenta di allocare blocchi di memoria di grandi dimensioni. Questa configurazione può causare problemi di stabilità in dispositivi più piccoli come Raspberry Pi. Se si distribuiscono dispositivi con risorse limitate, è possibile impostare la variabile di ambiente OptimizeForPerformance su false nell'hub IoT Edge.
Quando OptimizeForPerformance è impostato su true, l'head del protocollo MQTT usa PooledByteBufferAllocator, con prestazioni migliori, ma alloca più memoria. L'allocatore non funziona bene nei sistemi operativi a 32 bit o nei dispositivi con memoria insufficiente. Inoltre, quando ottimizzato per le prestazioni, RocksDb alloca più memoria per il suo ruolo come provider di archiviazione locale.
Per altre informazioni, vedere Problemi di stabilità nei dispositivi più piccoli.
Disabilitare i protocolli non usati
Un altro modo per ottimizzare le prestazioni dell'hub IoT Edge e ridurre l'utilizzo della memoria consiste nel disattivare i test di protocollo per tutti i protocolli che non si usano nella soluzione.
I teste del protocollo vengono configurati impostando variabili di ambiente booleane per il modulo hub IoT Edge nei manifesti della distribuzione. Le tre variabili sono:
- amqpSettings__enabled
- mqttSettings__enabled
- httpSettings__enabled
Tutte le tre variabili hanno due caratteri di sottolineatura e possono essere impostate su true o false.
Ridurre il tempo di archiviazione per i messaggi
Il modulo hub IoT Edge archivia temporaneamente i messaggi se non possono essere recapitati a hub IoT per qualsiasi motivo. È possibile configurare per quanto tempo l'hub IoT Edge mantiene i messaggi non recapitati prima di lasciarli scadere. In caso di problemi di memoria nel dispositivo, è possibile ridurre il valore timeToLiveSecs nel modulo gemello dell'hub IoT Edge.
Il valore predefinito del parametro timeToLiveSecs è 7200 secondi, che equivale a due ore.
Usare le immagini del modulo corrette nei manifesti di distribuzione
Se viene usata un'immagine di modulo vuota o errata, l'agente Edge ritenta il caricamento dell'immagine, causando la generazione di traffico aggiuntivo. Aggiungere le immagini corrette al manifesto della distribuzione per evitare di generare traffico non necessario.
Non usare le versioni di debug delle immagini del modulo
Quando si passa da scenari di test a scenari di produzione, ricordarsi di rimuovere le configurazioni di debug dai manifesti di distribuzione. Verificare che nessuna delle immagini del modulo nei manifesti della distribuzione abbia il suffisso .debug . Se sono state aggiunte opzioni di creazione per esporre le porte nei moduli per il debug, rimuovere anche queste opzioni di creazione.
Tenere presente i limiti relativi alle dimensioni dei dispositivi gemelli quando si usano moduli personalizzati
Il manifesto della distribuzione che contiene moduli personalizzati fa parte del gemello EdgeAgent. Esaminare la limitazione delle dimensioni del modulo gemello.
Se si distribuisce un numero elevato di moduli, è possibile esaurire questo limite di dimensioni dei dispositivi gemelli. Considerare alcune mitigazioni comuni per questo limite rigido:
- Archiviare qualsiasi configurazione nel modulo gemello personalizzato, che ha un limite specifico.
- Archiviare alcune configurazioni che puntano a una posizione non limitata a spazi, ovvero a un archivio BLOB.
Gestione contenitori
- Importante
- Usare tag per gestire le versioni
- Gestire i volumi
- Utile
- Archiviare i contenitori di runtime nel registro privato
- Configurare l'operazione di Garbage Collection delle immagini
Usare tag per gestire le versioni
Un tag è un concetto di docker che è possibile usare per distinguere tra le versioni dei contenitori docker. I tag sono suffissi come 1.1 che vanno alla fine di un repository di contenitori. Ad esempio, mcr.microsoft.com/azureiotedge-agent:1.1. I tag sono modificabili e possono essere modificati in modo da puntare a un altro contenitore in qualsiasi momento, in modo che il team debba concordare una convenzione da seguire quando si aggiornano le immagini del modulo.
I tag consentono inoltre di applicare gli aggiornamenti sui dispositivi IoT Edge. Quando si esegue il push di una versione aggiornata di un modulo nel registro contenitori, incrementare il tag. Eseguire quindi il push di una nuova distribuzione per i dispositivi con il tag incrementato. Il motore contenitore riconoscerà il tag incrementato come una nuova versione ed eseguirà il pull della versione più recente del modulo nel dispositivo.
Tag per il runtime IoT Edge
Le immagini dell'agente IoT Edge e dell'hub di IoT Edge vengono contrassegnate con la versione di IoT Edge a cui sono associate. Esistono due diversi modi per usare i tag con le immagini di runtime:
Tag di versioni. Vengono usati solo i primi due valori del numero di versione per ottenere l'immagine più recente corrispondente a tali cifre. Ad esempio, il tag 1.1 viene aggiornato ogni volta che è disponibile una nuova versione in modo da puntare alla versione 1.1.x più recente. Se il runtime del contenitore nel dispositivo IoT Edge esegue nuovamente il pull dell'immagine, i moduli del runtime vengono aggiornati alla versione più recente. Nelle distribuzioni dal portale di Azure vengono usati i tag di versioni per impostazione predefinita. Questo approccio è consigliato a scopo di sviluppo.
Tag specifici. Vengono usati tutti e tre i valori del numero di versione per impostare in modo esplicito la versione dell'immagine. Ad esempio, il tag 1.1.0 non verrà modificato dopo il rilascio iniziale. Quando si è pronti per l'aggiornamento, è possibile dichiarare un nuovo numero di versione nel manifesto della distribuzione. Questo approccio è consigliato a scopo di produzione.
Gestire i volumi
IoT Edge non rimuove i volumi collegati ai contenitori del modulo. Questo comportamento è previsto da progettazione, perché consente di rendere persistenti i dati tra istanze del contenitore, ad esempio gli scenari di aggiornamento. Tuttavia, se questi volumi vengono lasciati inutilizzati, ciò può causare l'esaurimento dello spazio su disco e conseguenti errori di sistema. Se si usano volumi Docker nello scenario, è consigliabile usare gli strumenti Docker, come docker volume prune e docker volume rm per rimuovere i volumi inutilizzati, in particolare per gli scenari di produzione.
Archiviare i contenitori di runtime nel registro privato
Si sa come archiviare le immagini del contenitore per i moduli di codice personalizzati nel registro di Azure privato, ma è anche possibile usarlo per archiviare immagini di contenitori pubbliche, ad esempio i moduli di runtime edgeAgent e edgeHub . Questa operazione può essere necessaria se sono presenti restrizioni del firewall molto restrittive perché questi contenitori di runtime vengono archiviati nel Registro Contenitori Microsoft (MCR).
I passaggi seguenti illustrano come eseguire il pull di un'immagine Docker di edgeAgent e edgeHub nel computer locale, eseguirne il retaging, eseguirne il push nel registro privato, quindi aggiornare il file di configurazione in modo che i dispositivi sappiano eseguire il pull dell'immagine dal registro privato.
Eseguire il pull dell'immagine Docker edgeAgent dal Registro di sistema Microsoft. Aggiornare il numero di versione, se necessario.
# Pull edgeAgent image docker pull mcr.microsoft.com/azureiotedge-agent:1.1 # Pull edgeHub image docker pull mcr.microsoft.com/azureiotedge-hub:1.1
Elencare tutte le immagini Docker, trovare le immagini edgeAgent e edgeHub , quindi copiare gli ID immagine.
docker images
Modificare il tag delle immagini edgeAgent e edgeHub . Sostituire i valori tra parentesi quadre con i valori personalizzati.
# Retag your edgeAgent image docker tag <my-image-id> <registry-name/server>/azureiotedge-agent:1.1 # Retag your edgeHub image docker tag <my-image-id> <registry-name/server>/azureiotedge-hub:1.1
Eseguire il push delle immagini edgeAgent e edgeHub nel registro privato. Sostituire il valore tra parentesi quadre con il proprio.
# Push your edgeAgent image to your private registry docker push <registry-name/server>/azureiotedge-agent:1.1 # Push your edgeHub image to your private registry docker push <registry-name/server>/azureiotedge-hub:1.1
Aggiornare i riferimenti alle immagini nel file deployment.template.json per i moduli di sistema edgeAgent e edgeHub , sostituendo
mcr.microsoft.com
con il proprio "nome-registro/server" per entrambi i moduli.Aprire un editor di testo nel dispositivo IoT Edge per modificare il file di configurazione in modo da conoscere l'immagine del Registro di sistema privato.
sudo nano /etc/aziot/config.toml
Nell'editor di testo modificare i valori dell'immagine in
[agent.config]
. Sostituire i valori tra parentesi quadre con i valori personalizzati.[agent.config] image = "<registry-name/server>/azureiotedge-agent:1.1"
Se il registro privato richiede l'autenticazione, impostare i parametri di autenticazione in
[agent.config.auth]
.[agent.config.auth] serveraddress = "<login-server>" # Almost always equivalent to <registry-name/server> username = "<username>" password = "<password>"
Salvare le modifiche e uscire dall'editor di testo.
Applicare la modifica della configurazione di IoT Edge.
sudo iotedge config apply
Il runtime di IoT Edge viene riavviato.
Per altre informazioni, vedi:
Rete
- Utile
- Verificare la configurazione in uscita e in entrata
- Consentire le connessioni da dispositivi IoT Edge
- Configurare la comunicazione tramite un proxy
Verificare la configurazione in uscita e in entrata
I canali di comunicazione tra Azure IoT Edge e hub IoT di Azure sono sempre configurati per essere in uscita. Per la maggior parte degli scenari di IoT Edge, sono necessarie solo tre connessioni. Il motore del contenitore deve connettersi con il registro contenitori (o i registri) che contiene le immagini del modulo. Il runtime IoT Edge deve connettersi all'hub IoT per recuperare le informazioni di configurazione del dispositivo e per inviare i messaggi e i dati di telemetria. Se si usa il provisioning automatico, IoT Edge deve connettersi al servizio Device Provisioning. Per altre informazioni, vedere Regole di configurazione del firewall e delle porte.
Consentire le connessioni da dispositivi IoT Edge
Se la configurazione di rete richiede di consentire in modo esplicito le connessioni effettuate dai dispositivi IoT Edge, esaminare il seguente elenco di componenti IoT Edge:
- Agente IoT Edge apre una connessione MQTT/AMQP permanente all'hub IoT, possibilmente tramite WebSockets.
- Hub di IoT Edge apre una singola connessione AMQP permanente o più connessioni MQTT all'hub IoT, probabilmente tramite WebSockets.
- Il servizio IoT Edge effettua chiamate HTTPS intermittenti a hub IoT.
In tutti e tre i casi, il nome di dominio completo (FQDN) corrisponde al modello \*.azure-devices.net
.
Inoltre, il motore del contenitore effettua chiamate ai registri contenitori tramite HTTPS. Per recuperare le immagini del contenitore di runtime di IoT Edge, il nome di dominio completo è mcr.microsoft.com
. Il motore del contenitore si connette ad altri registri in base alla configurazione della distribuzione.
Questo elenco di controllo è un punto di partenza per le regole del firewall:
FQDN (* = carattere jolly) |
Porte TCP in uscita | Utilizzo |
---|---|---|
mcr.microsoft.com |
443 | Registro Container Microsoft |
*.data.mcr.microsoft.com |
443 | Endpoint dati che fornisce la distribuzione di contenuti |
*.cdn.azcr.io |
443 | Distribuire moduli dal Marketplace ai dispositivi |
global.azure-devices-provisioning.net |
443 | Accesso al servizio Device Provisioning (facoltativo) |
*.azurecr.io |
443 | Registri contenitori personali e di terze parti |
*.blob.core.windows.net |
443 | Scaricare Registro Azure Container delta dell'immagine dall'archivio BLOB |
*.azure-devices.net |
5671, 8883, 4431 | Accesso hub IoT |
*.docker.io |
443 | Accesso all'hub Docker (facoltativo) |
1Aprire la porta 8883 per la porta MQTT sicura o la porta 5671 per AMQP sicuro. Se è possibile effettuare connessioni solo tramite la porta 443, è possibile eseguire uno di questi protocolli tramite un tunnel WebSocket.
Poiché l'indirizzo IP di un hub IoT può cambiare senza preavviso, usare sempre il nome di dominio completo per consentire la configurazione dell'elenco. Per altre informazioni, vedere Informazioni sull'indirizzo IP del hub IoT.
Alcune di queste regole del firewall vengono ereditate da Registro Azure Container. Per altre informazioni, vedere Configurare le regole per accedere a un registro contenitori di Azure dietro un firewall.
È possibile abilitare gli endpoint dati dedicati nel Registro Azure Container per evitare l'elenco di caratteri jolly dell'FQDN *.blob.core.windows.net . Per altre informazioni, vedere Abilitare endpoint dati dedicati.
Nota
Per fornire un FQDN coerente tra gli endpoint REST e i dati, a partire dal 15 giugno 2020 l'endpoint dati del Registro Azure Container passerà da *.cdn.mscr.io
a *.data.mcr.microsoft.com
Per altre informazioni, vedere Configurazione delle regole del firewall del client del Registro Azure Container
Se non si vuole configurare il firewall per consentire l'accesso ai registri contenitori pubblici, è possibile archiviare le immagini nel registro contenitori privato, come descritto in Archiviare i contenitori di runtime nel registro privato.
Configurare la comunicazione tramite un proxy
Se i dispositivi vengono distribuiti su una rete che utilizza un server proxy, devono essere in grado di comunicare attraverso il proxy per raggiungere l'hub IoT e i registri contenitori. Per altre informazioni, vedere Configurare un dispositivo IoT Edge per comunicare tramite un server proxy.
Gestione soluzioni
- Utile
- Impostare i log e la diagnostica
- Configurare il driver di registrazione predefinito
- Prendere in considerazione i test e le pipeline CI/CD
Impostare i log e la diagnostica
In Linux, il daemon di IoT Edge usa journal come driver di registrazione predefinito. È possibile usare lo strumento della riga di comando journalctl
per eseguire una query dei log daemon.
In Windows, il daemon di IoT Edge usa la diagnostica di PowerShell. Usare Get-IoTEdgeLog
per eseguire query dei log da daemon. I moduli IoT Edge usano il driver JSON per la registrazione, ovvero l'impostazione predefinita.
. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
Quando si esegue il test di una distribuzione di IoT Edge, è generalmente possibile accedere ai dispositivi per recuperare i log e risolvere i problemi. In uno scenario di distribuzione, quell'opzione potrebbe non essere disponibile. Considerare in che modo raccogliere informazioni sui dispositivi in produzione. Una possibilità consiste nell'usare un modulo di registrazione che raccoglie le informazioni da altri moduli e le invia al cloud. Un esempio di un modulo di registrazione logspout-loganalytics, oppure è possibile progettare il proprio.
Configurare il driver di registrazione predefinito
Per impostazione predefinita, il motore del contenitore Moby non imposta limiti di dimensioni per i log dei contenitori. Nel corso del tempo questo può causare il riempimento del dispositivo con i log e l'esaurimento dello spazio su disco. Configurare il motore del contenitore per usare il local
driver di registrazione come meccanismo di registrazione. Local
il driver di registrazione offre un limite di dimensioni del log predefinito, esegue la rotazione dei log per impostazione predefinita e usa un formato di file più efficiente che consente di evitare l'esaurimento dello spazio su disco. È anche possibile scegliere di usare driver di registrazione diversi e impostare limiti di dimensioni diversi in base alle esigenze.
Opzione: Configurare il driver di registrazione predefinito per tutti i moduli contenitore
È possibile configurare il motore del contenitore per l'uso di un driver di registrazione specifico impostando il valore di log driver
sul nome del driver di log in daemon.json
. Nell'esempio seguente il driver di registrazione predefinito viene impostato sul driver di local
log (scelta consigliata).
{
"log-driver": "local"
}
È anche possibile configurare le log-opts
chiavi in modo da usare i valori appropriati nel daemon.json
file. Nell'esempio seguente il driver di log viene impostato su local
e vengono impostate le max-size
opzioni e max-file
.
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Aggiungere (o aggiungere) queste informazioni a un file denominato daemon.json
e inserirle nel percorso seguente:
Piattaforma | Ufficio |
---|---|
Linux | /etc/docker/ |
Windows | C:\ProgramData\iotedge-moby\config\ |
Per rendere effettive le modifiche, è necessario riavviare il motore del contenitore.
Opzione: Modificare le impostazioni del log per ogni modulo contenitore
A tale scopo, è possibile usare createOptions di ogni modulo. Ad esempio:
"createOptions": {
"HostConfig": {
"LogConfig": {
"Type": "local",
"Config": {
"max-size": "10m",
"max-file": "3"
}
}
}
}
Opzioni aggiuntive nei sistemi Linux
Configurare il motore del contenitore per inviare i log al
systemd
journal impostandojournald
come driver di registrazione predefinito.Rimuovere periodicamente i log precedenti dal dispositivo installando uno strumento logrotate. Usare la specifica del file seguente:
/var/lib/docker/containers/*/*-json.log{ copytruncate daily rotate7 delaycompress compress notifempty missingok }
Prendere in considerazione i test e le pipeline CI/CD
Per uno scenario di distribuzione di IoT Edge più efficiente, provare a integrare la distribuzione di produzione nel test e nelle pipeline CI/CD. Azure IoT Edge supporta più piattaforme di integrazione CI/CD, tra cui Azure DevOps. Per altre informazioni, vedere Integrazione e distribuzione continue in Azure IoT Edge.
Considerazioni sulla sicurezza
- Importante
- Gestire l'accesso nel registro contenitori
- Limitare l'accesso al contenitore alle risorse host
Gestire l'accesso nel registro contenitori
Prima di distribuire moduli nei dispositivi IoT Edge di produzione, assicurarsi di controllare l'accesso al registro contenitori in modo che gli utenti esterni non possano accedere o apportare modifiche alle immagini del contenitore. Usare un registro contenitori privato per gestire le immagini del contenitore.
Nelle esercitazioni e in altri documenti, viene indicato di usare nel dispositivo IoT Edge le stesse credenziali del registro contenitori usate nel computer di sviluppo. Queste istruzioni sono destinate solamente a facilitare la configurazione degli ambienti di test e di sviluppo e non devono essere seguite in uno scenario di produzione.
Per un accesso più protetto al Registro di sistema, è possibile scegliere tra le opzioni di autenticazione. Un'autenticazione comune e consigliata consiste nell'usare un'entità servizio Active Directory particolarmente adatta alle applicazioni o ai servizi per eseguire il pull delle immagini del contenitore in modo automatico o automatico (headless), come fanno i dispositivi IoT Edge. Un'altra opzione consiste nell'usare i token con ambito repository, che consentono di creare identità long o short-live esistenti solo nei Registro Azure Container creati in e di definire l'ambito di accesso al livello del repository.
Per creare un'entità servizio, eseguire i due script come descritto in Creare un'entità servizio. Questi script eseguono le attività seguenti:
Il primo script crea l'entità servizio. Restituisce l'ID entità servizio e la password dell'entità servizio. Archiviare questi valori in modo sicuro nei record.
Il secondo script crea assegnazioni di ruolo da concedere all'entità servizio, che può essere eseguita successivamente, se necessario. È consigliabile applicare il ruolo utente acrPull per il
role
parametro . Per un elenco dei ruoli, vedere Registro Azure Container ruoli e autorizzazioni.
Per eseguire l'autenticazione usando un'entità servizio, specificare l'ID entità servizio e la password ottenuti dal primo script. Specificare queste credenziali nel manifesto della distribuzione.
Per il nome utente o l'ID client, specificare l'ID entità servizio.
Per la password o il segreto client, specificare la password dell'entità servizio.
Per creare token con ambito repository, seguire la procedura per creare un token con ambito repository.
Per eseguire l'autenticazione usando token con ambito repository, specificare il nome del token e la password ottenuti dopo aver creato il token con ambito repository. Specificare queste credenziali nel manifesto della distribuzione.
Per il nome utente, specificare il nome utente del token.
Per la password, specificare una delle password del token.
Nota
Dopo aver implementato un'autenticazione di sicurezza avanzata, disabilitare l'impostazione Utente amministratore in modo che l'accesso predefinito a nome utente/password non sia più disponibile. Nel registro contenitori nel portale di Azure, dal menu del riquadro sinistro in Impostazioni selezionare Chiavi di accesso.
Limitare l'accesso al contenitore alle risorse host
Per bilanciare le risorse host condivise tra moduli, è consigliabile inserire limiti al consumo di risorse per ogni modulo. Questi limiti garantiscono che un modulo non possa usare troppa memoria o CPU e impedire l'esecuzione di altri processi nel dispositivo. La piattaforma IoT Edge non limita le risorse per i moduli per impostazione predefinita, poiché la quantità di risorse necessarie per eseguire in modo ottimale un determinato modulo va determinata.
Docker fornisce alcuni vincoli che è possibile usare per limitare le risorse, ad esempio l'utilizzo della memoria e della CPU. Per altre informazioni, vedere Opzioni di runtime con memoria, CPU e GPU.
Questi vincoli possono essere applicati ai singoli moduli usando le opzioni di creazione nei manifesti della distribuzione. Per altre informazioni, vedere Come configurare le opzioni di creazione di contenitori per i moduli IoT Edge.
Passaggi successivi
- Altre informazioni sulla distribuzione automatica di IoT Edge.
- Vedere come IoT Edge supporta l'integrazione e la distribuzione continue.