Schnellstart: Bereitstellen eines AKS-Clusters mit Confidential Computing-Agent-Knoten (Intel SGX) über die Azure CLI

In dieser Schnellstartanleitung verwenden Sie die Azure CLI, um einen AKS-Cluster (Azure Kubernetes Service) mit Confidential Computing-Knoten (DCsv2/DCSv3) bereitzustellen. Anschließend führen Sie eine einfache Hallo Welt-Anwendung in einer Enclave aus. Sie können auch über das Azure-Portal einen Cluster bereitstellen und Confidential Computing-Knoten hinzufügen. Der Schwerpunkt dieser Schnellstartanleitung liegt jedoch auf der Azure CLI.

AKS ist ein verwalteter Kubernetes-Dienst, mit dem Entwickler oder Clusteroperatoren Cluster schnell bereitstellen und verwalten können. Weitere Informationen finden Sie in der Einführung in AKS und in der Übersicht über Confidential Computing-Knoten in Azure Kubernetes Service.

Features von Confidential Computing-Knoten:

Hinweis

Virtuelle DCsv2-/DCsv3-Computer nutzen spezielle Hardware, die möglicherweise nicht in allen Regionen verfügbar ist. Weitere Informationen zu verfügbaren SKUs und unterstützten Regionen finden Sie hier.

Voraussetzungen

Für diese Schnellstartanleitung ist Folgendes erforderlich:

  • In Ihrem Abonnement müssen mindestens acht DCsv2-/DCSv3-/DCdsv3-Kerne verfügbar sein.

    Standardmäßig gibt es kein vorab zugewiesenes Kontingent für Intel SGX-VM-Größen für Ihre Azure-Abonnements. Sie sollten diese Anweisungen befolgen, um das VM-Kernkontingent für Ihre Abonnements anzufordern.

Erstellen Sie einen AKS-Cluster mit enklavefähigen Confidential Computing-Knoten und Intel SGX-Add-On

Verwenden Sie die folgenden Anweisungen, um einen AKS-Cluster mit aktiviertem Intel SGX-Add-On zu erstellen, dem Cluster einen Knotenpool hinzuzufügen und zu überprüfen, was Sie mit der Hello World-Enklavenanwendung erstellt haben.

Erstellen eines AKS-Clusters mit einem Systemknotenpool und AKS-Add-On für Intel SGX

Hinweis

Wenn Sie bereits über einen AKS-Cluster verfügen, der die zuvor genannten Anforderungskriterien erfüllt, können Sie direkt mit dem nächsten Abschnitt fortfahren, um einen Pool mit Confidential Computing-Knoten hinzuzufügen.

Das AKS-Add-On für Intel SGX „confcom“ macht die Intel SGX-Gerätetreiber für Ihre Container verfügbar, um Änderungen an Ihrem YAML-Pod zu vermeiden.

Erstellen Sie zunächst mit dem Befehl az group create eine Ressourcengruppe für den Cluster. Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroup in der Region eastus2 erstellt:

az group create --name myResourceGroup --location eastus2

Erstellen Sie nun mithilfe des Befehls az aks create einen AKS-Cluster mit aktiviertem Confidential Computing-Add-On:

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

Der obige Befehl stellt einen neuen AKS-Cluster mit einem Systemknotenpool bereit, bei dessen Knoten es sich nicht um Confidential Computing-Knoten handelt. Confidential Computing-Intel SGX-Knoten werden für Systemknotenpools nicht empfohlen.

Hinzufügen eines Benutzerknotenpool mit Confidential Computing-Funktionen zum AKS-Cluster

Führen Sie den folgenden Befehl aus, um einen Benutzerknoten der Größe Standard_DC4s_v3 mit drei Knoten zum AKS-Cluster hinzuzufügen. Sie können eine andere SKU aus der Liste mit unterstützten DCsv2-/DCsv3-SKUs und -Regionen auswählen.

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

Nach der Ausführung des Befehls sollte ein neuer Knotenpool mit DCsv3 mit Confidential Computing-Add-On-DaemonSets (SGX-Geräte-Plug-In) sichtbar sein.

Überprüfen des Knotenpools und Add-Ons

Rufen Sie die Anmeldeinformationen für Ihren AKS-Cluster mit dem Befehl az aks get-credentials ab:

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

Stellen Sie mithilfe des Befehls kubectl get pods sicher, dass die Knoten ordnungsgemäß erstellt wurden und die SGX-bezogenen DaemonSets in DCsv2-Knotenpools ausgeführt werden:

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

Wenn die Ausgabe wie der obige Code aussieht, ist Ihr AKS-Cluster bereit für die Ausführung vertraulicher Anwendungen.

Sie können in dieser Schnellstartanleitung zum Abschnitt Bereitstellen von „Hallo Welt“ aus einer isolierten Enklavenanwendung wechseln, um eine App in einer Enclave zu testen. Alternativ können Sie wie folgt vorgehen, um weitere Knotenpools in AKS hinzuzufügen. (AKS unterstützt die parallele Verwendung von SGX-Knotenpools und SGX-fremden Knotenpools).

Hinzufügen eines Confidential Computing-Knotenpools zu einem vorhandenen AKS-Cluster

In diesem Abschnitt wird davon ausgegangen, dass Sie bereits einen AKS-Cluster ausführen, der die zuvor in dieser Schnellstartanleitung aufgeführten Voraussetzungen erfüllt.

Aktivieren des Confidential Computing-AKS-Add-Ons für den vorhandenen Cluster

Führen Sie den folgenden Befehl aus, um das Confidential Computing-Add-On zu aktivieren:

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

Hinzufügen eines DCsv3-Benutzerknotenpools zum Cluster

Hinweis

Damit Sie die Confidential Computing-Funktion nutzen können, muss der vorhandene AKS-Cluster über mindestens einen Knotenpool verfügen, der auf der SKU für virtuelle DCsv2/Dcsv3-Computer basiert. Weitere Informationen zu den SKUs für virtuelle Confidential Computing-Computer der DCs-v2- oder DCs-v3-Serie finden Sie hier.

Führen Sie den folgenden Befehl aus, um einen Knotenpool zu erstellen:

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

Überprüfen Sie, ob der neue Knotenpool mit dem Namen confcompool1 erstellt wurde:

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

Bestätigen, dass DaemonSets in vertraulichen Knotenpools ausgeführt werden

Melden Sie sich bei Ihrem vorhandenen AKS-Cluster an, um die folgende Überprüfung auszuführen:

kubectl get nodes

Die Ausgabe sollte den neu hinzugefügten Pool confcompool1 im AKS-Cluster enthalten. Möglicherweise werden auch andere DaemonSets angezeigt.

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

Wenn die Ausgabe wie der obige Code aussieht, ist Ihr AKS-Cluster bereit für die Ausführung vertraulicher Anwendungen.

Bereitstellen von „Hallo Welt“ aus einer isolierten Enklavenanwendung

Sie können jetzt eine Testanwendung bereitstellen.

Erstellen Sie eine Datei mit dem Namen hello-world-enclave.yaml, und fügen Sie das folgende YAML-Manifest ein. Sie finden diesen Beispielanwendungscode im Open Enclave-Projekt. Bei dieser Bereitstellung wird davon ausgegangen, dass Sie das Add-On confcom bereitgestellt haben.

Hinweis

Im folgenden Beispiel wird ein öffentliches Container-Image von Docker Hub abgerufen. Es wird empfohlen, ein Pullgeheimnis für die Authentifizierung mithilfe eines Docker Hub-Kontos einrichten, anstatt einen anonymen Pull Request zu verwenden. Um die Zuverlässigkeit bei der Arbeit mit öffentlichen Inhalten zu verbessern, sollten Sie das Image in eine private Azure-Containerregistrierung importieren und dort verwalten. Erfahren Sie mehr über die Arbeit mit öffentlichen Images.

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

Alternativ können Sie Ihre Container auch mit Knotenpoolauswahl bereitstellen wie unten gezeigt.

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

Erstellen Sie nun mithilfe des Befehls kubectl apply einen Beispielauftrag, der in einer sicheren Enklave geöffnet wird, wie in der folgenden Beispielausgabe zu sehen:

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

Durch Ausführen der folgenden Befehle können Sie sich vergewissern, dass von der Workload erfolgreich eine vertrauenswürdige Ausführungsumgebung (Enklave) erstellt wurde:

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!

Bereinigen von Ressourcen

Verwenden Sie den folgenden Befehl, um den in dieser Schnellstartanleitung erstellten Confidential Computing-Knotenpool zu entfernen:

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

Verwenden Sie zum Löschen des AKS-Clusters den folgenden Befehl:

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

Nächste Schritte