Piaskownica zasobnika (wersja zapoznawcza) w usłudze Azure Kubernetes Service (AKS)
Aby zabezpieczyć i chronić obciążenia kontenerów przed niezaufanym lub potencjalnie złośliwym kodem, usługa AKS zawiera teraz mechanizm o nazwie Piaskownica zasobnika (wersja zapoznawcza). Piaskownica zasobnika zapewnia granicę izolacji między aplikacją kontenera, a współużytkowanym jądrem i zasobami obliczeniowymi hosta kontenera. Na przykład procesor CPU, pamięć i sieć. Piaskownica zasobnika uzupełnia inne środki zabezpieczeń lub mechanizmy kontroli ochrony danych za pomocą ogólnej architektury, aby ułatwić spełnienie wymagań dotyczących zgodności z przepisami, branżą lub ładem w celu zabezpieczenia poufnych informacji.
Ten artykuł pomaga zrozumieć tę nową funkcję i jak ją zaimplementować.
Wymagania wstępne
Interfejs wiersza polecenia platformy Azure w wersji 2.44.1 lub nowszej. Uruchom polecenie
az --version
, aby znaleźć wersję i uruchomić polecenieaz upgrade
, aby uaktualnić wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.aks-preview
Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 0.5.123 lub nowszej.Zarejestruj funkcję w subskrypcji platformy
KataVMIsolationPreview
Azure.Usługa AKS obsługuje piaskownicę zasobnika (wersja zapoznawcza) w wersji 1.24.0 lub nowszej ze wszystkimi wtyczkami sieciowymi usługi AKS.
Aby zarządzać klastrem Kubernetes, użyj narzędzia kubectl klienta wiersza polecenia Kubernetes. Usługa Azure Cloud Shell jest dostarczana z usługą
kubectl
. Narzędzie kubectl można zainstalować lokalnie przy użyciu polecenia az aks install-cli .
Instalowanie rozszerzenia interfejsu wiersza polecenia platformy Azure w wersji zapoznawczej usługi aks
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Aby zainstalować rozszerzenie aks-preview, uruchom następujące polecenie:
az extension add --name aks-preview
Uruchom następujące polecenie, aby zaktualizować do najnowszej wersji wydanego rozszerzenia:
az extension update --name aks-preview
Rejestrowanie flagi funkcji KataVMIsolationPreview
Zarejestruj flagę KataVMIsolationPreview
funkcji przy użyciu polecenia az feature register , jak pokazano w poniższym przykładzie:
az feature register --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Wyświetlenie stanu Zarejestrowane trwa kilka minut. Sprawdź stan rejestracji przy użyciu polecenia az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService , używając polecenia az provider register :
az provider register --namespace "Microsoft.ContainerService"
Ograniczenia
Poniżej przedstawiono ograniczenia dotyczące tej wersji zapoznawczej piaskownicy zasobnika (wersja zapoznawcza):
Kontenery kata mogą nie osiągnąć limitów wydajności operacji we/wy na sekundę, które tradycyjne kontenery mogą osiągnąć w usłudze Azure Files i lokalnym dysku SSD o wysokiej wydajności.
Usługa Microsoft Defender for Containers nie obsługuje oceny zasobników środowiska uruchomieniowego Kata.
Sieć hosta kata nie jest obsługiwana.
Usługa AKS nie obsługuje sterowników interfejsu magazynu kontenerów i sterownika CSI magazynu wpisów tajnych w tej wersji zapoznawczej.
Jak to działa
Aby osiągnąć tę funkcję w usłudze AKS, kontenery Kata działające na hoście kontenera systemu Linux platformy Azure dla stosu usługi AKS zapewniają wymuszoną sprzętowo izolację. Piaskownica zasobnika rozszerza korzyści związane z izolacją sprzętową, taką jak oddzielne jądro dla każdego zasobnika Kata. Izolacja sprzętowa przydziela zasoby dla każdego zasobnika i nie udostępnia ich innym kontenerom kata ani kontenerom przestrzeni nazw uruchomionym na tym samym hoście.
Architektura rozwiązania jest oparta na następujących składnikach:
- Host kontenera systemu Linux platformy Azure dla usługi AKS
- Microsoft Hyper-V Hypervisor
- Dostrojone jądro Dom0 systemu Linux na platformie Azure
- Monitor maszyny wirtualnej cloud-hypervisor typu open source (VMM)
- Integracja z platformą Kata Container Framework
Wdrażanie piaskownicy zasobnika przy użyciu kontenerów Kata jest podobne do standardowego przepływu pracy kontenera w celu wdrożenia kontenerów. Wdrożenie obejmuje opcje środowiska kata-runtime, które można zdefiniować w szablonie zasobnika.
Aby użyć tej funkcji z zasobnikiem, jedyną różnicą jest dodanie parametru runtimeClassName kata-mshv-vm-isolation do specyfikacji zasobnika.
Gdy zasobnik używa środowiska uruchomieniowego kata-mshv-vm-isolationClass , tworzy maszynę wirtualną, która będzie służyć jako piaskownica zasobnika do hostowania kontenerów. Domyślna pamięć maszyny wirtualnej to 2 GB, a domyślny procesor CPU to jeden rdzeń, jeśli manifest zasobu kontenera (containers[].resources.limits
) nie określa limitu procesora CPU i pamięci. Po określeniu limitu użycia procesora CPU lub pamięci w manifeście zasobu kontenera maszyna wirtualna ma containers[].resources.limits.cpu
1
argument , aby użyć jednego procesora + xCPU i containers[].resources.limits.memory
z argumentem 2
określającym 2 GB + yMemory. Kontenery mogą używać tylko procesora CPU i pamięci do limitów kontenerów. Element containers[].resources.requests
jest ignorowany w tej wersji zapoznawczej, gdy pracujemy nad zmniejszeniem obciążenia procesora CPU i pamięci.
Wdrażanie nowego klastra
Wykonaj następujące kroki, aby wdrożyć klaster usługi Azure Linux AKS przy użyciu interfejsu wiersza polecenia platformy Azure.
Utwórz klaster usługi AKS przy użyciu polecenia az aks create i określ następujące parametry:
- --workload-runtime: określ kataMshvVmIsolation , aby włączyć funkcję piaskownicy zasobnika w puli węzłów. W przypadku tego parametru te inne parametry spełniają następujące wymagania. W przeciwnym razie polecenie kończy się niepowodzeniem i zgłasza problem z odpowiednimi parametrami.
- --os-sku: AzureLinux. W tej wersji zapoznawczej ta funkcja obsługuje tylko jednostkę os-sku systemu Linux platformy Azure.
- --node-vm-size: dowolny rozmiar maszyny wirtualnej platformy Azure, który jest maszyną wirtualną generacji 2 i obsługuje wirtualizację zagnieżdżonych, działa. Na przykład maszyny wirtualne Dsv3 .
Poniższy przykład tworzy klaster o nazwie myAKSCluster z jednym węzłem w grupie myResourceGroup:
az aks create --name myAKSCluster \ --resource-group myResourceGroup \ --os-sku AzureLinux \ --workload-runtime KataMshvVmIsolation \ --node-vm-size Standard_D4s_v3 \ --node-count 1 \ --generate-ssh-keys
Uruchom następujące polecenie, aby uzyskać poświadczenia dostępu dla klastra Kubernetes. Użyj polecenia az aks get-credentials i zastąp wartości nazwy klastra i nazwy grupy zasobów.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Wyświetl listę wszystkich zasobników we wszystkich przestrzeniach nazw przy użyciu polecenia kubectl get pods .
kubectl get pods --all-namespaces
Wdrażanie w istniejącym klastrze
Aby korzystać z tej funkcji z istniejącym klastrem usługi AKS, należy spełnić następujące wymagania:
- Wykonaj kroki, aby zarejestrować flagę funkcji KataVMIsolationPreview .
- Sprawdź, czy klaster działa na platformie Kubernetes w wersji 1.24.0 lub nowszej.
Użyj następującego polecenia, aby włączyć piaskownicę zasobnika (wersja zapoznawcza), tworząc pulę węzłów do hostowania.
Dodaj pulę węzłów do klastra usługi AKS przy użyciu polecenia az aks nodepool add . Określ następujące parametry:
- --resource-group: wprowadź nazwę istniejącej grupy zasobów, w ramach których ma zostać utworzony klaster usługi AKS.
- --cluster-name: wprowadź unikatową nazwę klastra usługi AKS, taką jak myAKSCluster.
- --name: wprowadź unikatową nazwę puli węzłów klastrów, na przykład nodepool2.
- --workload-runtime: określ kataMshvVmIsolation , aby włączyć funkcję piaskownicy zasobnika w puli węzłów. Wraz z parametrem
--workload-runtime
te inne parametry spełniają następujące wymagania. W przeciwnym razie polecenie kończy się niepowodzeniem i zgłasza problem z odpowiednimi parametrami.- --os-sku: AzureLinux. W wersji zapoznawczej ta funkcja obsługuje tylko jednostkę os-SKU systemu Linux platformy Azure.
- --node-vm-size: dowolny rozmiar maszyny wirtualnej platformy Azure, który jest maszyną wirtualną generacji 2 i obsługuje wirtualizację zagnieżdżonych, działa. Na przykład maszyny wirtualne Dsv3 .
Poniższy przykład dodaje pulę węzłów do elementu myAKSCluster z jednym węzłem w puli nodepool2 w grupie myResourceGroup:
az aks nodepool add --cluster-name myAKSCluster --resource-group myResourceGroup --name nodepool2 --os-sku AzureLinux --workload-runtime KataMshvVmIsolation --node-vm-size Standard_D4s_v3
Uruchom polecenie az aks update, aby włączyć piaskownicę zasobnika (wersja zapoznawcza) w klastrze.
az aks update --name myAKSCluster --resource-group myResourceGroup
Wdrażanie zaufanej aplikacji
Aby zademonstrować wdrożenie zaufanej aplikacji w udostępnionym jądrze w klastrze usługi AKS, wykonaj następujące kroki.
Utwórz plik o nazwie trusted-app.yaml , aby opisać zaufany zasobnik, a następnie wklej następujący manifest.
kind: Pod apiVersion: v1 metadata: name: trusted spec: containers: - name: trusted image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Wdróż zasobnik Kubernetes, uruchamiając polecenie kubectl apply i określ plik trusted-app.yaml :
kubectl apply -f trusted-app.yaml
Dane wyjściowe polecenia przypominają następujący przykład:
pod/trusted created
Wdrażanie niezaufanej aplikacji
Aby zademonstrować wdrożenie niezaufanej aplikacji w piaskownicy zasobnika w klastrze usługi AKS, wykonaj następujące kroki.
Utwórz plik o nazwie untrusted-app.yaml , aby opisać niezaufany zasobnik, a następnie wklej następujący manifest.
kind: Pod apiVersion: v1 metadata: name: untrusted spec: runtimeClassName: kata-mshv-vm-isolation containers: - name: untrusted image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Wartość parametru runtimeClassNameSpec to
kata-mhsv-vm-isolation
.Wdróż zasobnik Kubernetes, uruchamiając polecenie kubectl apply i określ niezaufany plik app.yaml :
kubectl apply -f untrusted-app.yaml
Dane wyjściowe polecenia przypominają następujący przykład:
pod/untrusted created
Weryfikowanie konfiguracji izolacji jądra
Aby uzyskać dostęp do kontenera w klastrze usługi AKS, uruchom sesję powłoki, uruchamiając polecenie narzędzia kubectl exec . W tym przykładzie uzyskujesz dostęp do kontenera wewnątrz niezaufanego zasobnika.
kubectl exec -it untrusted -- /bin/bash
Narzędzie Kubectl łączy się z klastrem, działa
/bin/sh
wewnątrz pierwszego kontenera w niezaufanym zasobniku i przekazuje strumienie wejściowe i wyjściowe terminalu do procesu kontenera. Możesz również uruchomić sesję powłoki do kontenera hostowania zaufanego zasobnika.Po uruchomieniu sesji powłoki w kontenerze niezaufanego zasobnika można uruchomić polecenia, aby sprawdzić, czy niezaufany kontener jest uruchomiony w piaskownicy zasobnika. Zauważysz, że ma inną wersję jądra w porównaniu z zaufanym kontenerem poza piaskownicą.
Aby wyświetlić wersję jądra, uruchom następujące polecenie:
uname -r
Poniższy przykład przypomina dane wyjściowe z jądra piaskownicy zasobnika:
root@untrusted:/# uname -r 5.15.48.1-8.cm2
Uruchom sesję powłoki w kontenerze zaufanego zasobnika, aby sprawdzić dane wyjściowe jądra:
kubectl exec -it trusted -- /bin/bash
Aby wyświetlić wersję jądra, uruchom następujące polecenie:
uname -r
Poniższy przykład przypomina dane wyjściowe z maszyny wirtualnej, na której jest uruchomiony zaufany zasobnik, który jest innym jądrem niż niezaufany zasobnik uruchomiony w piaskownicy zasobnika:
5.15.80.mshv2-hvl1.m2
Czyszczenie
Po zakończeniu oceny tej funkcji, aby uniknąć opłat za platformę Azure, wyczyść niepotrzebne zasoby. Jeśli w ramach oceny lub testowania wdrożono nowy klaster, możesz usunąć klaster przy użyciu polecenia az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Jeśli włączono piaskownicę zasobnika (wersja zapoznawcza) w istniejącym klastrze, możesz usunąć zasobniki przy użyciu polecenia kubectl delete zasobnika .
kubectl delete pod pod-name
Następne kroki
Dowiedz się więcej o dedykowanych hostach platformy Azure dla węzłów z klastrem usługi AKS w celu korzystania z izolacji sprzętowej i kontroli nad zdarzeniami konserwacji platformy Azure.
Azure Kubernetes Service