Freigeben über


Bereitstellen von einer privaten Container Registry zu on-premises Kubernetes mit Azure Container Registry

Gilt für: AKS unter Windows Server

In diesem Artikel wird beschrieben, wie Containerimages aus einer privaten Containerregistrierung mit der Azure Container Registry bereitgestellt werden können, die Sie in Ihrem eigenen Rechenzentrum in AKS auf Windows Server-Bereitstellungen ausführen können. Sie implementieren auf Ihrem lokalen Kubernetes-Cluster, der bei AKS gehostet wird. Mit Azure Container Registry können Sie Containerimages und -artefakte in einer privaten Registrierung für alle Arten von Containerbereitstellungen erstellen, speichern und verwalten.

In diesem Artikel wird beschrieben, wie Sie eine private Containerregistrierung in Azure erstellen und Ihr Containerimage an die private Containerregistrierung pushen. Sie können dann von der privaten Registrierung aus Ihren on-premises Kubernetes Cluster bereitstellen, der in AKS auf Windows Server gehostet wird.

Weitere Informationen zur Containerregistrierung in Azure finden Sie in der Dokumentation zur Azure-Containerregistrierung.

Voraussetzungen

Vergewissern Sie sich, dass Sie die folgenden Anforderungen erfüllen:

  • Grundlegende Kenntnisse der Kubernetes-Konzepte
  • Einen AKS-Cluster, der aktiv ist und ausgeführt wird
  • Die Azure CLI muss installiert sein.
  • Ihre lokale kubectl Umgebung, die so konfiguriert ist, dass sie auf Ihren AKS-Cluster verweist. Sie können den PowerShell-Befehl Get-AksHciCredential verwenden, um Ihren Cluster für den Zugriff mit kubectl zu konfigurieren.

Erstellen einer privaten Containerregistrierung in Azure

Um eine Containerregistrierung zu erstellen, beginnen Sie mit einer Ressourcengruppe. Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Erstellen Sie eine Ressourcengruppe mit dem PowerShell-Befehl "az-group-create ". Im folgenden Beispiel wird eine Ressourcengruppe in der Ostregion erstellt:

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

Erstellen Sie eine Containerregistrierungsinstanz mit dem Befehl "az acr create ", und geben Sie Ihren eigenen Registrierungsnamen an. Der Registrierungsname muss innerhalb von Azure eindeutig sein und fünf bis 50 alphanumerische Zeichen umfassen. Im rest dieses Artikels <acrName> wird als Platzhalter für den Containerregistrierungsnamen verwendet, Sie können jedoch Ihren eigenen eindeutigen Registrierungsnamen angeben. Die Basis-SKU ist ein kostenoptimierter Einstiegspunkt für Entwicklungszwecke, der ein Gleichgewicht zwischen Speicher und Durchsatz bietet:

az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic

Nachdem Sie Ihre Containerregistrierung erstellt haben, verwenden Sie den folgenden Befehl, um einen Dienstprinzipal zu erstellen, damit Sie über Kubernetes auf Ihre Containerregistrierung zugreifen können:

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>

Containerregistrierung unterstützt drei Zugriffsrollen. Die Rolle "Mitwirkender" wird am häufigsten von Anwendungsentwicklern verwendet. In realen Szenarien müssen Sie jedoch möglicherweise mehrere Dienstprinzipale erstellen, je nachdem, welche Art von Zugriff erforderlich ist:

  • Mitwirkender: Diese Rolle bietet Push- und Pullzugriff auf das Repository.
  • Leser: Diese Rolle erlaubt ausschließlich den Pullzugriff auf das Repository.
  • Besitzer: Mit dieser Rolle können Sie anderen Benutzern zusätzlich zum Push- und Pullzugriff auf das Repository Rollen zuweisen.

Der vorherige Befehl sollte die Ausgabe ähnlich dem folgenden Text erzeugen:

{
 "appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "displayName": "akshci-service-principal",
 "name": "http://akshci-service-principal",
 "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

Nachdem der Dienstprinzipal erfolgreich erstellt wurde, kopieren Sie die appId und password an einen sicheren Speicherort, um sie später bei Ihrer Bereitstellung zu verwenden.

Weitere Informationen zum Arbeiten mit Dienstprinzipalen und der Containerregistrierung finden Sie unter Azure Container Registry authentication with service principals.

Anmelden bei der privaten Containerregistrierung

Um die Containerregistrierungsinstanz zu verwenden, müssen Sie sich zuerst anmelden. Zum Anmelden können Sie entweder die Azure CLI oder die Docker CLI verwenden.

Option 1: Anmelden über Azure CLI

Verwenden Sie den Befehl "az acr sign in " und geben Sie den eindeutigen Namen an, der der Containerregistrierung im vorherigen Schritt zugewiesen ist:

az acr login --name <REGISTRY_NAME>

Option 2: Anmelden über Docker CLI

Um die Docker CLI für den Zugriff auf Ihre Containerregistrierung zu verwenden, geben Sie den folgenden Befehl in einem Bash- oder PowerShell-Terminal ein:

docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>

Bei beiden Optionen sollte der Befehl nach Abschluss eine Meldung "Anmeldung erfolgreich" zurückgeben.

Übertragen eines Images in die Containerregistrierung

Nachdem Sie sich erfolgreich angemeldet haben, können Sie damit beginnen, das Abbild in die Container-Registry hochzuladen. Führen Sie zuerst den docker images Befehl aus, um die Liste der Bilder auf Ihrem lokalen Computer anzuzeigen:

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

Um zu beginnen, markieren Sie das Image mit dem docker tag Befehl, und verwenden docker push Sie es dann, um es an die Containerregistrierung zu übertragen:

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

Stellen Sie sicher, dass das Bild ordnungsgemäß markiert wurde, indem Sie den docker images Befehl erneut ausführen. Nachdem Sie dies überprüft haben, führen Sie docker push aus, um einen Push in die Container Registry durchzuführen (siehe unten):

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

Führen Sie den folgenden Befehl aus, um zu bestätigen, dass das Image erfolgreich an die Containerregistrierung übertragen wurde:

az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table

Bereitstellen eines Images aus der Containerregistrierung in AKS

Um Ihr Container -mage von der Container Registry für Ihren Kubernetes Cluster bereitzustellen, erstellen Sie Kubernetes Secrets, um Ihre Anmeldeinformationen für die Registrierung zu speichern. In Kubernetes wird ein Geheimnis für Imagepullvorgänge verwendet, um Informationen zu speichern, die für die Authentifizierung bei Ihrer Registrierung benötigt werden. Um den Pullschlüssel für eine Containerregistrierung zu erstellen, geben Sie die Dienstprinzipal-ID, das Kennwort und die Registrierungs-URL an:

kubectl create secret docker-registry <secret-name> \
    --namespace <namespace> \
    --docker-server=<REGISTRY_NAME>.azurecr.io \
    --docker-username=<appId> \
    --docker-password=<password>

Dabei gilt Folgendes:

Wert Beschreibung
secret-name Der Name des Pull-Secrets des Images, zum Beispiel acr-secret.
namespace Kubernetes-Namespace, in dem das Secret abgelegt werden soll. Nur erforderlich, wenn Sie den geheimen Schlüssel in einem anderen Namespace als dem Standardnamespace platzieren möchten.
<REGISTRY_NAME> Name Ihrer Containerregistrierung; beispiel: myregistry. Dies --docker-server ist der vollqualifizierte Name des Registrierungsanmeldungsservers.
appId ID des Dienstprinzipals, den Kubernetes für den Zugriff auf Ihr Register verwendet.
password Dienstprinzipalkennwort.

Nach dem Erstellen des Geheimnisses für Imagepullvorgänge können Sie es verwenden, um Kubernetes-Pods und Kubernetes-Bereitstellungen zu erstellen. Geben Sie den Namen des Geheimnisses unter imagePullSecrets in der Bereitstellungsdatei an, wie im folgenden Beispiel gezeigt:

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 diesem Beispiel ist poemfinder-app:v1.0 der Name des Images, das aus der Container Registry geholt werden soll, und acr-secret ist der Name des Pull-Secrets, das Sie für den Zugriff auf die Registrierung erstellt haben. Wenn Sie den Pod bereitstellen, ruft Kubernetes das Image automatisch aus Ihrer Registrierung ab, wenn das Image noch nicht im Cluster vorhanden ist.

Sie können die oben genannte Pod-Konfiguration in einer Datei wie pod-example.yaml speichern und dann wie folgt in Kubernetes bereitstellen:

kubectl create -f pod-example.yaml

Um zu bestätigen, dass der Pod erfolgreich mithilfe des Containerimages aus der Containerregistrierung erstellt wurde, führen Sie kubectl describe pod <POD_NAME>aus, wodurch das Containerimage angezeigt werden soll, das zum Erstellen des Pods verwendet wurde.

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie ein Containerimage aus der Azure-Containerregistrierung in AKS Arc bereitstellen. Als Nächstes haben Sie folgende Möglichkeiten: