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:
- Nodi di lavoro Linux che supportano contenitori Linux.
- Macchina virtuale di seconda generazione con nodi di macchine virtuali Ubuntu 18.04.
- CPU compatibile con Intel SGX per consentire l'esecuzione dei contenitori nell'enclave protetta per la riservatezza sfruttando la memoria Encrypted Page Cache (EPC). Per altre informazioni, vedere Domande frequenti per il confidential computing di Azure.
- Driver DCAP Intel SGX preinstallato nei nodi di confidential computing. Per altre informazioni, vedere Domande frequenti per il confidential computing di Azure.
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
Eseguire Python, Node o altre applicazioni tramite contenitori riservati usando software wrapper SGX di fornitori di software indipendenti oppure open source. Vedere gli esempi di contenitori riservati in GitHub.
Eseguire applicazioni con riconoscimento dell'enclave usando gli esempi di contenitori di Azure con riconoscimento dell'enclave in GitHub.