Installatiekopieën ophalen uit een Azure-containerregister naar een Kubernetes-cluster met behulp van een pull-geheim
U kunt een Azure-containerregister gebruiken als bron van containerinstallatiekopieën met elk Kubernetes-cluster, inclusief 'lokale' Kubernetes-clusters, zoals minikube en soort. In dit artikel wordt beschreven hoe u een Kubernetes-pull-geheim maakt met behulp van referenties voor een Azure-containerregister. Gebruik vervolgens het geheim om installatiekopieën op te halen uit een Azure-containerregister in een pod-implementatie.
In dit voorbeeld wordt een pull-geheim gemaakt met de referenties van de Microsoft Entra-service-principal. U kunt ook een pull-geheim configureren met behulp van andere Azure Container Registry-referenties, zoals een toegangstoken met opslagplaatsbereik.
Notitie
Hoewel pull-geheimen vaak worden gebruikt, brengen ze extra beheeroverhead met zich mee. Als u Azure Kubernetes Service gebruikt, raden we andere opties aan, zoals het gebruik van de beheerde identiteit of service-principal van het cluster om de installatiekopie veilig op te halen zonder een extra imagePullSecrets
instelling op elke pod.
Vereisten
In dit artikel wordt ervan uitgegaan dat u al een privé-Azure-containerregister hebt gemaakt. U moet ook een Kubernetes-cluster uitvoeren en toegankelijk maken via het kubectl
opdrachtregelprogramma.
Een service-principal maken
Als u een service-principal wilt maken met toegang tot uw containerregister, voert u het volgende script uit in Azure Cloud Shell of een lokale installatie van de Azure CLI. Het script is opgemaakt voor de Bash-shell.
Werk de ACR_NAME
variabele bij met de naam van het containerregister voordat u het script uitvoert. De SERVICE_PRINCIPAL_NAME
waarde moet uniek zijn binnen uw Microsoft Entra-tenant. Als u een ''http://acr-service-principal' already exists.
'-fout ontvangt, geeft u een andere naam op voor de service-principal.
U kunt desgewenst de --role
waarde wijzigen in de opdracht az ad sp create-for-rbac als u verschillende machtigingen wilt verlenen. Zie ACR-rollen en -machtigingen voor een volledige lijst met rollen.
Nadat u het script hebt uitgevoerd, noteert u de id en het wachtwoord van de service-principal. Zodra u de referenties hebt, kunt u uw toepassingen en services configureren voor verificatie bij uw containerregister als de service-principal.
#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.
# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal
# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId
# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull: pull only
# acrpush: push and pull
# owner: push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"
Een bestaande service-principal gebruiken
Als u registertoegang wilt verlenen aan een bestaande service-principal, moet u een nieuwe rol toewijzen aan de service-principal. Net als bij het maken van een nieuwe service-principal kunt u onder andere pull-, push- en pull- en eigenaartoegang verlenen.
In het volgende script wordt de opdracht az role assignment create gebruikt om pull-machtigingen te verlenen aan een service-principal die u in de SERVICE_PRINCIPAL_ID
variabele opgeeft. Pas de --role
waarde aan als u een ander toegangsniveau wilt verlenen.
#!/bin/bash
# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the service principal's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_ID=$servicePrincipal
# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
# Assign the desired role to the service principal. Modify the '--role' argument
# value as desired:
# acrpull: pull only
# acrpush: push and pull
# owner: push, pull, and assign roles
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role acrpull
Als u het wachtwoord van de service-principal niet opslaat of onthoudt, kunt u het opnieuw instellen met de opdracht az ad sp credential reset :
az ad sp credential reset --name http://<service-principal-name> --query password --output tsv
Met deze opdracht wordt een nieuw, geldig wachtwoord voor uw service-principal geretourneerd.
Een pull-geheim voor afbeeldingen maken
Kubernetes maakt gebruik van 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 Azure-containerregister wilt maken, geeft u de service-principal-id, het wachtwoord en de register-URL op.
Maak een pull-geheim voor afbeeldingen met de volgende kubectl
opdracht:
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<container-registry-name>.azurecr.io \
--docker-username=<service-principal-ID> \
--docker-password=<service-principal-password>
waarbij geldt:
Weergegeven als | Beschrijving |
---|---|
secret-name |
Naam van het pull-geheim van de installatiekopie, bijvoorbeeld acr-secret |
namespace |
Kubernetes-naamruimte om het geheim in te zetten Alleen nodig als u het geheim in een andere naamruimte wilt plaatsen dan de standaardnaamruimte |
container-registry-name |
Naam van uw Azure-containerregister, bijvoorbeeld myregistry Dit --docker-server is de volledig gekwalificeerde naam van de aanmeldingsserver van het register |
service-principal-ID |
Id van de service-principal die door Kubernetes wordt gebruikt voor toegang tot uw register |
service-principal-password |
Wachtwoord voor service-principal |
Het pull-geheim van de installatiekopie gebruiken
Zodra u het pull-geheim voor de installatiekopie hebt gemaakt, kunt u het gebruiken om Kubernetes-pods en -implementaties te maken. Geef de naam op van het geheim onder imagePullSecrets
in het implementatiebestand. Voorbeeld:
apiVersion: v1
kind: Pod
metadata:
name: my-awesome-app-pod
namespace: awesomeapps
spec:
containers:
- name: main-app-container
image: myregistry.azurecr.io/my-awesome-app:v1
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: acr-secret
In het voorgaande voorbeeld my-awesome-app:v1
is dit de naam van de installatiekopie die moet worden opgehaald uit het Azure-containerregister en acr-secret
is dit de naam van het pull-geheim dat u hebt gemaakt voor toegang tot het register. Wanneer u de pod implementeert, haalt Kubernetes automatisch de installatiekopie op uit het register als deze nog niet aanwezig is op het cluster.
Volgende stappen
- Zie Azure Container Registry-verificatie met service-principals en Azure Container Registry voor meer informatie over het werken met service-principals
- Meer informatie over het ophalen van installatiekopieën in de Kubernetes-documentatie