Condividi tramite


Eseguire la distribuzione dal registro contenitori privato a Kubernetes locale usando Registro Azure Container e Arc del servizio Azure Kubernetes

Si applica a: Locale di Azure, versione 23H2

Questo articolo descrive come distribuire immagini del contenitore da un registro contenitori privato usando Registro Azure Container, che è possibile eseguire nel proprio data center nelle distribuzioni di Azure Kubernetes 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 privato al cluster Kubernetes locale ospitato in AKS Arc.

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

Prerequisiti

Verificare di avere i requisiti seguenti:

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. 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 Azure 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 correttamente l'entità servizio, copiare il valore appId e la password in un percorso sicuro per usarlo in un secondo momento 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 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>

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. Eseguire prima di tutto 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 tag e quindi usare 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 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 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>

La tabella seguente descrive i parametri di input:

valore Descrizione
secret-name 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