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

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 opzioni di autenticazione aggiuntive.

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 avere una lunghezza compresa tra 3 e 24 caratteri alfanumerici, iniziare con una lettera, finire con una lettera o una cifra e non 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 vi 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 con il registro contenitori e presuppone che sia stato precedentemente 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 il contenitore, è possibile passare al suo FQDN nel browser per verificare che l'applicazione sia correttamente in esecuzione.

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.

  1. Nel portale di Azure passare al registro contenitori.

  2. Per confermare che l'account amministratore è abilitato, selezionare Chiavi di accesso e quindi in Utente amministratore selezionare Abilitare.

  3. 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.

  4. Immettere un nome per il contenitore e un nome per il gruppo di risorse. Se si vuole, è anche possibile cambiare i valori predefiniti.

    Create menu for Azure Container Instances

  5. Al termine della distribuzione, è possibile passare al gruppo di contenitori dal riquadro delle notifiche per trovare l'indirizzo IP e le altre proprietà.

    Details view for Azure Container Instances container group

Passaggi successivi

Per altre informazioni sull'autenticazione con Registro Azure Container, vedere Eseguire l'autenticazione con un registro contenitori Docker privato.