Distribuire in Istanze di Azure Container dal Registro Container di Azure usando un'entità servizio
Registro Azure Container è un servizio gestito di registro contenitori usato per archiviare immagini di un contenitore Docker privato. Questo articolo descrive come eseguire il pull delle immagini del contenitore archiviate in un Registro Azure Container durante la distribuzione in Istanze di Azure Container. Un modo per configurare l'accesso al Registro di sistema consiste nel creare un'entità servizio e una password di Microsoft Entra e archiviare le credenziali di accesso in un insieme di credenziali delle chiavi di Azure.
Prerequisiti
Registro Azure Container: è necessaria un'immagine del registro Azure Container e almeno un'immagine del contenitore nel registro per completare i passaggi descritti in questo articolo. Se occorre un registro, vedere Creare un registro contenitori usando l'interfaccia della riga di comando di Azure.
Interfaccia della riga di comando di Azure: gli esempi della riga di comando in questo articolo usano l'interfaccia della riga di comando di Azure e sono formattati per la shell Bash. È possibile installare l'interfaccia della riga di comando di Azure localmente o usare Azure Cloud Shell.
Limiti
- I contenitori di Windows non supportano il pull delle immagini autenticate con identità gestite assegnate dal sistema con Registro Azure Container, assegnato solo dall'utente.
Configurare l'autenticazione del registro
In uno scenario di produzione in cui si fornisce l'accesso a servizi e applicazioni "headless", è consigliabile configurare l'accesso al Registro di sistema usando un'entità servizio. Un'entità servizio consente di fornire il controllo degli accessi in base al ruolo di Azure alle immagini del contenitore. Ad esempio, è possibile configurare un'entità servizio con accesso solo pull a un registro.
Registro Azure Container offre altre opzioni di autenticazione.
Nella sezione seguente vengono creati un insieme di credenziali delle chiavi e un'entità servizio di Azure e le credenziali dell'entità servizio vengono archiviate nell'insieme.
Creare un insieme di credenziali delle chiavi
Se non si ha già un insieme di credenziali delle chiavi in Azure Key Vault, crearne uno usando i comandi seguenti nell'interfaccia della riga di comando di Azure.
Aggiornare la variabile RES_GROUP
con il nome di un gruppo di risorse esistente in cui creare l'insieme di credenziali delle chiavi e ACR_NAME
con il nome del registro contenitori. Per brevità, i comandi in questo articolo presuppongono che il Registro di sistema, l'insieme di credenziali delle chiavi e le istanze del contenitore vengano tutti creati nello stesso gruppo di risorse.
Specificare un nome per il nuovo insieme di credenziali delle chiavi in AKV_NAME
. Il nome dell'insieme di credenziali deve essere univoco in Azure e deve essere composto da 3-24 caratteri alfanumerici, iniziare con una lettera, terminare con una lettera o una cifra e non può contenere trattini consecutivi.
RES_GROUP=myresourcegroup # Resource Group name
ACR_NAME=myregistry # Azure Container Registry registry name
AKV_NAME=mykeyvault # Azure Key Vault vault name
az keyvault create -g $RES_GROUP -n $AKV_NAME
Creare un'entità servizio e archiviare le credenziali
Creare ora un'entità servizio e archiviarne le credenziali nell'insieme di credenziali delle chiavi.
I comandi seguenti usano az ad sp create-for-rbac per creare l'entità servizio e az keyvault secret impostato per archiviare la password dell'entità servizio nell'insieme di credenziali. Assicurarsi di prendere nota dell'id app dell'entità servizio al momento della creazione.
# Create service principal
az ad sp create-for-rbac \
--name http://$ACR_NAME-pull \
--scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
--role acrpull
SP_ID=xxxx # Replace with your service principal's appId
# Store the registry *password* in the vault
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-pwd \
--value $(az ad sp show --id $SP_ID --query password --output tsv)
L'argomento --role
nel comando precedente configura l'entità servizio con il ruolo acrpull, che concede l'accesso al registro con autorizzazioni solo di pull. Per concedere l'accesso con autorizzazioni sia di push che di pull, impostare l'argomento --role
su acrpush.
Quindi, archiviare nell'insieme di credenziali il valore appId dell'entità servizio, che corrisponde al nome utente passato a Registro Azure Container per l'autenticazione.
# Store service principal ID in vault (the registry *username*)
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-usr \
--value $(az ad sp show --id $SP_ID --query appId --output tsv)
È stato creato un insieme di credenziali delle chiavi di Azure e sono stati archiviati due segreti:
$ACR_NAME-pull-usr
: ID dell'entità servizio, da usare come nome utente del registro contenitori.$ACR_NAME-pull-pwd
: password dell'entità servizio, da usare come password del registro contenitori.
Ora è possibile fare riferimento a questi segreti per nome quando gli utenti o le applicazioni e i servizi eseguono il pull di immagini dal registro.
Distribuire un contenitore con l'interfaccia della riga di comando di Azure
Ora che le credenziali dell'entità servizio sono archiviate nei segreti di Azure Key Vault, le applicazioni e i servizi possono usarle per accedere al registro privato.
Ottenere prima di tutto il nome del server di accesso del registro usando il comando az acr show. Il nome del server di accesso contiene solo lettere minuscole ed è simile a myregistry.azurecr.io
.
ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)
Eseguire il comando az container create seguente per distribuire un'istanza di contenitore. Il comando usa le credenziali dell'entità servizio archiviate in Azure Key Vault per eseguire l'autenticazione nel registro contenitori e presuppone che in precedenza sia stato eseguito il push dell'immagine aci-helloworld nel registro. Aggiornare il valore di --image
se si vuole usare un'immagine del registro diversa.
az container create \
--name aci-demo \
--resource-group $RES_GROUP \
--image $ACR_LOGIN_SERVER/aci-helloworld:v1 \
--registry-login-server $ACR_LOGIN_SERVER \
--registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) \
--registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) \
--dns-name-label aci-demo-$RANDOM \
--query ipAddress.fqdn
Il valore di --dns-name-label
deve essere univoco in Azure, quindi il comando precedente accoda un numero casuale all'etichetta del nome DNS del contenitore. L'output del comando visualizza il nome di dominio completo (FQDN) del contenitore, ad esempio:
"aci-demo-25007.eastus.azurecontainer.io"
Una volta avviato correttamente il contenitore, è possibile passare al relativo FQDN nel browser per verificare che l'applicazione sia in esecuzione correttamente.
Distribuire con un modello di Azure Resource Manager
È possibile specificare le proprietà del registro Azure Container in un modello di Azure Resource Manager includendo la imageRegistryCredentials
proprietà nella definizione del gruppo di contenitori. Ad esempio, è possibile specificare direttamente le credenziali del Registro di sistema:
[...]
"imageRegistryCredentials": [
{
"server": "imageRegistryLoginServer",
"username": "imageRegistryUsername",
"password": "imageRegistryPassword"
}
]
[...]
Per le impostazioni complete del gruppo di contenitori, vedere le informazioni di riferimento sul modello di Resource Manager.
Per informazioni dettagliate sul riferimento ai segreti di Azure Key Vault in un modello di Resource Manager, vedere Usare Azure Key Vault per passare valori di parametro protetti durante la distribuzione.
Distribuire con il portale di Azure
Se si conservano le immagini del contenitore in un Registro Azure Container, è possibile creare facilmente un contenitore in Istanze di Azure Container usando il portale di Azure. Quando si usa il portale per distribuire un'istanza di contenitore da un registro contenitori, è necessario abilitare l'account amministratore del registro. L'account amministratore è pensato per consentire l'accesso al registro a un singolo utente, principalmente a scopo di test.
Nel portale di Azure passare al registro contenitori.
Per confermare che l'account amministratore è abilitato, selezionare Chiavi di accesso e quindi in Utente amministratore selezionare Abilitare.
Selezionare Repository, quindi selezionare il repository da cui si desidera eseguire la distribuzione, fare clic con il pulsante destro del mouse sul tag dell'immagine del contenitore che si vuole distribuire e selezionare Esegui istanza.
Immettere un nome per il contenitore e un nome per il gruppo di risorse. Se si vuole, è anche possibile cambiare i valori predefiniti.
Al termine della distribuzione, è possibile passare al gruppo di contenitori dal riquadro delle notifiche per trovare l'indirizzo IP e le altre proprietà.
Passaggi successivi
Per altre informazioni sull'autenticazione con Registro Azure Container, vedere Eseguire l'autenticazione con un registro contenitori Docker privato.