Szybki start: wdrażanie klastra usługi AKS przy użyciu poufnych węzłów agenta Intel SGX przy użyciu interfejsu wiersza polecenia platformy Azure

W tym przewodniku Szybki start użyjesz interfejsu wiersza polecenia platformy Azure do wdrożenia klastra Azure Kubernetes Service (AKS) z węzłami maszyn wirtualnych obsługującymi enklawy (DCsv2/DCSv3). Następnie uruchomisz prostą aplikację Hello world w enklawie. Możesz również aprowizować klaster i dodawać poufne węzły obliczeniowe z Azure Portal, ale ten przewodnik Szybki start koncentruje się na interfejsie wiersza polecenia platformy Azure.

AKS to zarządzana usługa Kubernetes, która umożliwia deweloperom lub operatorom klastrów szybkie wdrażanie klastrów i zarządzanie nimi. Aby dowiedzieć się więcej, przeczytaj wprowadzenie do usługi AKS i omówienie węzłów poufnych usługi AKS.

Funkcje poufnych węzłów obliczeniowych obejmują:

Uwaga

Maszyny wirtualne DCsv2/DCsv3 używają wyspecjalizowanego sprzętu, który jest dostępny w danym regionie. Aby uzyskać więcej informacji, zobacz dostępne jednostki SKU i obsługiwane regiony.

Wymagania wstępne

Ten przewodnik Szybki start wymaga następujących elementów:

  • Co najmniej osiem rdzeni DCsv2/DCSv3/DCdsv3 dostępnych w ramach subskrypcji.

    Domyślnie nie ma wstępnie przypisanego limitu przydziału dla rozmiarów maszyn wirtualnych Intel SGX dla subskrypcji platformy Azure. Postępuj zgodnie z tymi instrukcjami , aby zażądać limitu przydziału rdzeni maszyny wirtualnej dla subskrypcji.

Tworzenie klastra usługi AKS z poufnymi węzłami obliczeniowymi obsługującymi enklawy i dodatkiem Intel SGX

Skorzystaj z poniższych instrukcji, aby utworzyć klaster usługi AKS z włączonym dodatkiem Intel SGX, dodać pulę węzłów do klastra i sprawdzić, co zostało utworzone za pomocą aplikacji hello world enklawy.

Tworzenie klastra usługi AKS z pulą węzłów systemowych i dodatkiem AKS Intel SGX

Uwaga

Jeśli masz już klaster usługi AKS spełniający wymienione wcześniej kryteria wymagań wstępnych, przejdź do następnej sekcji , aby dodać pulę węzłów poufnego przetwarzania.

Dodatek Intel SGX AKS "confcom" uwidacznia sterowniki urządzeń Intel SGX do kontenerów, aby uniknąć dodawania zmian do pliku yaml zasobnika.

Najpierw utwórz grupę zasobów dla klastra za pomocą polecenia az group create . Poniższy przykład tworzy grupę zasobów o nazwie myResourceGroup w regionie eastus2 :

az group create --name myResourceGroup --location eastus2

Teraz utwórz klaster usługi AKS z włączonym dodatkiem poufnego przetwarzania przy użyciu polecenia az aks create :

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

Powyższe polecenie spowoduje wdrożenie nowego klastra usługi AKS z pulą węzłów systemowych nieoufnego węzła obliczeniowego. Poufne przetwarzanie węzłów Intel SGX nie jest zalecane w przypadku pul węzłów systemowych.

Dodawanie puli węzłów użytkownika z funkcjami poufnego przetwarzania do klastra usługi AKS

Uruchom następujące polecenie, aby dodać pulę węzłów użytkownika o Standard_DC4s_v3 rozmiarze z trzema węzłami do klastra usługi AKS. Możesz wybrać inną jednostkę SKU o większym rozmiarze z listy obsługiwanych jednostek SKU I regionów DCsv2/DCsv3.

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

Po uruchomieniu polecenia nowa pula węzłów z kontrolerami domeny DCsv3 powinna być widoczna z dodatkiem DaemonSets poufnego przetwarzania (wtyczka urządzenia SGX).

Weryfikowanie puli węzłów i dodatku

Pobierz poświadczenia dla klastra usługi AKS przy użyciu polecenia az aks get-credentials :

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

kubectl get pods Użyj polecenia , aby sprawdzić, czy węzły są tworzone prawidłowo, a zestawy DaemonSet związane z SGX działają w pulach węzłów DCsv2:

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

Jeśli dane wyjściowe są zgodne z poprzednim kodem, klaster usługi AKS jest teraz gotowy do uruchamiania poufnych aplikacji.

W tym przewodniku Szybki start możesz przejść do sekcji Wdrażanie Hello world z izolowanej aplikacji enklawy, aby przetestować aplikację w enklawie. Możesz też użyć poniższych instrukcji, aby dodać więcej pul węzłów w usłudze AKS. (Usługa AKS obsługuje mieszanie pul węzłów SGX i pul węzłów innych niż SGX).

Dodawanie puli węzłów poufnego przetwarzania do istniejącego klastra usługi AKS

W tej sekcji założono, że korzystasz już z klastra usługi AKS spełniającego kryteria wymagań wstępnych wymienionych wcześniej w tym przewodniku Szybki start.

Włączanie dodatku AKS do poufnego przetwarzania w istniejącym klastrze

Uruchom następujące polecenie, aby włączyć dodatek poufnego przetwarzania:

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

Dodawanie puli węzłów użytkownika kontrolerów domeny w wersji 3 do klastra

Uwaga

Aby korzystać z funkcji poufnego przetwarzania, istniejący klaster usługi AKS musi mieć co najmniej jedną pulę węzłów opartą na jednostce SKU maszyny wirtualnej DCsv2/DCsv3. Aby dowiedzieć się więcej o jednostkach SKU maszyn wirtualnych DCs-v2/Dcs-v3 na potrzeby poufnego przetwarzania, zobacz dostępne jednostki SKU i obsługiwane regiony.

Uruchom następujące polecenie, aby utworzyć pulę węzłów:

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

Sprawdź, czy utworzono nową pulę węzłów o nazwie confcompool1 :

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

Sprawdź, czy zestawy DaemonSet są uruchomione w poufnych pulach węzłów

Zaloguj się do istniejącego klastra usługi AKS, aby przeprowadzić następującą weryfikację:

kubectl get nodes

Dane wyjściowe powinny pokazywać nowo dodaną pulę confcompool1 w klastrze usługi AKS. Mogą być również widoczne inne zestawy DaemonSet.

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

Jeśli dane wyjściowe są zgodne z poprzednim kodem, klaster usługi AKS jest teraz gotowy do uruchamiania poufnych aplikacji.

Wdrażanie Hello world z aplikacji izolowanej enklawy

Teraz możesz przystąpić do wdrażania aplikacji testowej.

Utwórz plik o nazwie hello-world-enclave.yaml i wklej następujący manifest YAML. Ten przykładowy kod aplikacji można znaleźć w projekcie Open Enclave. W tym wdrożeniu założono, że wdrożono dodatek confcom .

Uwaga

Poniższy przykład ściąga publiczny obraz kontenera z Docker Hub. Zalecamy skonfigurowanie wpisu tajnego ściągania w celu uwierzytelniania przy użyciu konta Docker Hub zamiast tworzenia anonimowego żądania ściągnięcia. Aby zwiększyć niezawodność podczas pracy z zawartością publiczną, zaimportuj obraz i zarządzaj nim w prywatnym rejestrze kontenerów platformy Azure. Dowiedz się więcej o pracy z obrazami publicznymi.

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

Alternatywnie możesz również wykonać wdrożenie wyboru puli węzłów dla wdrożeń kontenerów, jak pokazano poniżej

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

Teraz użyj polecenia , kubectl apply aby utworzyć przykładowe zadanie, które zostanie otwarte w bezpiecznej enklawie, jak pokazano w poniższych przykładowych danych wyjściowych:

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

Możesz potwierdzić, że obciążenie pomyślnie utworzyło zaufane środowisko wykonawcze (enklawa), uruchamiając następujące polecenia:

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!

Czyszczenie zasobów

Aby usunąć pulę węzłów poufnego przetwarzania utworzoną w tym przewodniku Szybki start, użyj następującego polecenia:

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

Aby usunąć klaster usługi AKS, użyj następującego polecenia:

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

Następne kroki