التشغيل السريع: نشر نظام مجموعة AKS مع عقد عامل Intel SGX للحوسبة السرية باستخدام Azure CLI

في هذه البداية السريعة، ستستخدم Azure CLI لنشر مجموعة خدمة Azure Kubernetes (AKS) مع عقد VM محملة بجيوب (DCsv2/DCSv3). ثم ستقوم بتشغيل تطبيق مرحبًا بالعالم البسيط في الجيب. كما يمكنك أيضًا توفير نظام مجموعة وإضافة عُقد الحوسبة السرية من مدخل Azure ولكن يُركز التشغيل السريع هذا على Azure CLI.

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

تتضمن ميزات عُقد الحوسبة السرية ما يلي:

  • عُقد عامل Linux تدعم حاويات Linux.
  • الجيل 2 من الجهاز الظاهري (VM) مع عُقد Ubuntu 18.04 VM.
  • وحدة المعالجة المركزية Intel SGX قادرة على المساعدة في تشغيل حاوياتك في جيب محمي بالسرية يستفيد من ذاكرة ذاكرة التخزين المؤقت للصفحة المشفرة (EPC). لمزيد من المعلومات، راجع الأسئلة المتداولة للحوسبة السرية في Azure.
  • برنامج تشغيل DCAP SGX Intel مثبت مسبقًا على عُقد الحوسبة السرية. لمزيد من المعلومات، راجع الأسئلة المتداولة للحوسبة السرية في Azure.

إشعار

تستخدم أجهزة DCsv2/DCsv3 الظاهرية أجهزة متخصصة توفر منطقة الموضوع. لمزيد من المعلومات، راجع وحدات SKU المتوفرة والمناطق المدعومة.

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

يتطلب هذا التشغيل السريع:

  • ما لا يقل عن ثمانية مراكز DCsv2/DCSv3/DCdsv3 متوفرة في اشتراكك.

    بشكل افتراضي، لا توجد حصة نسبية معينة مسبقا لأحجام Intel SGX VM لاشتراكات Azure. يجب اتباع هذه الإرشادات لطلب الحصة النسبية الأساسية للجهاز الظاهري لاشتراكاتك.

إنشاء نظام مجموعة AKS مع عقد الحوسبة السرية المدركة للجيب والوظيفة الإضافية Intel SGX

استخدم الإرشادات التالية لإنشاء مجموعة AKS مع تمكين الوظيفة الإضافية Intel SGX، وإضافة تجمع عقدة إلى المجموعة، والتحقق مما قمت بإنشائه باستخدام تطبيق hello world enclave.

إنشاء نظام مجموعة AKS مع تجمع عقدة نظام وADON Intel SGX

إشعار

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

يعرض Intel SGX AKS Addon "confcom" برامج تشغيل جهاز Intel SGX لحاوياتك لتجنب التغييرات المضافة إلى pod yaml.

أولا، قم بإنشاء مجموعة موارد للمجموعة باستخدام الأمر az group create . ينشئ المثال التالي مجموعة موارد تسمى myResourceGroup في منطقة eastus2 :

az group create --name myResourceGroup --location eastus2

الآن قم بإنشاء مجموعة AKS، مع تمكين الوظيفة الإضافية للحوسبة السرية، باستخدام الأمر az aks create :

az aks create -g myResourceGroup --name myAKSCluster --generate-ssh-keys --enable-addons confcom

سينشر الأمر أعلاه مجموعة AKS جديدة مع تجمع عقدة النظام لعقدة الحوسبة غير السرية. لا يوصى بعقد Intel SGX للحوسبة السرية لتجمعات عقد النظام.

إضافة تجمع عقدة مستخدم مع قدرات الحوسبة السرية إلى مجموعة AKS

قم بتشغيل الأمر التالي لإضافة تجمع عقدة مستخدم بحجم Standard_DC4s_v3 ثلاث عقد إلى نظام مجموعة AKS. يمكنك اختيار SKU بحجم أكبر آخر من قائمة وحدات SKU والمناطق المعتمدة DCsv2/DCsv3.

az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-vm-size Standard_DC4s_v3 --node-count 2

بعد تشغيل الأمر، يجب أن يكون تجمع عقدة جديد مع DCsv3 مرئيا مع الوظيفة الإضافية للحوسبة السرية DaemonSets (المكون الإضافي لجهاز SGX).

تحقق من تجمع العُقدة والوظيفة الإضافية

احصل على بيانات الاعتماد لنظام مجموعة AKS باستخدام الأمر az aks get-credentials :

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

kubectl get pods استخدم الأمر للتحقق من إنشاء العقد بشكل صحيح وتشغيل DaemonSets المتعلقة ب SGX على تجمعات عقد DCsv2:

kubectl get pods --all-namespaces
kube-system     sgx-device-plugin-xxxx     1/1     Running

إذا كان الإخراج يطابق التعليمات البرمجية السابقة، فإن نظام مجموعة AKS جاهزًا الآن لتشغيل التطبيقات السرية.

يمكنك الانتقال إلى قسم نشر مرحبًا بالعالم من تطبيق جيب معزول في هذا التشغيل السريع لاختبار تطبيق في جيب. أو استخدم الإرشادات التالية لإضافة المزيد من تجمعات العُقد على AKS. (يدعم AKS مزج تجمعات عقدة SGX وتجمعات عقدة غير SGX.)

إضافة تجمع عقدة حوسبة سرية إلى مجموعة AKS موجودة

يفترض هذا المقطع أنك تقوم بتشغيل نظام مجموعة AKS بالفعل، والذي يفي بالمعايير المطلوبة مسبقًا في التشغيل السريع هذا.

تمكين الوظيفة الإضافية AKS للحوسبة السرية على نظام المجموعة الموجود

تشغيل الأمر التالي لتمكين الوظيفة الإضافية للحوسبة السرية:

az aks enable-addons --addons confcom --name MyManagedCluster --resource-group MyResourceGroup

إضافة تجمع عقدة مستخدم DCsv3 إلى نظام المجموعة

إشعار

لاستخدام الحوسبة السرية، يجب أن يكون لديك مجموعة AKS وذلك للحصول على أقل تجمع للعقد القائمة على DCsv2/DCsv3 VM SKU. لمعرفة المزيد حول وحدات SKU للأجهزة الظاهرية DCs-v2/Dcs-v3 للحوسبة السرية، راجع وحدات SKU المتوفرة والمناطق المدعومة.

قم بتشغيل الأمر التالي لإنشاء تجمع عقدة:

az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-count 2 --node-vm-size Standard_DC4s_v3

تحقق من إنشاء تجمع العقدة الجديد باسم confcompool1 :

az aks nodepool list --cluster-name myAKSCluster --resource-group myResourceGroup

تحقق من تشغيل DaemonSets على تجمعات عقدة سرية

تسجيل الدخول إلى نظام مجموعة AKS الموجود لديك لإجراء التحقق التالي:

kubectl get nodes

يجب أن يظهر الإخراج تجمع confcompool1 المضاف حديثا على نظام مجموعة AKS. قد تظهر أيضًا DaemonSets أخرى.

kubectl get pods --all-namespaces
kube-system     sgx-device-plugin-xxxx     1/1     Running

إذا كان الإخراج يطابق التعليمات البرمجية السابقة، فإن نظام مجموعة AKS جاهزًا الآن لتشغيل التطبيقات السرية.

نشر مرحبًا بالعالم من تطبيق جيب معزول

أنت الآن جاهز لتوزيع تطبيق اختبار.

أنشئ ملفا باسم hello-world-enclave.yaml والصقه في بيان YAML التالي. يمكنك العثور على نموذج التعليمات البرمجية للتطبيق هذا في مشروع Open Enclave. يفترض هذا النشر أنك قمت بنشر الوظيفة الإضافية confcom .

إشعار

يسحب المثال التالي صورة حاوية عامة من Docker Hub. نوصي بتعيين سحب سري للإثبات باستخدام حساب Docker Hub بدلاً من إجراء طلب سحب مجهول. لتحسين الموثوقية عند العمل مع المحتوى العامّ، قم باستيراد الصورة وإدارتها في سجل حاويات Azure خاص. تعرف على المزيد حول العمل مع الصور العامة.

apiVersion: batch/v1
kind: Job
metadata:
  name: oe-helloworld
  namespace: default
spec:
  template:
    metadata:
      labels:
        app: oe-helloworld
    spec:
      containers:
      - name: oe-helloworld
        image: mcr.microsoft.com/acc/samples/oe-helloworld:latest
        resources:
          limits:
            sgx.intel.com/epc: "10Mi"
          requests:
            sgx.intel.com/epc: "10Mi"
        volumeMounts:
        - name: var-run-aesmd
          mountPath: /var/run/aesmd
      restartPolicy: "Never"
      volumes:
      - name: var-run-aesmd
        hostPath:
          path: /var/run/aesmd
  backoffLimit: 0

بدلا من ذلك يمكنك أيضا القيام بنشر تحديد تجمع عقدة لنشر الحاوية كما هو موضح أدناه

apiVersion: batch/v1
kind: Job
metadata:
  name: oe-helloworld
  namespace: default
spec:
  template:
    metadata:
      labels:
        app: oe-helloworld
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: agentpool
                operator: In
                values:
                - acc # this is the name of your confidential computing nodel pool
                - acc_second # this is the name of your confidential computing nodel pool
      containers:
      - name: oe-helloworld
        image: mcr.microsoft.com/acc/samples/oe-helloworld:latest
        resources:
          limits:
            sgx.intel.com/epc: "10Mi"
          requests:
            sgx.intel.com/epc: "10Mi"
        volumeMounts:
        - name: var-run-aesmd
          mountPath: /var/run/aesmd
      restartPolicy: "Never"
      volumes:
      - name: var-run-aesmd
        hostPath:
          path: /var/run/aesmd
  backoffLimit: 0

الآن استخدم kubectl apply الأمر لإنشاء عينة مهمة سيتم فتحها في جيب آمن، كما هو موضح في إخراج المثال التالي:

kubectl apply -f hello-world-enclave.yaml
job "oe-helloworld" created

يمكنك تأكيد إنشاء حمل العمل لبيئة تنفيذ موثوق بها (جيب) بنجاح بواسطة تشغيل الأوامر التالية:

kubectl get jobs -l app=oe-helloworld
NAME       COMPLETIONS   DURATION   AGE
oe-helloworld   1/1           1s         23s
kubectl get pods -l app=oe-helloworld
NAME             READY   STATUS      RESTARTS   AGE
oe-helloworld-rchvg   0/1     Completed   0          25s
kubectl logs -l app=oe-helloworld
Hello world from the enclave
Enclave called into host to print: Hello World!

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

لإزالة تجمع عقدة الحوسبة السرية التي قمت بإنشائها في التشغيل السريع هذا، استخدم الأمر التالي:

az aks nodepool delete --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup

لحذف نظام المجموعة AKS استخدم الأمر التالي:

az aks delete --resource-group myResourceGroup --cluster-name myAKSCluster

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

  • قم بتشغيل Python أو Node أو تطبيقات أخرى من خلال حاويات سرية باستخدام برنامج تضمين ISV/OSS SGX. راجع عينات الحاوية السرية في GitHub.

  • تشغيل التطبيقات المدركة للجيب باستخدام عينات حاوية Azure المدركة للجيب في GitHub.