Inicio rápido: Implementación de un clúster de AKS con nodos de computación confidencial de agente Intel SGX mediante la CLI de Azure
En este inicio rápido va a usar la CLI de Azure para implementar un clúster de Azure Kubernetes Service (AKS) con nodos de máquina virtual compatibles con enclaves (DCsv2/DCSv3). A continuación, ejecutará una aplicación Hola mundo en un enclave. También puede aprovisionar un clúster y agregar nodos de computación confidencial desde Azure Portal, pero este inicio rápido se centra en la CLI de Azure.
AKS es un servicio de Kubernetes administrado que permite a los desarrolladores y operadores del clúster implementar y administrar clústeres rápidamente. Para más información, consulte Azure Kubernetes Service y Nodos de computación confidencial en Azure Kubernetes Service.
Las características de los nodos de computación confidencial incluyen:
- Nodos de trabajo Linux que admiten contenedores Linux.
- Máquina virtual de generación 2 con nodos de máquina virtual con Ubuntu 18.04.
- CPU compatible con Intel SGX para ayudar a ejecutar los contenedores en un enclave protegido por confidencialidad que aprovecha la memoria caché de páginas cifrada (EPC). Para más información, consulte Preguntas frecuentes de computación confidencial de Azure.
- Controlador Intel SGX DCAP preinstalado en los nodos de computación confidencial. Para más información, consulte Preguntas frecuentes de computación confidencial de Azure.
Nota
Las máquinas virtuales DCsv2/DCsv3 usan hardware especializado disponible en todas las regiones. Para más información, consulte Soluciones en máquinas virtuales de Azure.
Requisitos previos
Esta guía de inicio rápido requiere:
Un mínimo de ocho núcleos DCsv2/DCSv3/DCdsv3 disponibles en la suscripción.
De forma predeterminada, no hay ninguna cuota asignada previamente para los tamaños de máquina virtual Intel SGX para las suscripciones de Azure. Debe seguir estas instrucciones para solicitar la cuota de núcleos de máquina virtual para las suscripciones.
Creación de un clúster de AKS con nodos y complementos de computación confidenciales compatibles con enclaves de Intel SGX
Utilice las instrucciones siguientes para crear un clúster de AKS con el complemento de Intel SGX habilitado, agregar un grupo de nodos al clúster y comprobar lo que ha creado con una aplicación de enclave hola mundo.
Crear un clúster de AKS con un grupo de nodos del sistema y un complemento AKS Intel SGX
Nota
Si ya tiene un clúster de AKS que cumple los criterios de requisitos previos enumerados anteriormente, vaya a la siguiente sección para agregar un nuevo grupo de nodos de computación confidencial.
El complemento Intel SGX AKS "confcom" expone los controladores de dispositivo Intel SGX a los contenedores para evitar cambios agregados en el pod yaml.
Primero, cree un grupo de recursos para el clúster con el comando az group create. En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la región eastus2:
az group create --name myResourceGroup --location eastus2
Ahora cree un clúster de AKS con el complemento de computación confidencial habilitado mediante el comandoaz aks create:
az aks create -g myResourceGroup --name myAKSCluster --generate-ssh-keys --enable-addons confcom
El comando anterior implementará un nuevo clúster de AKS con el grupo de nodos del sistema de nodo de computación no confidencial. Los nodos de Intel SGX de computación confidencial no se recomiendan para los grupos de nodos del sistema.
Adición de un grupo de nodos de usuario con funcionalidades de computación confidencial al clúster de AKS
Ejecute el siguiente comando para agregar un grupo de nodos de usuario de tamaño Standard_DC4s_v3
con tres nodos al clúster de AKS. Puede elegir otro SKU de mayor tamaño en la lista de SKU y regiones admitidos de DCsv2/DCsv3.
az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-vm-size Standard_DC4s_v3 --node-count 2
Después de ejecutar el comando, debe estar visible un nuevo grupo de nodos con DCsv3 con los DaemonSets del complemento de computación confidencial (complemento de dispositivo SGX).
Comprobación del complemento y del grupo de nodos
Obtenga las credenciales del clúster de AKS mediante el comando az aks get-credentials:
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Use el comando kubectl get pods
para comprobar que los nodos se han creado correctamente y que los DaemonSets relacionados con SGX están en ejecución en los grupos de nodos DCsv2:
kubectl get pods --all-namespaces
kube-system sgx-device-plugin-xxxx 1/1 Running
Si la salida coincide con el código anterior, el clúster de AKS ya está listo para ejecutar aplicaciones confidenciales.
Puede ir a la sección Implementación de Hola mundo desde una aplicación de enclave aislado de este inicio rápido para probar una aplicación en un enclave. O bien, use las instrucciones siguientes para agregar más grupos de nodos en AKS. (AKS admite la combinación de grupos de nodos SGX y grupos de nodos que no son SGX).
Adición de un grupo de nodos de computación confidencial a un clúster de AKS existente
En esta sección se supone que ya tiene un clúster de AKS en ejecución que cumple los criterios de requisitos previos enumerados anteriormente en este inicio rápido.
Habilitación del complemento de AKS de computación confidencial en el clúster existente
Ejecute el siguiente comando para habilitar el complemento de computación confidencial:
az aks enable-addons --addons confcom --name MyManagedCluster --resource-group MyResourceGroup
Incorporación de un grupo de nodos de usuario DCsv3 al clúster
Nota
Para usar la capacidad de computación confidencial, el clúster de AKS existente debe tener al menos un grupo de nodos basado en un SKU de máquina virtual DCsv2/DCsv3. Para más información sobre las SKU de las máquinas virtuales Dcs-v2/Dcs-v3 para computación confidencial, consulte las SKU disponibles y regiones admitidas.
Ejecute el siguiente comando para crear un grupo de nodos:
az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-count 2 --node-vm-size Standard_DC4s_v3
Compruebe que se ha creado el nuevo grupo de nodos con el nombre confcompool1:
az aks nodepool list --cluster-name myAKSCluster --resource-group myResourceGroup
Comprobación de que los DaemonSets están en ejecución en los grupos de nodos confidenciales
Inicie sesión en el clúster de AKS existente para realizar la siguiente comprobación:
kubectl get nodes
La salida debe mostrar el grupo confcompool1 recién agregado al clúster de AKS. También puede ver otros DaemonSets.
kubectl get pods --all-namespaces
kube-system sgx-device-plugin-xxxx 1/1 Running
Si la salida coincide con el código anterior, el clúster de AKS ya está listo para ejecutar aplicaciones confidenciales.
Implementación de Hola mundo desde una aplicación de enclave aislado
Ahora está listo para implementar una aplicación de prueba.
Cree un archivo llamado hello-world-enclave.yaml y pegue el siguiente manifiesto YAML. Puede encontrar este código de aplicación de ejemplo en Proyecto Open Enclave. En esta implementación se da por supuesto que ha implementado el complemento confcom.
Nota
En el ejemplo siguiente se extrae una imagen de contenedor público de Docker Hub. Se recomienda configurar un secreto de extracción para autenticarse mediante una cuenta de Docker Hub en lugar de realizar una solicitud de extracción anónima. Para mejorar la confiabilidad al trabajar con contenido público, importe y administre la imagen en un registro de contenedor privado de Azure. Más información sobre cómo trabajar con imágenes públicas.
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
Como alternativa, también puede realizar una implementación de selección de grupo de nodos para las implementaciones de contenedor, como se muestra a continuación
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
Ahora, use el comando kubectl apply
para crear un trabajo de ejemplo que se abrirá en un enclave seguro, como se muestra en la siguiente salida de ejemplo:
kubectl apply -f hello-world-enclave.yaml
job "oe-helloworld" created
Puede confirmar que la carga de trabajo ha creado correctamente un entorno de ejecución de confianza (enclave) mediante la ejecución de los siguientes comandos:
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!
Limpieza de recursos
Para quitar el grupo de nodos de computación confidencial que ha creado en este inicio rápido, use el siguiente comando:
az aks nodepool delete --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup
Utilice el comando siguiente para eliminar el clúster de AKS:
az aks delete --resource-group myResourceGroup --cluster-name myAKSCluster
Pasos siguientes
Ejecute Python, Node u otras aplicaciones a través de contenedores confidenciales utilizando el software de contenedor SGX ISV/OSS. Consulte ejemplos de contenedores confidenciales en GitHub.
Para ejecutar aplicaciones compatibles con enclaves, consulte los ejemplos de contenedores de Azure compatibles con enclaves en GitHub.