اسحب الصور من سجل حاوية Azure إلى مجموعة Kubernetes باستخدام سر سحب

يمكنك استخدام سجل حاوية Azure كمصدر لصور الحاوية مع أي مجموعة Kubernetes، بما في ذلك مجموعات Kubernetes "المحلية" مثل minikube و النوع. توضح هذه المقالة كيفية إنشاء سر سحب Kubernetes باستخدام بيانات اعتماد سجل حاوية Azure. بعد ذلك؛ استخدم السر لسحب الصور من سجل حاوية Azure في عملية نشر جراب.

ينشئ هذا المثال سر سحب باستخدام بيانات اعتماد كيان خدمة Microsoft Entra. يمكنك أيضًا تكوين سر سحب باستخدام بيانات اعتماد تسجيل حاوية Azure الأخرى، مثل رمز الوصول إلى نطاق المستودع.

إشعار

بينما يتم استخدام أسرار السحب بشكل شائع فإنها تجلب المزيد من النفقات الإدارية. إذا كنت تستخدم خدمة Azure Kubernetes فإننا نوصي بخيارات أخرى؛ مثل استخدام الهوية المُدارة للمجموعة أو مدير الخدمة لسحب الصورة بأمان بدون إعداد imagePullSecretsإضافي على كل وحدة .

المتطلبات الأساسية

تفترض هذه المقالة أنك قمت بالفعل بإنشاء سجل حاوية Azure خاص. تحتاج أيضًا إلى تشغيل مجموعة Kubernetes ويمكن الوصول إليها عبر أداة سطر الأوامرkubectl.

إنشاء كيان خدمة

لإنشاء كيان خدمة مع الوصول إلى سجل الحاوية، قم بتشغيل البرنامج النصي التالي في Azure Cloud Shell أو تثبيت محلي لـ Azure CLI. يتم تنسيق البرنامج النصي لـ Bash shell.

قبل تشغيل البرنامج النصي، حدِّث المتغير ACR_NAME باسم سجل حاوية خاص بك. SERVICE_PRINCIPAL_NAME يجب أن تكون القيمة فريدة داخل مستأجر Microsoft Entra. إذا تلقيت خطأ "'http://acr-service-principal' already exists."، فحدد اسماً مختلفاً لكيان الخدمة.

يمكنك تعديل قيمة --role اختيارياً في الأمر az ad sp create-for-rbac إذا كنت تريد منح أذونات مختلفة. للحصول على قائمة كاملة بالأدوار، راجع أدوار وأذونات ACR.

بعد تشغيل البرنامج النصي، لاحظ معرف كيان الخدمة وكلمة المرور. بمجرد حصولك على معلومات تسجيل الدخول الخاصة به، يمكنك تكوين تطبيقاتك وخدماتك للمصادقة على سجل الحاوية الخاص بك باعتباره كيان الخدمة الرئيسي.

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

استخدم كيان خدمة موجود

لمنح التسجيل الوصول إلى كيان خدمة موجود، يجب عليك تعيين دور جديد لكيان الخدمة. كما هو الحال مع إنشاء كيان خدمة جديد، يمكنك منح حق السحب والدفع والسحب ووصول المالك، من بين أمور أخرى.

يستخدم البرنامج النصي التالي الأمر az role assignment create لمنح أذونات pull لكيان الخدمة الذي تحدده في المتغير SERVICE_PRINCIPAL_ID. اضبط --role القيمة إذا كنت ترغب في منح مستوى مختلف من الوصول.

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

إذا لم تحفظ كلمة المرور الرئيسية للخدمة أو تتذكرها فيمكنك إعادة تعيينها باستخدام الأمر إعادة تعيين بيانات اعتماد az ad sp:

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

يقوم هذا الأمر بإرجاع كلمة مرور جديدة وصالحة لمبدأ خدمتك.

إنشاء سر سحب صورة

يستخدم Kubernetes سر سحب الصور لتخزين المعلومات المطلوبة للمصادقة على السجل الخاص بك. لإنشاء سر السحب لسجل حاوية Azure؛ يمكنك توفير المعرف الأساسي للخدمة وكلمة المرور وعنوان URL الخاص بالسجل.

أنشئ سر سحب صورة باستخدام الأمر kubectl التالي:

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>

الموقع:

قيمة ‏‏الوصف
secret-name سحب اسم الصورة، على سبيل المثال، acr-secret
namespace مساحة اسم Kubernetes لوضع السر في
مطلوب فقط إذا كنت تريد وضع السر في مساحة اسم غير مساحة الاسم الافتراضية
container-registry-name اسم سجل حاوية Azure، على سبيل المثال، myregistry

--docker-server هو الاسم المؤهل بالكامل لخادم تسجيل الدخول إلى السجل
service-principal-ID معرّف مدير الخدمة الذي سيستخدمه Kubernetes للوصول إلى السجل الخاص بك
service-principal-password كلمة المرور الأساسية للخدمة

استخدم صورة سحب سرية

بمجرد إنشاء الصورة السرية يمكنك استخدامها لإنشاء وحدات Kubernetes وعمليات النشر. أدخل اسم السر ضمن imagePullSecrets في ملف النشر. على سبيل المثال:

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

في المثال السابق، my-awesome-app:v1هو اسم الصورة المراد سحبها من سجل حاوية Azure وacr-secret هو اسم سر السحب الذي أنشأته للوصول إلى السجل. عند نشر الكبسولة: يسحب Kubernetes الصورة تلقائيًا من السجل الخاص بك إذا لم تكن موجودة بالفعل في المجموعة.

الخطوات التالية