استخدام هوية مدارة معينة من النظام في Azure Kubernetes Service (AKS)

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

المتطلبات المسبقه

  • مجموعة موارد Azure موجودة. إذا لم يكن لديك واحد، يمكنك إنشاء واحد باستخدام az group create الأمر.

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • تم تثبيت Azure CLI الإصدار 2.23.0 أو أحدث. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.
  • لتحديث عنقود موجود لاستخدام هوية مدارة معينة من النظام، تحتاج إلى Azure CLI الإصدار 2.49.0 أو أحدث مثبتا.
  • تم تثبيت Terraform محليا. للحصول على تعليمات التثبيت، راجع تثبيت Terraform.

القيود

  • بمجرد إنشاء عنقود بهوية مدارة، لا يمكنك العودة لاستخدام مدير الخدمة.
  • لا يتم دعم نقل نظام مجموعة مدارة ممكنة للهوية أو ترحيلها إلى مستأجر مختلف.
  • إذا كان لدى العنقود هوية مدارة بواسطة الوحدات (aad-pod-identity) مفعلة Microsoft Entra، تقوم وحدات الهوية (NMI) Node-Managed بتعديل جداول الهوية (NMI) للعقد لاعتراض المكالمات إلى نقطة نهاية بيانات النسخة الوصفية (IMDS) Azure. يعني هذا التكوين أن أي طلب يتم إجراؤه على نقطة نهاية IMDS يتم اعتراضه بواسطة NMI، حتى إذا لم يستخدم aad-pod-identityجراب معين .
    • يمكنك تكوين تعريف المورد المخصص ل AzurePodIdentityException (CRD) لتحديد أن الطلبات إلى نقطة نهاية IMDS التي تنشأ من تسميات مطابقة البودات المحددة في CRD يجب أن تكون بروكسي دون أي معالجة في NMI. استبعاد pods النظام مع التسمية kubernetes.azure.com/managedby: aks في مساحة اسم نظام kube عن aad-pod-identity طريق تكوين CRD AzurePodIdentityException. لمزيد من المعلومات، انظر Use Microsoft Entra pod-managed identities in Azure Kubernetes Service (AKS).
    • لتكوين استثناء، قم بتثبيت YAML استثناء ميكروفون.
  • لا تدعم AKS استخدام هوية مدارة معينة من قبل النظام عند استخدام منطقة DNS خاصة مخصصة.

اعتبارات تحديث العنقود

عند تحديث تجمع، ضع في اعتبارك المعلومات التالية:

  • يعمل التحديث فقط إذا كان هناك تحديث VHD للاستهلاك. إذا كنت تقوم بتشغيل أحدث VHD، فستحتاج إلى الانتظار حتى يتوفر VHD التالي من أجل إجراء التحديث.
  • يضمن واجهة Azure CLI ضبط صلاحيات الإضافة بشكل صحيح بعد الترحيل. إذا لم تكن تستخدم واجهة زر Azure لتنفيذ عملية الترحيل، عليك التعامل مع إذن هوية الإضافة بنفسك. على سبيل المثال باستخدام قالب Azure Resource Manager (ARM)، انظر تعيين أدوار Azure باستخدام قوالب ARM.
  • إذا كان عنقودك يستخدم --attach-acr لسحب الصور من Azure Container Registry (ACR)، تحتاج إلى تشغيل أمر az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> بعد تحديث العنقود للسماح للكوبليت الجديد المستخدم للهوية المدارة بالحصول على إذن السحب من ACR. وإلا، فلن تتمكن من السحب من ACR بعد التحديث.

تمكين هوية مدارة معينة من قبل النظام على نظام مجموعة AKS جديد

يتم تمكين هوية مدارة معينة من قبل النظام بشكل افتراضي عند إنشاء نظام مجموعة AKS جديد.

إنشاء نظام مجموعة AKS باستخدام الأمر az aks create.

az aks create \
    --resource-group <resource-group-name> \
    --name <aks-cluster-name> \
    --generate-ssh-keys

تحديث مجموعة موجودة لاستخدام هوية مدارة معينة من النظام

قم بتحديث نظام مجموعة AKS موجود من كيان خدمة إلى هوية مدارة معينة من قبل النظام باستخدام az aks update الأمر الذي يحتوي على المعلمة --enable-managed-identity .

az aks update \
    --resource-group <resource-group-name> \
    --name <aks-cluster-name> \
    --enable-managed-identity

بعد تحديث العنقود ليستخدم هوية مدارة معينة من النظام بدلا من مبدأ الخدمة، تستخدم طائرة التحكم والوحدات الهوية المدارة المعينة من النظام للتفويض عند الوصول إلى خدمات أخرى في Azure. يستمر Kubelet في استخدام كيان الخدمة حتى تقوم أيضا بترقية تجمع الوكلاء الخاص بك. يمكنك استخدام الأمر على az aks nodepool upgrade --resource-group <resource-group-name> --cluster-name <aks-cluster-name> --name <node-pool-name> --node-image-only العقد للتحديث إلى هوية مدارة. تتسبب ترقية تجمع العقدة في تعطل نظام مجموعة AKS الخاص بك حيث يتم تطويق العقد في تجمعات العقد واستنزافها وإعادة تصويرها.

الحصول على المعرف الأساسي لهوية مدارة معينة من قبل النظام

احصل على المعرف الأساسي للهوية المدارة المعينة من قبل النظام باستخدام az aks show الأمر.

CLIENT_ID=$(az aks show \
    --name <aks-cluster-name> \
    --resource-group <resource-group-name> \
    --query identity.principalId \
    --output tsv)

إضافة تعيين دور لهوية مدارة يعينها النظام

ملحوظة

بالنسبة لشبكة افتراضية (VNet)، أو قرص Azure مرفق، أو عنوان IP ثابت، أو جدول توجيه خارج مجموعة موارد عقدة العمال الافتراضية، تحتاج إلى تعيين الدور Network Contributor في مجموعة الموارد المخصصة.

تعيين دور Azure RBAC للهوية المدارة المعينة من قبل النظام باستخدام أمر az role assignment create. يعين المثال التالي دور مساهم الشبكة للهوية المدارة المعينة من قبل النظام. يتم تحديد نطاق تعيين الدور إلى مجموعة الموارد التي تحتوي على الشبكة الظاهرية.

az role assignment create \
    --assignee <client-id> \
    --role "Network Contributor" \
    --scope <custom-resource-group-id>

ملحوظة

قد يستغرق نشر الأذونات الممنوحة للهوية المدارة لنظام المجموعة الخاصة بك ما يصل إلى 60 دقيقة.

إنشاء ملف تكوين Terraform

ملفات تكوين تيرافورم تحدد البنية التحتية التي ينشئها ويديرها تيرافورم.

  1. أنشئ ملفا مسمى main.tf وأضف الكود التالي لتعريف نسخة Terraform وتحديد مزود Azure:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. أضف الكود التالي إلى main.tf لإنشاء مجموعة موارد Azure. لا تتردد في تغيير اسم وموقع مجموعة الموارد حسب الحاجة.

    resource "azurerm_resource_group" "example" {
     name     = "aks-rg"
     location = "East US"
    }
    

إنشاء عنقود AKS بهوية مدارة مخصصة للنظام باستخدام Terraform

أضف الكود التالي لإنشاء main.tf عنقود AKS بهوية مدارة معينة من النظام:

resource "azurerm_kubernetes_cluster" "system_assigned" {
 name                = "aks-system"
 location            = azurerm_resource_group.example.location
 resource_group_name = azurerm_resource_group.example.name
 dns_prefix          = "akssystem"
 identity {
   type = "SystemAssigned"
 }
 default_node_pool {
   name       = "system"
   node_count = 1
   vm_size    = "Standard_DS2_v2"
 }
}

إضافة تعيين دور لهوية مدارة معينة من النظام باستخدام Terraform

أضف الكود التالي إلى main.tf لإنشاء تعيين دور للهوية المدارة المعينة من قبل النظام. هذا المثال يخصص دور المساهم في الشبكة إلى الهوية المدارة المعينة من قبل النظام. يتم تحديد نطاق تعيين الدور إلى مجموعة الموارد التي تحتوي على الشبكة الظاهرية.

resource "azurerm_role_assignment" "system_assigned_network_contributor" {
 scope                = azurerm_resource_group.example.id
 role_definition_name = "Network Contributor"
 principal_id         = azurerm_kubernetes_cluster.system_assigned.identity[0].principal_id
}

تهيئة Terraform

قم بتهيئة Terraform في الدليل الذي يحتوي على ملفك main.tf باستخدام الأمر.terraform init يقوم هذا الأمر بتنزيل مزود Azure المطلوب لإدارة موارد Azure باستخدام Terraform.

terraform init

إنشاء خطة تنفيذ Terraform

إنشاء خطة تنفيذ Terraform باستخدام terraform plan الأمر . هذا الأمر يوضح لك الموارد التي سيقوم Terraform بإنشائها أو تعديلها في اشتراكك في Azure.

terraform plan

تطبيق تكوين Terraform

بعد مراجعة وتأكيد خطة التنفيذ، طبق تكوين Terraform باستخدام terraform apply الأمر. يقوم هذا الأمر بإنشاء أو تعديل الموارد المعرفة في ملفك main.tf ضمن اشتراك Azure الخاص بك.

terraform apply

تحقق من نشر Terraform

بعد تطبيق تكوين Terraform، يمكنك التحقق من النشر باستخدام az aks show الأمر مع --query المعامل لتصفية المخرجات وعرض معلومات الهوية. على سبيل المثال:

az aks show \
 --name <cluster-name> \
 --resource-group <resource-group> \
 --query identity.type \
 --output tsv

لمعرفة المزيد عن الهويات المدارة في AKS، راجع المقالات التالية: