Краткое руководство. Развертывание кластера AKS с конфиденциальными вычислительными узлами агента Intel SGX с помощью Azure CLI

В этом кратком руководстве описывается, как с помощью Azure CLI развернуть кластер Службы Azure Kubernetes (AKS) с узлами виртуальной машины с поддержкой Enclave (DCsv2/DCSv3). При работе с ним вы также запустите простое приложение Hello World в анклаве. Для подготовки кластера и добавления узлов конфиденциальных вычислений можно также использовать портал Azure, но в этом кратком руководстве мы расскажем о работе с Azure CLI.

AKS — это управляемая служба Kubernetes, которая позволяет разработчикам и операторам кластера быстро развертывать кластеры и управлять ими. Дополнительные сведения см. в вводной статье об AKS и обзоре узлов конфиденциальных вычислений AKS.

Узлы конфиденциальных вычислений имеют следующие возможности:

Примечание.

Виртуальные машины DCsv2/DCsv3 используют специализированное оборудование, которое является доступностью региона субъекта. Дополнительные сведения см. на странице доступных ценовых категорий и поддерживаемых регионов.

Необходимые компоненты

Для работы с этим кратким руководством вам понадобится:

  • Как минимум восемь ядер DCsv2/DCSv3/DCdsv3, доступных в вашей подписке.

    По умолчанию для размеров виртуальных машин Intel SGX для подписок Azure не назначена предопределенная квота. Следуйте этим инструкциям , чтобы запросить квоту ядра виртуальной машины для подписок.

Создание кластера AKS с узлами конфиденциальных вычислений с поддержкой анклава и надстройкой Intel SGX

Чтобы создать кластер AKS с поддержкой надстройки Intel SGX, добавьте пул узлов в кластер и проверьте, что вы создали с помощью приложения hello world анклава.

Создание кластера AKS с пулом системных узлов и надстройкой Intel SGX Intel

Примечание.

Если у вас уже есть кластер AKS, который соответствует описанным выше предварительным условиям, сразу переходите к следующему разделу, в котором вы добавите пул узлов конфиденциальных вычислений.

Надстройка Intel SGX AKS "confcom" предоставляет драйверы устройств Intel SGX для контейнеров, чтобы избежать добавленных изменений в yaml pod.

Сначала создайте для кластера группу ресурсов, выполнив команду 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

Выполните следующую команду, чтобы добавить в кластер AKS пользовательский пул узлов с тремя узлами размера Standard_DC4s_v3. Вы можете выбрать другой номер 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 и убедитесь, что узлы пула DCsv2 созданы правильно и на них выполняются DaemonSet для SGX:

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

Если выходные данные совпадают с приведенным выше кодом, значит кластер AKS готов к выполнению приложений конфиденциальных вычислений.

Чтобы протестировать приложение в анклаве, воспользуйтесь инструкциями из раздела Развертывание приложения Hello World из приложения изолированного анклава. Также вы можете добавить дополнительные пулы узлов AKS, выполнив приведенные ниже инструкции. (AKS поддерживает сочетание пулов узлов с поддержкой и без поддержки SGX.)

Добавление пула узлов конфиденциальных вычислений в существующий кластер AKS

В этом разделе предполагается, что вы уже запустили кластер AKS, который соответствует перечисленным выше предварительным условиям.

Включение надстройки AKS для конфиденциальных вычислений в существующем кластере

Выполните приведенную ниже команду, чтобы включить надстройку конфиденциальных вычислений:

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

Добавление пула узлов пользователя DCsv3 в кластер

Примечание.

Чтобы использовать возможность конфиденциальных вычислений, существующий кластер AKS должен иметь по меньшей мере один пул узлов с виртуальной машиной ценовой категории DCsv2/DCsv3. Дополнительные сведения о 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

Проверка того, что наборы DaemonSet успешно работают в пулах узлов для конфиденциальных вычислений

Войдите в существующий кластер AKS, чтобы выполнить следующую проверку:

kubectl get nodes

В выходных данных должен отобразиться только что добавленный пул confcompool1 в кластере AKS. Вы также можете увидеть другие наборы DaemonSet.

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

Если выходные данные совпадают с приведенным выше кодом, значит кластер AKS готов к выполнению приложений конфиденциальных вычислений.

Развертывание приложения Hello World из приложения изолированного анклава

Теперь вы готовы развернуть тестовое приложение.

Создайте файл с именем 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

Следующие шаги