Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
- A szolgáltatásnevek és az Azure Container Registry használatával kapcsolatos további információkért lásd: Azure Container Registry-hitelesítés szolgáltatásnevek használatával
- További információ a kubernetes dokumentációjában található képkérési titkos kódokról