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:

  • Ein aktives Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

  • Auf dem Bereitstellungscomputer muss mindestens die Azure CLI-Version 2.0.64 installiert und konfiguriert sein.

    Führen Sie az --version aus, um die Version zu ermitteln. Installations- und Upgradeinformationen finden Sie bei Bedarf unter Installieren von Azure CLI.

  • 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

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.

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: sgx-test
  labels:
    app: sgx-test
spec:
  template:
    metadata:
      labels:
        app: sgx-test
    spec:
      containers:
      - name: sgxtest
        image: oeciteam/sgx-test:1.0
        resources:
          limits:
            sgx.intel.com/epc: 5Mi # This limit will automatically place the job into a confidential computing node and mount the required driver volumes. sgx limit setting needs "confcom" AKS Addon as referenced above. 
      restartPolicy: Never
  backoffLimit: 0

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

apiVersion: batch/v1
kind: Job
metadata:
  name: sgx-test
spec:
  template:
    metadata:
      labels:
        app: sgx-test
    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: sgx-test
        image: oeciteam/oe-helloworld:1.0
        resources:
          limits:
            kubernetes.azure.com/sgx_epc_mem_in_MiB: 10
          requests:
            kubernetes.azure.com/sgx_epc_mem_in_MiB: 10
      restartPolicy: "Never"
  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 "sgx-test" 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=sgx-test

NAME       COMPLETIONS   DURATION   AGE
sgx-test   1/1           1s         23s
$ kubectl get pods -l app=sgx-test

NAME             READY   STATUS      RESTARTS   AGE
sgx-test-rchvg   0/1     Completed   0          25s
$ kubectl logs -l app=sgx-test

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