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