المصادقة باستخدام Azure Container Registry (ACR) من خدمة Azure Kubernetes (AKS)

عند استخدام Azure Container Registry (ACR) مع Azure Kubernetes Service (AKS)، تحتاج إلى إنشاء آلية مصادقة. يمكنك تكوين الأذونات المطلوبة بين ACR وAKS باستخدام مدخل Azure CLI أو Azure PowerShell أو Azure. توفر هذه المقالة أمثلة لتكوين المصادقة بين خدمات Azure هذه باستخدام Azure CLI أو Azure PowerShell.

يقوم تكامل AKS إلى ACR بتعيين دور AcrPull إلى هوية Microsoft Entra ID المدارة المقترنة بتجمع الوكلاء في مجموعة AKS الخاصة بك. لمزيد من المعلومات حول الهويات المدارة ل AKS، راجع ملخص الهويات المدارة.

هام

هناك مشكلة في زمن الانتقال مع مجموعات Microsoft Entra عند إرفاق ACR. إذا تم منح دور AcrPull إلى مجموعة Microsoft Entra وأضيفت هوية kubelet إلى المجموعة لإكمال تكوين RBAC، فقد يكون هناك تأخير قبل أن تصبح مجموعة RBAC سارية المفعول. إذا كنت تقوم بتشغيل التشغيل التلقائي الذي يتطلب اكتمال تكوين RBAC، نوصي باستخدام إحضار هوية kubelet الخاصة بك كحل بديل. يمكنك إنشاء هوية معينة من قبل المستخدم مسبقا، وإضافتها إلى مجموعة Microsoft Entra، ثم استخدام الهوية كهوية kubelet لإنشاء نظام مجموعة AKS. يضمن هذا إضافة الهوية إلى مجموعة Microsoft Entra قبل إنشاء رمز مميز بواسطة kubelet، ما يتجنب مشكلة زمن الانتقال.

إشعار

تغطي هذه المقالة المصادقة التلقائية بين AKS وACR. إذا كنت بحاجة إلى سحب صورة من سجل خارجي خاص، استخدم سر سحب صورة.

قبل البدء

  • تحتاج إلى دور المالك أو مسؤول حساب Azure أو مسؤول Azure المشارك في اشتراك Azure.
  • إذا كنت تستخدم Azure CLI، تتطلب هذه المقالة تشغيل الإصدار 2.7.0 من Azure CLI أو أحدث. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.
  • إذا كنت تستخدم Azure PowerShell، تتطلب هذه المقالة تشغيل Azure PowerShell الإصدار 5.9.0 أو أحدث. قم بتشغيل Get-InstalledModule -Name Az للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت وحدة Azure PowerShell.
  • يمكن العثور على أمثلة وبناء جملة لاستخدام Terraform لتكوين ACR في مرجع Terraform.

إنشاء ACR جديد

  • إذا لم يكن لديك ACR بالفعل، فبادر بإنشاء واحد باستخدام az acr create الأمر . يعين MYACR المثال التالي المتغير إلى اسم ACR، mycontainerregistry، ويستخدم المتغير لإنشاء السجل. يجب أن يكون اسم ACR الخاص بك فريدا عالميا وأن يستخدم أحرفا صغيرة فقط.

    MYACR=mycontainerregistry
    
    az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
    

إنشاء نظام مجموعة AKS جديد والتكامل مع ACR موجود

  • إنشاء نظام مجموعة AKS جديد والتكامل مع ACR موجود باستخدام az aks create الأمر مع المعلمة--attach-acr. يسمح لك هذا الأمر بتخويل ACR موجود في اشتراكك وتكوين دور AcrPull المناسب للهوية المدارة.

    MYACR=mycontainerregistry
    
    az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
    

    قد يستغرق هذا الأمر عدة دقائق حتى يكتمل.

    إشعار

    إذا كنت تستخدم ACR موجودا في اشتراك مختلف عن مجموعة AKS الخاصة بك أو كنت تفضل استخدام معرف مورد ACR بدلا من اسم ACR، يمكنك القيام بذلك باستخدام بناء الجملة التالي:

    az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
    

تكوين تكامل ACR لنظام مجموعة AKS موجود

إرفاق ACR بمجموعة AKS موجودة

  • دمج ACR موجود مع نظام مجموعة AKS موجود باستخدام az aks update الأمر مع المعلمة--attach-acr وقيمة صالحة ل acr-name أو acr-resource-id.

    # Attach using acr-name
    az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-name>
    
    # Attach using acr-resource-id
    az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-resource-id>
    

    إشعار

    az aks update --attach-acr يستخدم الأمر أذونات المستخدم الذي يقوم بتشغيل الأمر لإنشاء تعيين دور ACR. يتم تعيين هذا الدور إلى الهوية المدارة kubelet . لمزيد من المعلومات حول الهويات المدارة ل AKS، راجع ملخص الهويات المدارة.

فصل ACR من نظام مجموعة AKS

  • قم بإزالة التكامل بين ACR ومجموعة AKS باستخدام az aks update الأمر مع المعلمة--detach-acr وقيمة صالحة ل acr-name أو acr-resource-id.

    # Detach using acr-name
    az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-name>
    
    # Detach using acr-resource-id
    az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-resource-id>
    

العمل مع ACR وAKS

استيراد صورة إلى ACR

  • استيراد صورة من Docker Hub إلى ACR الخاص بك باستخدام az acr import الأمر .

    az acr import --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
    

نشر صورة العينة من ACR إلى AKS

  1. تأكد من أن لديك بيانات اعتماد AKS المناسبة az aks get-credentials باستخدام الأمر .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. أنشئ ملفا يسمى acr-nginx.yaml باستخدام نموذج YAML التالي واستبدل acr-name باسم ACR الخاص بك.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx0-deployment
      labels:
        app: nginx0-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx0
      template:
        metadata:
          labels:
            app: nginx0
        spec:
          containers:
          - name: nginx
            image: <acr-name>.azurecr.io/nginx:v1
            ports:
            - containerPort: 80
    
  3. قم بتشغيل النشر في نظام مجموعة AKS باستخدام kubectl apply الأمر .

    kubectl apply -f acr-nginx.yaml
    
  4. مراقبة التوزيع باستخدام kubectl get pods الأمر .

    kubectl get pods
    

    يجب أن يظهر الإخراج جرابين قيد التشغيل، كما هو موضح في إخراج المثال التالي:

    NAME                                 READY   STATUS    RESTARTS   AGE
    nginx0-deployment-669dfc4d4b-x74kr   1/1     Running   0          20s
    nginx0-deployment-669dfc4d4b-xdpd6   1/1     Running   0          20s
    

استكشاف الأخطاء وإصلاحها

  • تحقق من أن السجل يمكن الوصول إليه من نظام مجموعة AKS باستخدام az aks check-acr الأمر .
  • تعرف على المزيد حول مراقبة ACR.
  • تعرف على المزيد حول صحة ACR.