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 lekéréses titkos kulcsokat más Azure-tárolóregisztrációs adatbázis hitelesítő adataival is konfigurálhatja, például egy tárház hatókörű hozzáférési jogkivonattal.

Megjegyzé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ásának vagy szolgáltatásnevének használatával biztonságosan lekérheti a rendszerképet anélkül, hogy az egyes podokon további imagePullSecrets beállításokat állítanának be.

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 Kubernetes-fürt futtatásával és a parancssori kubectl eszközzel való elérhetőségével is.

Egyszerű szolgáltatás 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őn belül. Ha "'http://acr-service-principal' already exists." hibaüzenetet kap, adjon meg egy másik nevet a szolgáltatásnévnek.

Ha más engedélyeket szeretne adni, tetszés szerint módosíthatja az --role az ad sp create-for-rbac parancs értékét. A szerepkörök teljes listáját az ACR-szerepkörök és -engedélyek című témakörben találja.

A szkript futtatása után jegyezze fel a szolgáltatásné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ásnév használata

Ahhoz, hogy a beállításjegyzék hozzáférést biztosítson egy meglévő szolgáltatásnévhez, új szerepkört kell hozzárendelnie a szolgáltatásnévhez. Az új szolgáltatásnév létrehozásához hasonlóan többek között lekéréses, leküldéses és lekéréses, valamint tulajdonosi hozzáférést is biztosíthat.

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ásnévhez.

Kép lekéréses titkos kód 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 Description
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 beállításjegyzék bejelentkezési kiszolgálójának teljes neve
service-principal-ID A Kubernetes által a beállításjegyzék eléréséhez használt egyszerű szolgáltatás azonosítója
service-principal-password Egyszerű szolgáltatás jelszava

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

Miután létrehozta a rendszerkép lekéréses titkos kódját, kubernetes-podokat és üzembe helyezéseket hozhat létre vele. Adja meg a titkos kód imagePullSecrets nevét az üzembehelyezési fájlban. Például:

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 rendszerképet a beállításjegyzékből, ha az még nem található meg a fürtön.

Következő lépések