Snabbstart: Distribuera ett AKS-kluster med intel SGX-agentnoder för konfidentiell databehandling med hjälp av Azure CLI
I den här snabbstarten använder du Azure CLI för att distribuera ett AKS-kluster (Azure Kubernetes Service) med enklavermedvetna (DCsv2/DCSv3) VM-noder. Sedan kör du ett enkelt Hello World-program i en enklav. Du kan också etablera ett kluster och lägga till konfidentiella beräkningsnoder från Azure Portal, men den här snabbstarten fokuserar på Azure CLI.
AKS är en hanterad Kubernetes-tjänst som gör det möjligt för utvecklare eller klusteroperatörer att snabbt distribuera och hantera kluster. Mer information finns i AKS-introduktionen och översikten över AKS-konfidentiella noder.
Funktioner i konfidentiella beräkningsnoder är:
- Linux-arbetsnoder som stöder Linux-containrar.
- Virtuell dator av generation 2 (VM) med Ubuntu 18.04 VM-noder.
- Intel SGX-kompatibel PROCESSOR som hjälper dig att köra dina containrar i konfidentiellt skyddad enklav som utnyttjar EPC-minne (Encrypted Page Cache). Mer information finns i Vanliga frågor och svar om konfidentiell databehandling i Azure.
- Intel SGX DCAP-drivrutinen förinstallerad på de konfidentiella beräkningsnoderna. Mer information finns i Vanliga frågor och svar om konfidentiell databehandling i Azure.
Kommentar
Virtuella DCsv2/DCsv3-datorer använder specialiserad maskinvara som är tillgänglighet för ämnesregionen. Mer information finns i tillgängliga SKU:er och regioner som stöds.
Förutsättningar
För den här snabbstarten krävs:
Minst åtta DCsv2/DCSv3/DCdsv3-kärnor som är tillgängliga i din prenumeration.
Som standard finns det ingen i förväg tilldelad kvot för Intel SGX VM-storlekar för dina Azure-prenumerationer. Du bör följa de här anvisningarna för att begära kärnkvot för virtuella datorer för dina prenumerationer.
Skapa ett AKS-kluster med enklavermedvetna konfidentiala beräkningsnoder och Intel SGX-tillägg
Använd följande instruktioner för att skapa ett AKS-kluster med Intel SGX-tillägget aktiverat, lägga till en nodpool i klustret och kontrollera vad du har skapat med Hello World Enclave-programmet.
Skapa ett AKS-kluster med en systemnodpool och AKS Intel SGX Addon
Kommentar
Om du redan har ett AKS-kluster som uppfyller de villkor som angavs tidigare går du vidare till nästa avsnitt för att lägga till en konfidential databehandlingsnodpool.
Intel SGX AKS Addon "confcom" exponerar Intel SGX-enhetsdrivrutinerna för dina containrar för att undvika ytterligare ändringar i din podd yaml.
Skapa först en resursgrupp för klustret med kommandot az group create . I följande exempel skapas en resursgrupp med namnet myResourceGroup i regionen eastus2 :
az group create --name myResourceGroup --location eastus2
Skapa nu ett AKS-kluster med tillägget för konfidentiell databehandling aktiverat med kommandot az aks create :
az aks create -g myResourceGroup --name myAKSCluster --generate-ssh-keys --enable-addons confcom
Kommandot ovan distribuerar ett nytt AKS-kluster med systemnodpoolen för icke-konfidentiell beräkningsnod. Konfidentiell databehandling av Intel SGX-noder rekommenderas inte för systemnodpooler.
Lägga till en användarnodpool med funktioner för konfidentiell databehandling i AKS-klustret
Kör följande kommando för att lägga till en användarnodpool med Standard_DC4s_v3
storlek med tre noder i AKS-klustret. Du kan välja en annan större SKU i listan över DCsv2/DCsv3 SKU:er och regioner som stöds.
az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-vm-size Standard_DC4s_v3 --node-count 2
När du har kört kommandot bör en ny nodpool med DCsv3 visas med konfidentiellt tillägg för databehandling daemonSets (SGX-enhetstillägg).
Verifiera nodpoolen och tillägget
Hämta autentiseringsuppgifterna för ditt AKS-kluster med hjälp av kommandot az aks get-credentials :
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
kubectl get pods
Använd kommandot för att kontrollera att noderna har skapats korrekt och att de SGX-relaterade DaemonSets körs på DCsv2-nodpooler:
kubectl get pods --all-namespaces
kube-system sgx-device-plugin-xxxx 1/1 Running
Om utdata matchar föregående kod är AKS-klustret nu redo att köra konfidentiella program.
Du kan gå till avsnittet Distribuera Hello World från ett isolerat enklavprogram i den här snabbstarten för att testa en app i en enklav. Eller använd följande instruktioner för att lägga till fler nodpooler i AKS. (AKS stöder blandning av SGX-nodpooler och icke-SGX-nodpooler.)
Lägga till en konfidentiell databehandlingsnodpool i ett befintligt AKS-kluster
Det här avsnittet förutsätter att du redan kör ett AKS-kluster som uppfyller de villkor som angavs tidigare i den här snabbstarten.
Aktivera AKS-tillägget för konfidentiell databehandling i det befintliga klustret
Kör följande kommando för att aktivera tillägget för konfidentiell databehandling:
az aks enable-addons --addons confcom --name MyManagedCluster --resource-group MyResourceGroup
Lägga till en DCsv3-användarnodpool i klustret
Kommentar
Om du vill använda funktionen för konfidentiell databehandling måste ditt befintliga AKS-kluster ha minst en nodpool som baseras på en DCsv2/DCsv3 VM SKU. Mer information om SKU:er för virtuella datorer med DCs-v2/Dcs-v3 för konfidentiell databehandling finns i tillgängliga SKU:er och regioner som stöds.
Kör följande kommando för att skapa en nodpool:
az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-count 2 --node-vm-size Standard_DC4s_v3
Kontrollera att den nya nodpoolen med namnet confcompool1 har skapats:
az aks nodepool list --cluster-name myAKSCluster --resource-group myResourceGroup
Kontrollera att DaemonSets körs i konfidentiella nodpooler
Logga in på ditt befintliga AKS-kluster för att utföra följande verifiering:
kubectl get nodes
Utdata bör visa den nyligen tillagda confcompool1-poolen i AKS-klustret. Du kan också se andra DaemonSets.
kubectl get pods --all-namespaces
kube-system sgx-device-plugin-xxxx 1/1 Running
Om utdata matchar föregående kod är AKS-klustret nu redo att köra konfidentiella program.
Distribuera Hello World från ett isolerat enklavprogram
Nu är du redo att distribuera ett testprogram.
Skapa en fil med namnet hello-world-enclave.yaml och klistra in följande YAML-manifest. Du hittar den här exempelprogramkoden i open enclave-projektet. Den här distributionen förutsätter att du har distribuerat confcom-tillägget .
Kommentar
I följande exempel hämtas en offentlig containeravbildning från Docker Hub. Vi rekommenderar att du konfigurerar en pull-hemlighet för att autentisera med ett Docker Hub-konto i stället för att göra en anonym pull-begäran. För att förbättra tillförlitligheten när du arbetar med offentligt innehåll importerar och hanterar du avbildningen i ett privat Azure-containerregister. Läs mer om hur du arbetar med offentliga avbildningar.
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
Du kan också göra en distribution av val av nodpool för dina containerdistributioner enligt nedan
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
Använd kubectl apply
nu kommandot för att skapa ett exempeljobb som öppnas i en säker enklav, som du ser i följande exempelutdata:
kubectl apply -f hello-world-enclave.yaml
job "oe-helloworld" created
Du kan bekräfta att arbetsbelastningen har skapat en betrodd körningsmiljö (enklav) genom att köra följande kommandon:
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!
Rensa resurser
Om du vill ta bort den konfidentiala databehandlingsnodpoolen som du skapade i den här snabbstarten använder du följande kommando:
az aks nodepool delete --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup
Om du vill ta bort AKS-klustret använder du följande kommando:
az aks delete --resource-group myResourceGroup --cluster-name myAKSCluster
Nästa steg
Kör Python, Node eller andra program via konfidentiella containrar med hjälp av ISV/OSS SGX-omslutningsprogram. Granska konfidentiella containerexempel i GitHub.
Kör enklavermedvetna program med hjälp av enklavermedvetna Azure-containerexempel i GitHub.