Краткое руководство. Развертывание кластера 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 с пулом системных узлов и надстройкой AKS Intel SGX
Примечание
Если у вас уже есть кластер 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.