Implementare in Istanze di Azure Container da Registro Azure Container usando un'identità gestita
Registro Azure Container (ACR) è un servizio di registro contenitori gestito basato su Azure usato per archiviare immagini di contenitori Docker private. Questo articolo descrive come eseguire il pull delle immagini del contenitore archiviate in un Registro Azure Container durante la distribuzione in gruppi di contenitori con Istanze di Azure Container. Un modo per configurare l'accesso al Registro di sistema consiste nel creare un'identità gestita di Microsoft Entra.
Quando l'accesso a un Registro Azure Container (ACR) è limitato tramite un endpoint privato, l'uso di un'identità gestita consente Istanze di Azure Container distribuita in una rete virtuale per accedere al registro contenitori tramite l'endpoint privato.
Prerequisiti
Registro Azure Container: è necessario un registro Azure Container con SKU Premium con almeno un'immagine. Se è necessario creare un registro, vedere Creare un registro contenitori usando l'interfaccia della riga di comando di Azure. Assicurarsi di prendere nota del registro e id
loginServer
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
Il registro contenitori deve avere Servizi attendibili abilitati. Per istruzioni su come abilitare i servizi attendibili, vedere Consentire ai servizi attendibili di accedere in modo sicuro a un registro contenitori con restrizioni di rete.
Creare un'identità
Creare un'identità nella sottoscrizione usando il comando az identity create. È possibile usare lo stesso gruppo di risorse usato in precedenza per creare il registro contenitori o uno diverso.
az identity create --resource-group myResourceGroup --name myACRId
Per configurare l'identità nei passaggi seguenti, usare il comando az identity show per archiviare l'ID risorsa dell'identità e l'ID dell'entità servizio nelle variabili.
Per configurare correttamente l'identità nei passaggi futuri, usare az identity show per ottenere e archiviare l'ID risorsa dell'identità e l'ID entità servizio nelle variabili.
# Get resource ID of the user-assigned identity
USERID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)
# Get service principal ID of the user-assigned identity
SPID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)
È necessario l'ID risorsa dell'identità per accedere all'interfaccia della riga di comando dalla macchina virtuale. Per visualizzare il valore:
echo $USERID
L'ID risorsa è nel formato seguente:
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId
È necessario anche l'ID entità servizio per concedere all'identità gestita l'accesso al registro contenitori. Per visualizzare il valore:
echo $SPID
L'ID dell'entità servizio è nel formato seguente:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
Concedere all'identità un'assegnazione di ruolo
Per consentire all'identità di accedere al registro contenitori, è necessario concedergli un'assegnazione di ruolo. Usare il comando seguente per concedere il ruolo all'identità creata, assicurandosi di fornire l'ID acrpull
del Registro di sistema e l'entità servizio ottenuta in precedenza:
az role assignment create --assignee $SPID --scope <registry-id> --role acrpull
Distribuire usando un modello di Azure Resource Manager (ARM)
Per iniziare, copiare il codice JSON seguente in un nuovo file denominato azuredeploy.json
. In Azure Cloud Shell è possibile usare Visual Studio Code per creare il file nella directory di lavoro:
code azuredeploy.json
È possibile specificare le proprietà del Registro Azure Container in un modello di Resource Manager includendo la imageRegistryCredentials
proprietà nella definizione del gruppo di contenitori. Ad esempio, è possibile specificare direttamente le credenziali del Registro di sistema:
Nota
Non si tratta di un modello arm completo, ma piuttosto di un esempio dell'aspetto resources
della sezione di un modello completo.
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2021-09-01",
"name": "myContainerGroup",
"location": "norwayeast",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId": {}
}
},
"properties": {
"containers": [
{
"name": "mycontainer",
"properties": {
"image": "myacr.azurecr.io/hello-world:latest",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 1
}
}
}
}
],
"imageRegistryCredentials": [
{
"server":"myacr.azurecr.io",
"identity":"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId"
}
],
"ipAddress": {
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "public"
},
"osType": "Linux"
}
}
Distribuire il modello
Distribuire il modello di Resource Manager con il comando seguente:
az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json
Distribuire tramite l'interfaccia della riga di comando di Azure
Per distribuire un gruppo di contenitori usando l'identità gestita per autenticare le immagini tramite l'interfaccia della riga di comando di Azure, usare il comando seguente, assicurandosi che sia <dns-label>
univoco a livello globale:
az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --ports 80 --dns-name-label <dns-label>
Distribuire in una rete virtuale usando l'interfaccia della riga di comando di Azure
Per distribuire un gruppo di contenitori in una rete virtuale usando l'identità gestita per autenticare le immagini pull da un Registro Azure Container eseguito dietro un endpoint privato tramite l'interfaccia della riga di comando di Azure, usare il comando seguente:
az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --vnet "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/ --subnet mySubnetName
Per altre informazioni su come eseguire la distribuzione in una rete virtuale, vedere Distribuire istanze di contenitori in una rete virtuale di Azure.
Distribuire un gruppo multi-contenitore in una rete virtuale usando YAML e l'interfaccia della riga di comando di Azure
Per distribuire un gruppo multi-contenitore in una rete virtuale usando l'identità gestita per autenticare le immagini estrae da un record di controllo di accesso eseguito dietro un endpoint privato tramite l'interfaccia della riga di comando di Azure, è possibile specificare la configurazione del gruppo di contenitori in un file YAML. Quindi passare il file YAML come parametro per il comando.
apiVersion: '2021-10-01'
location: eastus
type: Microsoft.ContainerInstance/containerGroups
identity:
type: UserAssigned
userAssignedIdentities: {
'/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId': {}
}
properties:
osType: Linux
imageRegistryCredentials:
- server: myacr.azurecr.io
identity: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId'
subnetIds:
- id: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNetName/subnets/mySubnetName'
name: mySubnetName
containers:
- name: myContainer-1
properties:
resources:
requests:
cpu: '.4'
memoryInGb: '1'
environmentVariables:
- name: CONTAINER
value: 1
image: 'myacr.azurecr.io/myimage:latest'
- name: myContainer-2
properties:
resources:
requests:
cpu: '.4'
memoryInGb: '1'
environmentVariables:
- name: CONTAINER
value: 2
image: 'myacr.azurecr.io/myimage:latest'
az container create --name my-containergroup --resource-group myResourceGroup --file my-YAML-file.yaml
Per altre informazioni su come eseguire la distribuzione in un gruppo multi-contenitore, vedere Distribuire un gruppo multi-contenitore.
Pulire le risorse
Per rimuovere tutte le risorse dalla sottoscrizione di Azure, eliminare il gruppo di risorse:
az group delete --name myResourceGroup