اسحب الصور من سجل حاوية 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 الصورة تلقائيًا من السجل الخاص بك إذا لم تكن موجودة بالفعل في المجموعة.
الخطوات التالية
- لمزيد من المعلومات حول العمل مع مبادئ الخدمة وسجل حاوية Azure؛ راجع مصادقة سجل حاوية Azure مع مبادئ الخدمة
- تعرف على المزيد حول أسرار سحب الصور في وثائق Kubernetes