Eseguire l'autenticazione con Registro Container di Azure (ACR) dal servizio Azure Kubernetes (AKS)
Quando si usa Registro Azure Container con il servizio Azure Kubernetes, è necessario stabilire un meccanismo di autenticazione. È possibile configurare le autorizzazioni necessarie tra Registro Azure Container e il servizio Azure Kubernetes usando l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure. Questo articolo fornisce esempi su come 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 in Registro Azure Container assegna il ruolo AcrPull all'identità gestita dell'ID di 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
È stato riscontrato un problema di latenza durante il collegamento dei gruppi Microsoft Entra con 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 nell’applicazione del gruppo del controllo degli accessi in base al ruolo. Se si usa un processo automatizzato che richiede il completamento della configurazione del controllo degli accessi in base al ruolo, è consigliabile usare 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 nel servizio Azure Kubernetes. In questo modo l'identità viene aggiunta al gruppo Microsoft Entra prima che kubelet generi un token e si evita così il problema di latenza.
Nota
Questo articolo illustra l'autenticazione automatica tra il servizio Azure Kubernetes e Registro Azure Container. Se è necessario eseguire il pull di un'immagine da un registro esterno privato, usare un segreto di pull dell’immagine.
Operazioni preliminari
- La sottoscrizione di Azure deve includere il ruolo Proprietario, Amministratore dell’account Azure o Coamministratore di Azure.
- Per evitare la necessità di disporre di uno di questi ruoli, è possibile usare in alternativa 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 servizio Registro Azure Container.
- In questo articolo si presuppone che sia in esecuzione l’interfaccia della riga di comando di Azure versione 2.7.0 o versione successiva se si usa l'interfaccia della riga di comando di Azure. 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. - In questo articolo si presuppone che sia in esecuzione Azure PowerShell versione 5.9.0 o una versione successiva se si usa Azure PowerShell. 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 servizio Registro Azure Container
Se non si dispone già un servizio Registro Azure Container, crearne uno usando il comando
az acr create
. Nell'esempio seguente laMYACR
variabile viene impostata sul nome del servizio Registro Azure Container, mycontainerregistry e tale variabile viene quindi usata per creare il Registro di sistema. Il nome del servizio Registro Azure Container deve essere univoco a livello globale e contenere solo lettere minuscole.MYACR=mycontainerregistry az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
Creare un nuovo cluster del servizio Azure Kubernetes e integrarlo con un servizio Registro Azure Container esistente
Creare un nuovo cluster del servizio Azure Kubernetes e integrarlo con un servizio Registro Azure Container esistente usando il comando
az aks create
con il parametro--attach-acr
. Questo comando consente di autorizzare un servizio Registro Azure Container esistente nella sottoscrizione e di configurare il ruolo AcrPull appropriato per l'identità gestita.MYACR=mycontainerregistry az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
Il completamento di questo comando può richiedere alcuni minuti.
Nota
Se si usa un servizio Registro Azure Container presente in una sottoscrizione diversa dal cluster del servizio Azure Kubernetes o si preferisce usare l’ID risorsa di Registro Azure Container anziché il nome del servizio 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 di Registro Azure Container per un cluster del servizio Azure Kubernetes esistente
Collegare un servizio Registro Azure Container a un cluster del servizio Azure Kubernetes esistente
Integrare un servizio Registro Azure Container esistente con un cluster del servizio Azure Kubernetes esistente usando il comando
az aks update
con il parametro--attach-acr
e un valore valido per acr-name o acr-resource-id.# Attach using acr-name az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-name> # Attach using acr-resource-id az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-resource-id>
Nota
Il comando
az aks update --attach-acr
usa le autorizzazioni dell'utente che esegue il comando per creare l'assegnazione del ruolo di 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 servizio Registro Azure Container da un cluster del servizio Azure Kubernetes
Rimuovere l'integrazione tra un servizio Registro Azure Container e un cluster del servizio Azure Kubernetes usando il comando
az aks update
con il parametro--detach-acr
e un valore valido per acr-name o acr-resource-id.# Detach using acr-name az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-name> # Detach using acr-resource-id az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-resource-id>
Uso di Registro Azure Container e del servizio Azure Kubernetes
Importare un'immagine in Registro Azure Container
Importare un'immagine da Docker Hub in Registro Azure Container usando il comando
az acr import
.az acr import --name <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 comando
az aks get-credentials
.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Creare un file denominato acr-nginx.yaml usando il codice YAML di esempio seguente e sostituire acr-name con il nome del servizio 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 comando
kubectl apply
.kubectl apply -f acr-nginx.yaml
Monitorare la distribuzione usando il comando
kubectl get pods
.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 comando
az aks check-acr
. - Altre informazioni sul monitoraggio di Registro Azure Container.
- Altre informazioni sull'integrità di Registro Azure Container.
Azure Kubernetes Service