Delen via


Implementeren vanuit een privécontainerregister naar on-premises Kubernetes met behulp van Azure Container Registry en AKS Arc

Van toepassing op: Azure Stack HCI, versie 23H2

In dit artikel wordt beschreven hoe u containerinstallatiekopieën vanuit een privécontainerregister implementeert met behulp van Azure Container Registry, die u kunt uitvoeren in uw eigen datacenter in AKS Arc-implementaties. U implementeert naar uw on-premises Kubernetes-cluster dat wordt gehost door AKS. Met Azure Container Registry kunt u installatiekopieën en artefacten voor containers compileren, opslaan en beheren in een privéregister voor alle typen containerimplementaties.

In het artikel wordt beschreven hoe u een privécontainerregister maakt in Azure en uw containerinstallatiekopieën naar het privécontainerregister pusht. U kunt vervolgens vanuit het privéregister implementeren naar uw on-premises Kubernetes-cluster dat wordt gehost in AKS Arc.

Zie de Azure Container Registry documentatie voor meer informatie over Azure Container Registry.

Vereisten

Controleer of u aan de volgende vereisten voldoet:

Een privécontainerregister maken in Azure

Als u een containerregister wilt maken, begint u met een resourcegroep. Een Azure-resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd. Maak een resourcegroep met de opdracht az group create. In het volgende voorbeeld wordt een resourcegroep gemaakt in de regio eastus :

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

Maak een Container Registry-exemplaar met de opdracht az acr create en geef uw eigen registernaam op. De registernaam moet uniek zijn binnen Azure en 5 tot 50 alfanumerieke tekens bevatten. In de rest van dit artikel <acrName> wordt gebruikt als tijdelijke aanduiding voor de naam van het containerregister, maar u kunt uw eigen unieke registernaam opgeven. De Basic-SKU is een kostengeoptimeerd ingangspunt voor ontwikkelingsdoeleinden dat een balans tussen opslag en doorvoer biedt:

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

Nadat u het containerregister hebt gemaakt, gebruikt u de volgende opdracht om een service-principal te maken, zodat u toegang hebt tot uw containerregister vanuit 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>

Azure Container Registry ondersteunt drie toegangsrollen. De rol Inzender wordt het meest gebruikt door toepassingsontwikkelaars. In praktijkscenario's moet u mogelijk meerdere service-principals maken, afhankelijk van het type toegang dat nodig is:

  • Inzender: deze rol biedt push- en pull-toegang tot de opslagplaats.
  • Lezer: met deze rol is alleen pull-toegang tot de opslagplaats toegestaan.
  • Eigenaar: Met deze rol kunt u rollen toewijzen aan andere gebruikers, naast de push- en pull-toegang tot de opslagplaats.

Met de vorige opdracht moet uitvoer worden geproduceerd die vergelijkbaar is met de volgende tekst:

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

Zodra de service-principal is gemaakt, kopieert u de appId en het wachtwoord op een veilige locatie om deze later in uw implementatie te gebruiken.

Zie Azure Container Registry authentication with service principals (Azure Container Registry-verificatie met service-principals) voor meer informatie over het werken met service-principals en Azure Container Registry.

Aanmelden bij het privécontainerregister

Als u het Container Registry-exemplaar wilt gebruiken, moet u zich eerst aanmelden. U kunt de Azure CLI of de Docker CLI gebruiken om u aan te melden.

Optie 1: Aanmelden vanuit de Azure CLI

Gebruik de opdracht az acr sign in en geef de unieke naam op die in de vorige stap is toegewezen aan het containerregister:

az acr login --name <REGISTRY_NAME>

Optie 2: Aanmelden vanaf de Docker CLI

Als u de Docker CLI wilt gebruiken voor toegang tot uw containerregister, typt u de volgende opdracht in een Bash- of PowerShell-terminal:

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

In beide opties moet de opdracht een bericht met geslaagde aanmelding retourneren wanneer deze is voltooid.

Een installatiekopieën naar het containerregister pushen

Zodra u bent aangemeld, kunt u beginnen met het pushen van de installatiekopieën naar het Container Registry. Voer eerst de opdracht docker-installatiekopieën uit om de lijst met installatiekopieën op uw lokale computer weer te geven:

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

Om aan de slag te gaan, tagt u de installatiekopieën met behulp van de opdracht docker tag en gebruikt u docker push om deze naar het containerregister te pushen:

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

Controleer of de installatiekopieën juist zijn gelabeld door de opdracht docker images opnieuw uit te voeren. Voer na bevestiging als volgt uit docker push om naar het containerregister te pushen:

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

Voer de volgende opdracht uit om te bevestigen dat de installatiekopieën naar het containerregister zijn gepusht:

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

Een installatiekopieën uit het containerregister implementeren in AKS

Als u uw containerinstallatiekopieën vanuit het containerregister wilt implementeren in uw Kubernetes-cluster, maakt u Kubernetes Secrets om uw registerreferenties op te slaan. Kubernetes gebruikt een pull-geheim voor installatiekopieën om informatie op te slaan die nodig is voor verificatie bij uw register. Als u het pull-geheim voor een containerregister wilt maken, geeft u de service-principal-id, het wachtwoord en de register-URL op:

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

In de volgende tabel worden de invoerparameters beschreven:

Waarde Beschrijving
secret-name Naam van de installatiekopie haalt geheim op; bijvoorbeeld acr-secret.
namespace Kubernetes-naamruimte waarin het geheim moet worden geplaatst. Alleen nodig als u het geheim in een andere naamruimte dan de standaardnaamruimte wilt plaatsen.
<REGISTRY_NAME> Naam van het containerregister. Bijvoorbeeld myregistry. De --docker-server is de volledig gekwalificeerde naam van de register-aanmeldingsserver.
appId Id van de service-principal die Kubernetes gebruikt om toegang te krijgen tot uw register.
password Wachtwoord voor service-principal.

Zodra u het pull-geheim voor de installatiekopie hebt gemaakt, kunt u dit gebruiken om Kubernetes-pods en -implementaties te maken. Geef de naam op van het geheim onder imagePullSecrets in het implementatiebestand, zoals wordt weergegeven in het volgende voorbeeld:

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 dit voorbeeld poemfinder-app:v1.0 is de naam van de installatiekopie die moet worden opgehaald uit het containerregister en acr-secret de naam van het pull-geheim dat u hebt gemaakt voor toegang tot het register. Wanneer u de pod implementeert, haalt Kubernetes de installatiekopie automatisch op uit het register als de installatiekopie nog niet aanwezig is in het cluster.

U kunt de bovenstaande podconfiguratie als volgt opslaan in een bestand zoals pod-example.yaml en deze vervolgens implementeren in Kubernetes:

kubectl create -f pod-example.yaml

Om te bevestigen dat de pod is gemaakt met behulp van de containerinstallatiekopieën uit het containerregister, voert u kubectl describe pod <POD_NAME> uit. Hier ziet u de containerinstallatiekopieën die zijn gebruikt om de pod te maken.

Volgende stappen