Partager via


Démarrage rapide : déployer un cluster AKS avec des nœuds d’informatique confidentielle Intel SGX agent à l’aide de l’interface Azure CLI

Dans ce guide de démarrage rapide, vous allez utiliser l’interface Azure CLI pour déployer un cluster Azure Kubernetes Service (AKS) avec des nœuds de machine virtuelle (DCsv2/DCSv3) reconnaissant les enclaves. Vous exécuterez ensuite une application Hello World simple dans une enclave. Vous pouvez également provisionner un cluster et ajouter des nœuds d’informatique confidentielle à partir du portail Azure, mais ce guide de démarrage rapide porte sur l’interface Azure CLI.

AKS est un service Kubernetes géré qui permet aux développeurs ou aux opérateurs de clusters de rapidement déployer et gérer des clusters. Pour en savoir plus, consultez la Présentation d’AKS et la Vue d’ensemble des nœuds confidentiels AKS.

Les fonctionnalités des nœuds d’informatique confidentielle sont les suivantes :

Notes

Les machines virtuelles DCsv2/DCsv3 utilisent du matériel spécialisé soumis à la disponibilité régionale. Pour plus d’informations, consultez les SKU disponibles et les régions prises en charge.

Prérequis

Ce démarrage rapide nécessite :

  • Au moins huit cœurs DCsv2/DCSv3/DCdsv3 disponibles dans votre abonnement.

    Par défaut, aucun quota n’est préattribué pour les tailles de machine virtuelle Intel SGX pour vos abonnements Azure. Vous devez suivre ces instructions pour demander le quota de cœurs de machine virtuelle pour vos abonnements.

Créer un cluster AKS avec des nœuds d’informatique confidentielle reconnaissant les enclaves et un module complémentaire Intel SGX

Utilisez les instructions suivantes pour créer un cluster AKS avec le module complémentaire Intel SGX activé, ajouter un pool de nœuds au cluster et vérifier ce que vous avez créé à l’aide de l’application enclave Hello World.

Créer un cluster AKS avec un pool de nœuds système et un module complémentaire AKS Intel SGX

Notes

Si vous disposez déjà d’un cluster AKS qui répond aux critères préalables listés ci-dessus, passez à la section suivante pour ajouter un pool de nœuds d’informatique confidentielle.

Le module complémentaire Intel SGX AKS « confcom » expose les pilotes de périphérique Intel SGX à vos conteneurs pour éviter d’ajouter des modifications à votre pod yaml.

Tout d’abord, créez un groupe de ressources pour le cluster en utilisant la commande az group create. L’exemple suivant crée un groupe de ressources nommé myResourceGroup dans la région eastus2 :

az group create --name myResourceGroup --location eastus2

À présent, créez un cluster AKS, pourvu du module complémentaire d’informatique confidentielle activé, à l’aide de la commande az aks create :

az aks create -g myResourceGroup --name myAKSCluster --generate-ssh-keys --enable-addons confcom

La commande ci-dessus déploie un nouveau cluster AKS avec un pool de nœuds système des nœuds d’informatique non confidentielle. Les nœuds Intel SGX de calcul confidentiel ne sont pas recommandés pour les pools de nœuds système.

Ajouter au cluster AKS un pool de nœuds utilisateur doté des fonctionnalités d’informatique confidentielle

Exécutez la commande suivante pour ajouter au cluster AKS un pool de nœuds utilisateur de la taille Standard_DC4s_v3 avec trois nœuds. Vous pouvez choisir une autre référence (SKU) de plus grande taille dans la liste des régions et références SKU DCsv2/DCsv3 prises en charge.

az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-vm-size Standard_DC4s_v3 --node-count 2

Après l’exécution de la commande, un nouveau pool de nœuds avec DCsv3 doit s’afficher, comportant les DaemonSets du module complémentaire d’informatique confidentielle (Plug-in d’appareil SGX).

Vérifier le pool de nœuds et le module complémentaire

Récupérez les informations d’identification de votre cluster AKS avec la commande az aks get-credentials :

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Utilisez la commande kubectl get pods pour vérifier que les nœuds sont correctement créés et que les ressources DaemonSet liées à SGX s’exécutent sur des pools de nœuds DCsv2 :

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

Si la sortie correspond au code précédent, votre cluster AKS est maintenant prêt à exécuter des applications confidentielles.

Vous pouvez passer à la section Déployer Hello World depuis une application isolée en enclave de ce guide de démarrage rapide pour tester une application dans une enclave. Vous pouvez aussi utiliser les instructions suivantes pour ajouter d’autres pools de nœuds sur AKS. (AKS prend en charge l’association des pools de nœuds SGX avec les pools de nœuds non-SGX.)

Ajouter un pool de nœuds d’informatique confidentielle à un cluster AKS existant

Cette section suppose que vous exécutez déjà un cluster AKS remplissant les critères préalables listés plus haut dans ce guide de démarrage rapide.

Activer le module complémentaire AKS de calcul confidentiel sur le cluster existant

Exécutez la commande suivante pour activer le module complémentaire de l’informatique confidentielle :

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

Ajouter un pool de nœuds utilisateur DCsv3 au cluster

Notes

Pour utiliser la fonctionnalité d’informatique confidentielle, votre cluster AKS existant doit disposer au minimum d’un pool de nœuds basé sur une référence (SKU) de machine virtuelle DCsv2/DCsv3. Pour en savoir plus sur les références SKU de machine virtuelle DCs-v2/Dcs-v3 dédiés à l’informatique confidentielle, consultez les références SKU disponibles et les régions prises en charge.

Exécutez la commande suivante pour créer un pool de nœuds :

az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-count 2 --node-vm-size Standard_DC4s_v3

Vérifiez que le nouveau pool de nœuds portant le nom confcompool1 a été créé :

az aks nodepool list --cluster-name myAKSCluster --resource-group myResourceGroup

Vérifier que les ressources DaemonSet s’exécutent sur les pools de nœuds confidentiels

Connectez-vous à votre cluster AKS existant pour effectuer la vérification suivante :

kubectl get nodes

La sortie affiche normalement le pool confcompool1 qui vient d’être ajouté au cluster AKS. Vous pouvez également voir d’autres DaemonSets.

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

Si la sortie correspond au code précédent, votre cluster AKS est maintenant prêt à exécuter des applications confidentielles.

Déployer Hello World depuis une application isolée en enclave

Vous êtes maintenant prêt à déployer une application de test.

Créez un fichier nommé hello-world-enclave.yaml pour y coller le manifeste YAML suivant. Vous trouvez cet exemple de code d’application dans le projet Open Enclave. Ce déploiement suppose que vous avez déployé le module complémentaire confcom.

Notes

L’exemple suivant tire (pull) une image conteneur publique à partir de Docker Hub. Nous vous recommandons de configurer un secret d’extraction pour l’authentification à l’aide d’un compte Docker Hub au lieu de créer une demande de tirage anonyme. Pour une plus grande fiabilité lors de l’utilisation de contenu public, importez et gérez l’image dans un registre de conteneurs Azure privé. En savoir plus sur l’utilisation des images publiques.

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

Vous pouvez également effectuer un déploiement de sélection de pool de nœuds pour vos déploiements de conteneur, comme indiqué ci-dessous

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

À présent, utilisez la commande kubectl apply pour créer un exemple de tâche qui s’ouvrira dans une enclave sécurisée, comme dans l’exemple de sortie suivant :

kubectl apply -f hello-world-enclave.yaml
job "oe-helloworld" created

Vous pouvez vérifier que la charge de travail a bien créé un environnement d’exécution de confiance (l’enclave) en exécutant les commandes suivantes :

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!

Nettoyer les ressources

Pour supprimer le pool de nœuds d’informatique confidentielle que vous avez créé dans ce guide de démarrage rapide, utilisez la commande suivante :

az aks nodepool delete --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup

Pour supprimer le cluster AKS, utilisez la commande suivante :

az aks delete --resource-group myResourceGroup --cluster-name myAKSCluster

Étapes suivantes