Краткое руководство. Развертывание кластера AKS с конфиденциальными вычислительными узлами агента Intel SGX с помощью Azure CLI
В этом кратком руководстве описывается, как с помощью Azure CLI развернуть кластер Службы Azure Kubernetes (AKS) с узлами виртуальной машины с поддержкой Enclave (DCsv2/DCSv3). При работе с ним вы также запустите простое приложение Hello World в анклаве. Для подготовки кластера и добавления узлов конфиденциальных вычислений можно также использовать портал Azure, но в этом кратком руководстве мы расскажем о работе с Azure CLI.
AKS — это управляемая служба Kubernetes, которая позволяет разработчикам и операторам кластера быстро развертывать кластеры и управлять ими. Дополнительные сведения см. в вводной статье об AKS и обзоре узлов конфиденциальных вычислений AKS.
Узлы конфиденциальных вычислений имеют следующие возможности:
- Рабочие узлы Linux с поддержкой контейнеров Linux.
- Виртуальная машина 2-го поколения с узлами виртуальных машин под управлением Ubuntu 18.04.
- Процессор Intel SGX, поддерживающий ЦП, помогающий запускать контейнеры в защищенном анклаве с использованием зашифрованного кэша страниц (EPC). Дополнительные сведения см. в статье Часто задаваемые вопросы о конфиденциальных вычислениях в Azure.
- Драйвер DCAP Intel SGX предварительно установлен на всех узлах конфиденциальных вычислений. Дополнительные сведения см. в статье Часто задаваемые вопросы о конфиденциальных вычислениях в Azure.
Примечание.
Виртуальные машины 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
Следующие шаги
Запустите Python, Node или другие приложения с помощью конфиденциальных контейнеров с помощью программного обеспечения оболочки SGX isV/OSS. Просмотрите примеры конфиденциальных контейнеров в GitHub.
Запустите приложения с поддержкой анклава, используя примеры контейнеров Azure с поддержкой анклава на сайте GitHub.