Distribuire dal registro contenitori privati a Kubernetes locale usando Registro Azure Container e Arc del servizio Azure Kubernetes

Si applica a: Azure Stack HCI, versione 23H2

Questo articolo descrive come distribuire immagini di contenitori da un registro contenitori privato usando Registro Azure Container, che è possibile eseguire nel proprio data center nelle distribuzioni di AKS Arc. Si distribuisce 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 e eseguire il push dell'immagine del contenitore nel Registro contenitori privati. È quindi possibile distribuire dal Registro di sistema privato al cluster Kubernetes locale ospitato in AKS Arc.

Per altre informazioni sulle Registro Azure Container, vedere la documentazione Registro Azure Container.

Prerequisiti

Verificare di avere i requisiti seguenti:

Creare un registro contenitori privati 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. Nell'esempio seguente viene creato un gruppo di risorse nell'area eastus :

az group create --name <RESOURCE_GROUP_NAME> --location eastus

Creare un'istanza del Registro contenitori con il comando az acr create e specificare il proprio nome del Registro di sistema. Il nome del Registro di sistema deve essere univoco in Azure e contenere da 5 a 50 caratteri alfanumerici. Nel resto di questo articolo viene <acrName> 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 fornisce 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 Azure Container supporta tre ruoli di accesso. Il ruolo Collaboratore viene usato più comunemente dagli sviluppatori di applicazioni. Tuttavia, negli scenari reali, 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 deve produrre 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 l'appId e la password in un percorso sicuro, da usare più avanti nella distribuzione.

Per altre informazioni sull'uso di entità servizio e Registro Azure Container, vedere Autenticazione al Registro Azure Container con entità servizio.

Accedere al Registro contenitori privati

Per usare l'istanza del Registro contenitori, è prima necessario accedere. È 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>

In entrambe le opzioni il comando deve restituire un messaggio di accesso 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. Prima di tutto, eseguire il comando docker images 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 comando docker e quindi usare docker tagpush 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 comando docker images. Dopo aver confermato, eseguire docker push per eseguire il push nel Registro contenitori, come indicato di seguito:

docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Per verificare che l'immagine sia stata eseguita 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 l'autenticazione nel Registro di sistema. Per creare il segreto pull per un registro contenitori, specificare l'ID dell'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>

La tabella seguente descrive i parametri di input:

Valore Descrizione
secret-name Nome dell'immagine esegue il pull segreto; ad esempio , acr-secret.
namespace Spazio dei nomi Kubernetes in cui inserire il segreto. È necessario solo se si vuole inserire il segreto in uno spazio dei nomi diverso dallo spazio dei nomi predefinito.
<REGISTRY_NAME> Nome del registro contenitori. Ad esempio: myregistry. Il --docker-server nome completo del server di accesso del Registro di sistema è il nome completo.
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 di sistema 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 descrivere <pod POD_NAME>, che dovrebbe mostrare l'immagine del contenitore usata per creare il pod.

Passaggi successivi