Share via


Avvio rapido: Distribuire un cluster del servizio Azure Kubernetes con nodi dell'agente Intel SGX di confidential computing usando l'interfaccia della riga di comando di Azure

In questo argomento di avvio rapido si userà l'interfaccia della riga di comando di Azure per distribuire un cluster del servizio Azure Kubernetes con nodi di macchine virtuali (DCsv2/DCSv3) con riconoscimento dell'enclave. Si eseguirà quindi una semplice applicazione Hello World in un'enclave. È anche possibile effettuare il provisioning di un cluster e aggiungere nodi di confidential computing dal portale di Azure, ma questo avvio rapido è incentrato sull'interfaccia della riga di comando di Azure.

Il servizio Azure Kubernetes è un servizio Kubernetes gestito che consente agli sviluppatori o agli operatori del cluster di distribuire e gestire rapidamente i cluster. Per altre informazioni, vedere l'introduzione al servizio Azure Kubernetes e la panoramica dei nodi riservati del servizio Azure Kubernetes.

Le funzionalità dei nodi di confidential computing includono:

Nota

Le macchine virtuali DCsv2/DCsv3 usano hardware specializzato soggetto a disponibilità in base all'area. Per altre informazioni, vedere gli SKU disponibili e le aree supportate.

Prerequisiti

Questa guida introduttiva richiede:

  • Minimo otto core DCsv2/DCSv3/DCdsv3 disponibili nella sottoscrizione.

    Per impostazione predefinita, non esiste alcuna quota pre-assegnata per le dimensioni delle macchine virtuali Intel SGX per le sottoscrizioni di Azure. È necessario seguire queste istruzioni per richiedere la quota di core della macchina virtuale per le sottoscrizioni.

Creare un cluster del servizio Azure Kubernetes con nodi di confidential computing con riconoscimento dell'enclave e il componente aggiuntivo Intel SGX

Usare le istruzioni seguenti per creare un cluster del servizio Azure Kubernetes con il componente aggiuntivo Intel SGX abilitato, aggiungere un pool di nodi al cluster e verificare ciò che è stato creato con l'applicazione dell'enclave hello world.

Creare un cluster del servizio Azure Kubernetes con un pool di nodi di sistema e il componente aggiuntivo Intel SGX del servizio Azure Kubernetes

Nota

Se è già disponibile un cluster del servizio Azure Kubernetes che soddisfa i requisiti elencati sopra, passare alla prossima sezione per aggiungere un nuovo pool di nodi di confidential computing.

Il componente aggiuntivo del servizio Azure Kubernetes Intel SGX "confcom" espone i driver di dispositivo Intel SGX ai contenitori per evitare modifiche aggiunte al pod yaml.

Creare prima di tutto un gruppo di risorse per il cluster usando il comando az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nell'area eastus2:

az group create --name myResourceGroup --location eastus2

Creare ora un cluster del servizio Azure Kubernetes con il componente aggiuntivo confidential computing abilitato usando il comando az aks create:

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

Il comando precedente distribuirà un nuovo cluster del servizio Azure Kubernetes con un pool di nodi di sistema non di confidential computing. I nodi Intel SGX di confidential computing non sono consigliati per i pool di nodi di sistema.

Aggiungere un pool di nodi utente con funzionalità di confidential computing al cluster del servizio Azure Kubernetes

Eseguire il comando seguente per aggiungere un pool di nodi utente di dimensioni Standard_DC4s_v3 con tre nodi al cluster del servizio Azure Kubernetes. È possibile scegliere un altro SKU di dimensioni maggiori dall'elenco degli SKU DCsv2/DCsv3 e delle aree supportati.

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

Dopo aver eseguito il comando, dovrebbe essere visibile un nuovo pool di nodi con DCsv3 con i DaemonSet del componente aggiuntivo di confidential computing (plug-in del dispositivo SGX).

Verificare il pool di nodi e il componente aggiuntivo

Ottenere le credenziali per il cluster servizio Azure Kubernetes usando il comando az aks get-credentials:

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

Usare il comando kubectl get pods per verificare che i nodi vengano creati correttamente e che i DaemonSet correlati a SGX siano in esecuzione nei pool di nodi DCsv2:

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

Se l'output corrisponde al codice precedente, il cluster del servizio Azure Kubernetes è ora pronto per l'esecuzione di applicazioni riservate.

È possibile passare alla sezione Distribuire Hello World da un'applicazione enclave isolata in questo avvio rapido per testare un'app in un'enclave. In alternativa, usare le istruzioni seguenti per aggiungere altri pool di nodi nel servizio Azure Kubernetes. Il servizio Azure Kubernetes supporta sia pool di nodi SGX che non SGX.

Aggiungere un pool di nodi di confidential computing a un cluster del servizio Azure Kubernetes esistente

Questa sezione presuppone che sia già in esecuzione un cluster del servizio Azure Kubernetes che soddisfi i criteri dei prerequisiti elencati in precedenza in questo argomento di avvio rapido.

Abilitare il componente aggiuntivo del servizio Azure Kubernetes per il confidential computing nel cluster esistente

Eseguire il comando seguente per abilitare il componente aggiuntivo per il confidential computing:

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

Aggiungere un pool di nodi utente DCsv3 al cluster

Nota

Per usare la funzionalità di confidential computing, il cluster del servizio Azure Kubernetes esistente deve avere almeno un pool di nodi basato su SKU di macchine virtuali DCsv2/DCsv3. Per altre informazioni sugli SKU di macchine virtuali DCs-v2/Dcs-v3 per il confidential computing, vedere gli SKU disponibili e le aree supportate.

Eseguire il seguente comando per creare un pool di nodi:

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

Verificare che il nuovo pool di nodi con il nome confcompool1 sia stato creato:

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

Verificare che i DaemonSet siano in esecuzione nei pool di nodi riservati

Accedere al cluster del servizio Azure Kubernetes esistente per eseguire la verifica seguente:

kubectl get nodes

L'output dovrebbe mostrare il pool confcompool1 appena aggiunto nel cluster del servizio Azure Kubernetes. Potrebbero essere visualizzati anche altri DaemonSet.

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

Se l'output corrisponde al codice precedente, il cluster del servizio Azure Kubernetes è ora pronto per l'esecuzione di applicazioni riservate.

Distribuire Hello World da un'applicazione enclave isolata

A questo punto è possibile distribuire un'applicazione di test.

Creare un file denominato hello-world-enclave.yaml e incollare il manifesto YAML seguente. È possibile trovare questo codice dell'applicazione di esempio nel progetto Open Enclave. Questa distribuzione presuppone che il componente aggiuntivo confcom sia stato distribuito.

Nota

L'esempio seguente esegue il pull di un'immagine del contenitore pubblica da Docker Hub. È consigliabile configurare un segreto pull per l'autenticazione usando un account di Docker Hub anziché effettuare una richiesta pull anonima. Per migliorare l'affidabilità quando si lavora con contenuto pubblico, importare e gestire l'immagine in un registro Azure Container privato. Altre informazioni sull'uso delle immagini pubbliche.

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

In alternativa, è anche possibile eseguire una distribuzione di una selezione del pool di nodi per le distribuzioni di contenitori, come illustrato di seguito

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

Usare ora il comando kubectl apply per creare un processo di esempio che verrà avviato in un'enclave sicura, come illustrato nell'output di esempio seguente:

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

È possibile verificare che il carico di lavoro abbia creato correttamente un ambiente di esecuzione attendibile (enclave) eseguendo i comandi seguenti:

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!

Pulire le risorse

Per rimuovere il pool di nodi di confidential computing creato in questo argomento di avvio rapido, usare il comando seguente:

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

Per eliminare il cluster del servizio Azure Kubernetes, usare il comando seguente:

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

Passaggi successivi