Szybki start: wdrażanie klastra AKS z poufnymi węzłami 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 usługi 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 witryny Azure Portal, ale ten przewodnik Szybki start koncentruje się na interfejsie wiersza polecenia platformy Azure.
Usługa 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ą:
- Węzły procesu roboczego systemu Linux obsługujące kontenery systemu Linux.
- Maszyna wirtualna generacji 2 z węzłami maszyny wirtualnej z systemem Ubuntu 18.04.
- Procesor INTEL SGX umożliwia uruchamianie kontenerów w enklawie chronionej poufności dzięki wykorzystaniu pamięci zaszyfrowanej pamięci podręcznej stron (EPC). Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące poufnego przetwarzania na platformie Azure.
- Sterownik DCAP Intel SGX wstępnie zainstalowany w węzłach obliczeniowych poufnych. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące poufnego przetwarzania na platformie Azure.
Uwaga
Maszyny wirtualne DCsv2/DCsv3 używają wyspecjalizowanego sprzętu, który jest dostępny w 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 enklawę 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 przy użyciu puli węzłów systemowych i dodatku 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 przetwarzania poufnego.
Dodatek Intel SGX AKS "confcom" uwidacznia sterowniki urządzeń Intel SGX do kontenerów, aby uniknąć dodanych zmian w pliku yaml zasobnika.
Najpierw utwórz grupę zasobów dla klastra przy użyciu 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 za pomocą 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 węzłów nieufnego 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 DCsv2/DCsv3 i regionów.
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 DCsv3 powinna być widoczna z dodatkiem DaemonSets (wtyczka urządzenia SGX).
Weryfikowanie puli węzłów i dodatków
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 środowiska 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 poufnej puli węzłów obliczeniowych 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 przetwarzania poufnego 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 DCsv3 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 przetwarzania poufnego, 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 zawierać 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 aplikacji Hello World z 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 przyjęto założenie, że wdrożono dodatek confcom .
Uwaga
Poniższy przykład ściąga publiczny obraz kontenera z usługi Docker Hub. Zalecamy skonfigurowanie wpisu tajnego ściągania w celu uwierzytelniania przy użyciu konta usługi 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 node pool
- acc_second # this is the name of your confidential computing node 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 (enklawy), 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 przetwarzania poufnego utworzonego 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
Uruchamianie języków Python, Node lub innych aplikacji za pośrednictwem kontenerów poufnych przy użyciu oprogramowania otoki ISV/OSS SGX. Przejrzyj poufne przykłady kontenerów w usłudze GitHub.
Uruchamianie aplikacji obsługujących enklawy przy użyciu przykładów kontenerów platformy Azure obsługujących enklawę w usłudze GitHub.