Eseguire la distribuzione dal registro contenitori privato a Kubernetes locale usando Registro Azure Container
Si applica a: AKS su Azure Local 22H2, AKS su Windows Server
Questo articolo descrive come distribuire immagini del contenitore da un registro contenitori privato usando Registro Azure Container, che è possibile eseguire nel proprio data center nel servizio Azure Kubernetes abilitato dalle distribuzioni di Azure Arc. Si esegue la distribuzione nel cluster Kubernetes locale ospitato dal servizio Azure Kubernetes. Registro Azure Container consente di creare, archiviare e gestire immagini e artefatti di contenitori in un registro privato per tutti i tipi di distribuzioni di contenitori.
L'articolo descrive come creare un registro contenitori privato in Azure ed eseguire il push dell'immagine del contenitore nel registro contenitori privato. È quindi possibile eseguire la distribuzione dal Registro di sistema privato al cluster Kubernetes locale ospitato nel servizio Azure Kubernetes abilitato da Arc.
Per altre informazioni su Registro Container in Azure, vedere la documentazione Registro Azure Container.
Prerequisiti
Verificare di avere i requisiti seguenti:
- Conoscenza di base dei concetti di Kubernetes.
- Un cluster del servizio Azure Kubernetes in esecuzione.
- Interfaccia della riga di comando di Azure installata
- L'ambiente locale
kubectl
configurato per puntare al cluster del servizio Azure Kubernetes. È possibile usare il comando PowerShell Get-AksHciCredential per configurare il cluster per l'accesso tramitekubectl
.
Creare un registro contenitori privato in Azure
Per creare un registro contenitori, iniziare con un gruppo di risorse. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite. Creare un gruppo di risorse con il comando az-group-create di PowerShell. L'esempio seguente crea un gruppo di risorse nell'area eastus :
az group create --name <RESOURCE_GROUP_NAME> --location eastus
Creare un'istanza del Registro Container con il comando az acr create e specificare il proprio nome del registro. Il nome del registro deve essere univoco in Azure e contenere da 5 a 50 caratteri alfanumerici. Nel resto di questo articolo <acrName>
viene usato come segnaposto per il nome del registro contenitori, ma è possibile specificare il proprio nome univoco del Registro di sistema. Lo SKU Basic è un punto di ingresso ottimizzato per i costi a scopo di sviluppo che offre un equilibrio tra archiviazione e velocità effettiva:
az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic
Dopo aver creato il registro contenitori, usare il comando seguente per creare un'entità servizio, in modo da poter accedere al registro contenitori da Kubernetes:
az ad sp create-for-rbac
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RG_NAME>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME>
--role Contributor
--name <SERVICE_PRINCIPAL_NAME>
Registro Container supporta tre ruoli di accesso. Il ruolo Collaboratore viene usato più comunemente dagli sviluppatori di applicazioni. In scenari reali, tuttavia, potrebbe essere necessario creare più entità servizio a seconda del tipo di accesso necessario:
- Collaboratore: questo ruolo offre l'accesso push e pull al repository.
- Lettore: questo ruolo consente solo l'accesso pull al repository.
- Proprietario: questo ruolo consente di assegnare ruoli ad altri utenti, oltre all'accesso push e pull al repository.
Il comando precedente dovrebbe produrre un output simile al testo seguente:
{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
Dopo aver creato l'entità servizio, copiare appId
e password
in un percorso sicuro per usarla più avanti nella distribuzione.
Per altre informazioni sull'uso delle entità servizio e del Registro Container, vedere autenticazione Registro Azure Container con le entità servizio.
Accedere al registro contenitori privato
Per usare l'istanza del Registro Container, è prima necessario eseguire l'accesso. È possibile usare l'interfaccia della riga di comando di Azure o l'interfaccia della riga di comando di Docker per accedere.
Opzione 1: Accedere dall'interfaccia della riga di comando di Azure
Usare il comando az acr sign in e specificare il nome univoco assegnato al registro contenitori nel passaggio precedente:
az acr login --name <REGISTRY_NAME>
Opzione 2: Accedere dall'interfaccia della riga di comando di Docker
Per usare l'interfaccia della riga di comando di Docker per accedere al registro contenitori, digitare il comando seguente in un terminale Bash o PowerShell:
docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>
Con entrambe le opzioni, il comando deve restituire un messaggio "sign in Succeeded" una volta completato.
Eseguire il push di un'immagine nel registro contenitori
Dopo aver eseguito l'accesso, è possibile iniziare a eseguire il push dell'immagine nel registro contenitori. Eseguire prima di tutto il docker images
comando per visualizzare l'elenco di immagini nel computer locale:
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/azure-functions/dotnet 3.0 9f8ad1bdee67 5 months ago 540MB
poemfinder-app latest 2d9bef425603 6 months ago 208MB
Per iniziare, contrassegnare l'immagine usando il docker tag
comando e quindi usarla docker push
per eseguirne il push nel registro contenitori:
docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Verificare che l'immagine sia stata contrassegnata correttamente eseguendo di nuovo il docker images
comando . Dopo aver confermato, eseguire docker push
per eseguire il push nel registro contenitori, come illustrato di seguito:
docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Per verificare che il push dell'immagine sia stato eseguito correttamente nel registro contenitori, eseguire il comando seguente:
az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table
Distribuire un'immagine dal registro contenitori al servizio Azure Kubernetes
Per distribuire l'immagine del contenitore dal registro contenitori al cluster Kubernetes, creare segreti Kubernetes per archiviare le credenziali del Registro di sistema. Kubernetes usa un segreto pull di immagini per archiviare le informazioni necessarie per autenticare il registro. Per creare il segreto pull per un registro contenitori, specificare l'ID entità servizio, la password e l'URL del Registro di sistema:
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>
dove:
Valore | Descrizione |
---|---|
secret-name |
Il nome dell'immagine esegue il pull del segreto, ad esempio acr-secret . |
namespace |
Spazio dei nomi Kubernetes in cui inserire il segreto. È necessario solo se si desidera inserire il segreto in uno spazio dei nomi diverso dallo spazio dei nomi predefinito. |
<REGISTRY_NAME> |
Nome del registro contenitori; ad esempio . myregistry
--docker-server è il nome completo del server di accesso del Registro di sistema. |
appId |
ID dell'entità servizio usata da Kubernetes per accedere al Registro di sistema. |
password |
Password dell'entità servizio. |
Dopo aver creato il segreto pull dell'immagine, è possibile usarlo per creare pod e distribuzioni Kubernetes. Specificare il nome del segreto imagePullSecrets
nel file di distribuzione, come illustrato nell'esempio seguente:
apiVersion: v1
kind: Pod
metadata:
name: poemfinder-app
namespace: mydemoapps
spec:
containers:
- name: poemfinder-app
image: <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: acr-secret
In questo esempio, poemfinder-app:v1.0
è il nome dell'immagine da estrarre dal registro contenitori ed acr-secret
è il nome del segreto pull creato per accedere al Registro di sistema. Quando si distribuisce il pod, Kubernetes esegue automaticamente il pull dell'immagine dal registro se l'immagine non è già presente nel cluster.
È possibile salvare la configurazione del pod precedente in un file, ad esempio pod-example.yaml e quindi distribuirlo in Kubernetes, come indicato di seguito:
kubectl create -f pod-example.yaml
Per verificare che il pod sia stato creato correttamente usando l'immagine del contenitore dal registro contenitori, eseguire kubectl describe pod <POD_NAME>
, che dovrebbe mostrare l'immagine del contenitore usata per creare il pod.
Passaggi successivi
In questo articolo si è appreso come distribuire un'immagine del contenitore dalla Registro Azure Container ad Arc del servizio Azure Kubernetes. Successivamente, è possibile: