توزيع إلى مثيلات Azure Container من Azure Container Registry باستخدام الهوية المُدارة

Azure Container Registry (ACR) عبارة عن خدمة تسجيل حاوية مُدارة تستند إلى Azure وتُستخدم لتخزين صور حاوية Docker الخاصة. توضح هذه المقالة كيفية سحب صور الحاوية المخزنة في Azure Container Registry عند التوزيع إلى مجموعات الحاوية باستخدام Azure Container Instances. تتمثل إحدى طرق تكوين الوصول إلى السجل في إنشاء هوية مدارة من Microsoft Entra.

عند تقييد الوصول إلى Azure Container Registry (ACR) باستخدام نقطة نهاية خاصة، فإن استخدام هوية مدارة يسمح لمثيلات حاوية Azure المنشورة في شبكة ظاهرية بالوصول إلى سجل الحاوية من خلال نقطة النهاية الخاصة.

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

Azure Container Registry: أنت بحاجة إلى سجل حاوية SKU Azure متميز يحتوي على صورة واحدة على الأقل. إذا كنت تريد إنشاء سجل، فراجع إنشاء سجل حاوية باستخدام Azure CLI. تأكد من التعرف على id وloginServer الخاصين بالسجل

Azure CLI: تستخدم أمثلة سطر الأوامر في هذه المقالة Azure CLI ويتم تنسيقها من أجل Bash shell. يمكنك تثبيت Azure CLI محلياً أو باستخدام Azure Cloud Shell.

القيود

  • لا تدعم حاويات Windows سحب الصور المدارة التي تم مصادقة الهوية المعينة من قبل النظام باستخدام ACR، المعينة من قبل المستخدم فقط.

تكوين مصادقة السجل

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

إنشاء هوية

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

az identity create --resource-group myResourceGroup --name myACRId

لتكوين الهوية في الخطوات التالية، استخدم الأمر az هوية show لتخزين معرف مورد الهوية والمعرف الكياني للخدمة في المتغيرات.

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

# Get resource ID of the user-assigned identity
USERID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)
# Get service principal ID of the user-assigned identity
SPID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)

تحتاج إلى معرف مورد الهوية لتسجيل الدخول إلى CLI من جهازك الظاهري. لإظهار القيمة:

echo $USERID

معرّف المورد بالشكل:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId

ستحتاج أيضاً إلى معرف الخدمة الرئيسي لمنح وصول الهوية المُدار إلى سجل الحاوية الخاص بك. لإظهار القيمة:

echo $SPID

المعرّف الرئيسي للخدمة هو بالشكل:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx

امنح الهوية دوراً معيناً

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

az role assignment create --assignee $SPID --scope <registry-id> --role acrpull

قم بتوزيع باستخدام قالب Azure Resource Manager (ARM)

ابدأ بنسخ JSON التالي في ملف جديد باسم azuredeploy.json. في Azure Cloud Shell، يمكنك استخدامVisual Studio Code لإنشاء الملف في دليل العمل الخاص بك:

code azuredeploy.json

يمكنك تحديد خصائص Azure Container Registry في قالب ARM بتضمين الخاصية imageRegistryCredentials في تعريف مجموعة الحاوية. على سبيل المثال، يمكنك تحديد بيانات اعتماد التسجيل مباشرة:

إشعار

هذا ليس قالب ARM شاملاً، ولكنه مثال على الشكل الذي سيبدو عليه قسم resources من القالب الكامل.

{
    "type": "Microsoft.ContainerInstance/containerGroups",
    "apiVersion": "2021-09-01",
    "name": "myContainerGroup",
    "location": "norwayeast",
    "identity": {
      "type": "UserAssigned",
      "userAssignedIdentities": {
        "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId": {}
        }
    },
    "properties": {
      "containers": [
        {
          "name": "mycontainer",
          "properties": {
            "image": "myacr.azurecr.io/hello-world:latest",
            "ports": [
              {
                "port": 80,
                "protocol": "TCP"
              }
            ],
            "resources": {
              "requests": {
                "cpu": 1,
                "memoryInGB": 1
              }
            }
        }
        }
      ],
      "imageRegistryCredentials": [
        {
            "server":"myacr.azurecr.io",
            "identity":"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId"
        }
      ],
      "ipAddress": {
        "ports": [
          {
            "port": 80,
            "protocol": "TCP"
          }
        ],
        "type": "public"
      },
      "osType": "Linux"
    }
  }

نشر القالب

قم بتوزيع قالب Resource Manager الخاص بك باستخدام الأمر التالي:

az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json

قم بتوزيع باستخدام Azure CLI

لتوزيع مجموعة حاويات باستخدام الهوية المُدارة لمصادقة عمليات سحب الصور عبر Azure CLI، استخدم الأمر التالي، مع التأكد من أن <dns-label> فريد بشكل عام:

az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --ports 80 --dns-name-label <dns-label>

النشر في شبكة ظاهرية باستخدام Azure CLI

لنشر مجموعة حاويات إلى شبكة ظاهرية باستخدام الهوية المدارة لمصادقة سحب الصورة من ACR الذي يعمل خلف نقطة نهاية خاصة عبر Azure CLI، استخدم الأمر التالي:

az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --vnet "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/ --subnet mySubnetName

لمزيد من المعلومات حول كيفية النشر إلى شبكة ظاهرية، راجع نشر مثيلات الحاوية في شبكة Azure الظاهرية.

نشر مجموعة متعددة الحاويات في شبكة ظاهرية باستخدام YAML وAzure CLI

لنشر مجموعة متعددة الحاويات إلى شبكة ظاهرية باستخدام الهوية المدارة لمصادقة سحب الصورة من ACR الذي يعمل خلف نقطة نهاية خاصة عبر Azure CLI، يمكنك تحديد تكوين مجموعة الحاوية في ملف YAML. ثم قم بتمرير ملف YAML كمعامل للأمر.

apiVersion: '2021-10-01'
location: eastus
type: Microsoft.ContainerInstance/containerGroups
identity: 
  type: UserAssigned
  userAssignedIdentities: {
    '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId': {}
    }
properties:
  osType: Linux
  imageRegistryCredentials:
  - server: myacr.azurecr.io
    identity: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId'
  subnetIds:
  - id: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNetName/subnets/mySubnetName'
    name: mySubnetName
  containers:
  - name: myContainer-1
    properties:
      resources:
        requests:
          cpu: '.4'
          memoryInGb: '1'
      environmentVariables:
        - name: CONTAINER
          value: 1
      image: 'myacr.azurecr.io/myimage:latest'
  - name: myContainer-2
    properties:
      resources:
        requests:
          cpu: '.4'
          memoryInGb: '1'
      environmentVariables:
        - name: CONTAINER
          value: 2
      image: 'myacr.azurecr.io/myimage:latest'
az container create --name my-containergroup --resource-group myResourceGroup --file my-YAML-file.yaml

لمزيد من المعلومات حول كيفية النشر إلى مجموعة متعددة الحاويات، راجع نشر مجموعة متعددة الحاويات.

تنظيف الموارد

لإزالة جميع الموارد من اشتراك Azure الخاص بك، احذف مجموعة الموارد:

az group delete --name myResourceGroup

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