Dela via


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:

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