Rendszerképek lekérése azure-tárolóregisztrációs adatbázisból Kubernetes-fürtbe lekéréses titkos kód használatával

Az Azure-tárolóregisztrációs adatbázis bármilyen Kubernetes-fürttel használható tárolórendszerképek forrásaként, beleértve a "helyi" Kubernetes-fürtöket, például a minikube-t és a fajtát. Ez a cikk bemutatja, hogyan hozhat létre Kubernetes-lekéréses titkos kódokat egy Azure-tárolóregisztrációs adatbázis hitelesítő adataival. Ezután a titkos kód használatával lekérhet képeket egy Azure-tárolóregisztrációs adatbázisból egy pod-üzembe helyezés során.

Ez a példa egy lekéréses titkos kulcsot hoz létre a Microsoft Entra szolgáltatásnév hitelesítő adataival. A szolgáltatási főnév lekérési engedélyeit igény szerint korlátozhatja a regisztrációs adatbázis adott adattáraira a Microsoft Entra-alapú adattárengedélyek használatával.

A lekéréses titkos kulcsokat más Azure-tárolóregisztrációs adatbázis hitelesítő adataival is konfigurálhatja, például nem Microsoft Entra-jogkivonat-alapú adattárengedélyek használatával.

Feljegyzés

Bár a lekéréses titkos kódokat gyakran használják, további felügyeleti többletterhelést jelentenek. Ha az Azure Kubernetes Service-t használja, más lehetőségeket is ajánlunk, például a fürt felügyelt identitása vagy szolgáltatási főazonosítója használatával biztonságosan lehívhatja a rendszerképet, anélkül, hogy minden podnál további imagePullSecrets beállítást kellene megadni.

Előfeltételek

Ez a cikk feltételezi, hogy már létrehozott egy privát Azure-tárolóregisztrációs adatbázist. Emellett rendelkeznie kell egy már futó Kubernetes-fürttel, amely elérhető a kubectl parancssori eszközön keresztül.

Szolgáltatásazonosító létrehozása

A tárolóregisztrációs adatbázishoz való hozzáféréssel rendelkező egyszerű szolgáltatás létrehozásához futtassa a következő szkriptet az Azure Cloud Shellben vagy az Azure CLI helyi telepítésében. A szkript a Bash-rendszerhéjhoz van formázva.

A szkript futtatása előtt frissítse a változót ACR_NAME a tárolóregisztrációs adatbázis nevével. Az SERVICE_PRINCIPAL_NAME értéknek egyedinek kell lennie a Microsoft Entra bérlőkörnyezeten belül. Ha "'http://acr-service-principal' already exists." hibaüzenetet kap, adjon meg egy másik nevet a szolgáltatásnévnek.

Tetszés szerint módosíthatja az --role értékét az az ad sp create-for-rbac parancsban, hogy különböző engedélyeket adjon meg. A szerepkörök teljes listájáért tekintse meg az Azure Container Registry Entra engedélyeinek és szerepköreinek áttekintését.

A szkript futtatása után jegyezze fel a szolgáltatási főnév azonosítóját és jelszavát. Miután megkapta a hitelesítő adatait, konfigurálhatja az alkalmazásokat és szolgáltatásokat a tárolóregisztrációs adatbázis szolgáltatásnévként való hitelesítésére.

#!/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"

Meglévő szolgáltatási főazonosító használata

Ahhoz, hogy hozzáférést adjon a beállításjegyzékhez egy meglévő szolgáltatási főazonosítónak, új szerepkört kell hozzárendelnie a szolgáltatási főazonosítóhoz. Az új szolgáltatásmegbízó létrehozásához hasonlóan szerepkör-hozzárendeléseket is végre kell hajtania, hogy engedélyeket adjon a szolgáltatásmegbízónak. Tekintse meg az Azure Container Registry Entra engedélyeinek és szerepköreinek áttekintését.

Az alábbi szkript az az role assignment create paranccsal biztosít lekérési engedélyeket a változóban SERVICE_PRINCIPAL_ID megadott szolgáltatásnévnek. Módosítsa az --role értéket, ha más hozzáférési szintet szeretne biztosítani.

#!/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

Ha nem menti vagy nem emlékszik a szolgáltatásnév jelszavára, az az ad sp hitelesítőadat-visszaállítási paranccsal alaphelyzetbe állíthatja:

az ad sp credential reset  --name http://<service-principal-name> --query password --output tsv

Ez a parancs egy új, érvényes jelszót ad vissza a szolgáltatási főszereplőhöz.

Képhúzási titok létrehozása

A Kubernetes egy kép lekéréses titkos kódját használja a beállításjegyzékben való hitelesítéshez szükséges információk tárolására. Egy Azure-tárolóregisztrációs adatbázis lekéréses titkos kódjának létrehozásához meg kell adnia a szolgáltatásnév azonosítóját, jelszavát és a beállításjegyzék URL-címét.

Hozzon létre egy lekéréses titkos képet a következő kubectl paranccsal:

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>

ahol:

Érték Leírás
secret-name A kép lekérési titkos kódjának neve, például acr-secret
namespace Kubernetes-névtér a titkos kód beillesztéséhez
Csak akkor szükséges, ha a titkos kulcsot az alapértelmezett névtéren kívül más névtérbe szeretné helyezni
container-registry-name Az Azure Container Registry neve, például myregistry

A --docker-server a regisztrációs bejelentkezési kiszolgáló teljes neve
service-principal-ID A Kubernetes által a regiszter eléréséhez használt szolgáltatási azonosítója
service-principal-password Szolgáltatásfelelős jelszó

A kép lekérési titkos kódjának használata

Miután létrehozta a rendszerkép lehívási jelszavát, Kubernetes-podokat és üzembe helyezéseket hozhat létre vele. Adja meg a titok nevét az üzembehelyezési fájl imagePullSecrets alatt. Példa:

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

Az előző példában my-awesome-app:v1 az Azure-tárolóregisztrációs adatbázisból lekérni kívánt rendszerkép neve, a acr-secret beállításjegyzék eléréséhez létrehozott lekérési titkos kód neve. A pod üzembe helyezésekor a Kubernetes automatikusan lekéri a képfájlt a regisztrációs tárolóból, ha az már nincs jelen a klaszteren.

Következő lépések