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
- 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