Condividi tramite


Eseguire la distribuzione dal registro container privato a Kubernetes locale utilizzando Registro Container di Azure e Azure Arc per AKS

Si applica a: AKS locale su Azure

Questo articolo descrive come distribuire immagini di container da un registro container privato utilizzando Azure Container Registry, che puoi eseguire nel proprio data center nelle distribuzioni AKS Arc. Si esegue la distribuzione nel cluster Kubernetes in locale, utilizzando il servizio AKS ospitato localmente. 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 ulteriori informazioni su Azure Container Registry, vedere la documentazione di Azure Container Registry.

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 dei container, ma è possibile specificare il proprio nome univoco del registro. 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 l'appId e la password in un luogo sicuro per usarli 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 .

Caricare un'immagine nel registro dei contenitori

Dopo aver eseguito l'accesso, è possibile iniziare a inviare l'immagine al 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 di container ad Azure Kubernetes Service

Per distribuire l'immagine del contenitore dal registro delle immagini al cluster Kubernetes, creare Kubernetes Secrets per archiviare le credenziali del registro. Kubernetes usa un segreto di estrazione delle immagini per archiviare le informazioni necessarie per autenticare il tuo registro. Per creare il segreto di pull per un registro dei container, specificare l'ID identità del 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 recupera il 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 della registrazione dei container. Ad esempio: myregistry. --docker-server è il nome completo del server di login al registro.
appId ID dell'entità servizio usata da Kubernetes per accedere al Registro di sistema.
password Password dell'entità servizio.

Dopo aver creato il segreto per il pull dell'immagine, puoi usarlo per creare pod e deployment di 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