Eseguire l'autenticazione con Registro Container di Azure (ACR) dal servizio Azure Kubernetes (AKS)
Quando si usa Registro Azure Container (ACR) con servizio Azure Kubernetes (AKS), è necessario stabilire un meccanismo di autenticazione. È possibile configurare le autorizzazioni necessarie tra Registro Azure Container e servizio Azure Kubernetes usando l'interfaccia della riga di comando di Azure, Azure PowerShell o portale di Azure. Questo articolo fornisce esempi per configurare l'autenticazione tra questi servizi di Azure usando l'interfaccia della riga di comando di Azure o Azure PowerShell.
L'integrazione del servizio Azure Kubernetes a Registro Azure Container assegna il ruolo AcrPull all'identità gestita dell'ID Entra microsoft associata al pool di agenti nel cluster del servizio Azure Kubernetes. Per altre informazioni sulle identità gestite del servizio Azure Kubernetes, vedere Riepilogo delle identità gestite.
Importante
Si è verificato un problema di latenza con i gruppi di Microsoft Entra quando si collega Registro Azure Container. Se il ruolo AcrPull viene concesso a un gruppo Microsoft Entra e l'identità kubelet viene aggiunta al gruppo per completare la configurazione del controllo degli accessi in base al ruolo, potrebbe verificarsi un ritardo prima che il gruppo controllo degli accessi in base al ruolo venga applicato. Se si esegue l'automazione che richiede il completamento della configurazione del controllo degli accessi in base al ruolo, è consigliabile usare Bring your own kubelet identity (Bring Your Own Kubelet Identity ) come soluzione alternativa. È possibile pre-creare un'identità assegnata dall'utente, aggiungerla al gruppo Microsoft Entra, quindi usare l'identità come identità kubelet per creare un cluster del servizio Azure Kubernetes. In questo modo l'identità viene aggiunta al gruppo Microsoft Entra prima che venga generato un token da kubelet, evitando così il problema di latenza.
Nota
Questo articolo illustra l'autenticazione automatica tra servizio Azure Kubernetes e Registro Azure Container. Se è necessario eseguire il pull di un'immagine da un registro esterno privato, usare un segreto pull di immagini.
Operazioni preliminari
- È necessario il ruolo proprietario, amministratore dell'account di Azure o coamministratore di Azure nella sottoscrizione di Azure.
- Per evitare la necessità di uno di questi ruoli, è invece possibile usare un'identità gestita esistente per autenticare registro Azure Container dal servizio Azure Kubernetes. Per altre informazioni, vedere Usare un'identità gestita di Azure per l'autenticazione in un Registro Azure Container.
- Se si usa l'interfaccia della riga di comando di Azure, questo articolo richiede l'esecuzione dell'interfaccia della riga di comando di Azure versione 2.7.0 o successiva. Eseguire
az --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure. - Se si usa Azure PowerShell, questo articolo richiede l'esecuzione di Azure PowerShell versione 5.9.0 o successiva. Eseguire
Get-InstalledModule -Name Az
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare Azure PowerShell. - Esempi e sintassi per l'uso di Terraform per la configurazione di Registro Azure Container sono disponibili nelle informazioni di riferimento su Terraform.
Creare un nuovo Registro Azure Container
Se non si ha già un Registro Azure Container, crearne uno usando il
az acr create
comando . Nell'esempio seguente laMYACR
variabile viene impostata sul nome del Registro Azure Container, mycontainerregistry e viene usata la variabile per creare il Registro di sistema. Il nome del Registro Azure Container deve essere univoco a livello globale e usare solo lettere minuscole.MYACR=mycontainerregistry az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic
Creare un nuovo cluster del servizio Azure Kubernetes e integrarsi con un Registro Azure Container esistente
Creare un nuovo cluster del servizio Azure Kubernetes e integrarsi con un Registro Azure Container esistente usando il
az aks create
comando con il--attach-acr
parametro . Questo comando consente di autorizzare un Registro Azure Container esistente nella sottoscrizione e di configurare il ruolo AcrPull appropriato per l'identità gestita.MYACR=mycontainerregistry az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR
Il completamento di questo comando può richiedere alcuni minuti.
Nota
Se si usa un Registro Azure Container che si trova in una sottoscrizione diversa dal cluster del servizio Azure Kubernetes o si preferisce usare l'ID risorsa registro Azure Container anziché il nome del Registro Azure Container, è possibile farlo usando la sintassi seguente:
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
Configurare l'integrazione del Registro Azure Container per un cluster del servizio Azure Kubernetes esistente
Collegare un registro Azure Container a un cluster del servizio Azure Kubernetes esistente
Integrare un registro Azure Container esistente con un cluster del servizio Azure Kubernetes esistente usando il comando con il
az aks update
--attach-acr
parametro e un valore valido per acr-name o acr-resource-id.# Attach using acr-name az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-name> # Attach using acr-resource-id az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-resource-id>
Nota
Il
az aks update --attach-acr
comando usa le autorizzazioni dell'utente che esegue il comando per creare l'assegnazione di ruolo del Registro Azure Container. Questo ruolo viene assegnato all'identità gestita kubelet . Per altre informazioni sulle identità gestite del servizio Azure Kubernetes, vedere Riepilogo delle identità gestite.
Scollegare un registro Azure Container da un cluster del servizio Azure Kubernetes
Rimuovere l'integrazione tra un registro Azure Container e un cluster del servizio Azure Kubernetes usando il
az aks update
comando con il--detach-acr
parametro e un valore valido per acr-name o acr-resource-id.# Detach using acr-name az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-name> # Detach using acr-resource-id az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-resource-id>
Uso del servizio Azure Container e del servizio Azure Kubernetes
Importare un'immagine nel Registro Azure Container
Importare un'immagine dall'hub Docker nel Registro Azure Container usando il
az acr import
comando .az acr import -n <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
Distribuire l'immagine di esempio da Registro Azure Container al servizio Azure Kubernetes
Assicurarsi di disporre delle credenziali del servizio Azure Kubernetes appropriate usando il
az aks get-credentials
comando .az aks get-credentials -g myResourceGroup -n myAKSCluster
Creare un file denominato acr-nginx.yaml usando il codice YAML di esempio seguente e sostituire acr-name con il nome del Registro Azure Container.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx0-deployment labels: app: nginx0-deployment spec: replicas: 2 selector: matchLabels: app: nginx0 template: metadata: labels: app: nginx0 spec: containers: - name: nginx image: <acr-name>.azurecr.io/nginx:v1 ports: - containerPort: 80
Eseguire la distribuzione nel cluster del servizio Azure Kubernetes usando il
kubectl apply
comando .kubectl apply -f acr-nginx.yaml
Monitorare la distribuzione usando il
kubectl get pods
comando .kubectl get pods
L'output dovrebbe mostrare due pod in esecuzione, come illustrato nell'output di esempio seguente:
NAME READY STATUS RESTARTS AGE nginx0-deployment-669dfc4d4b-x74kr 1/1 Running 0 20s nginx0-deployment-669dfc4d4b-xdpd6 1/1 Running 0 20s
Risoluzione dei problemi
- Verificare che il Registro di sistema sia accessibile dal cluster del servizio Azure Kubernetes usando il
az aks check-acr
comando . - Altre informazioni sul monitoraggio di Registro Azure Container.
- Altre informazioni sull'integrità del Registro Azure Container.