Udostępnij za pośrednictwem


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ć polecenie az 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):

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:

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.

  1. 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
    
  2. 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
    
  3. 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:

Użyj następującego polecenia, aby włączyć piaskownicę zasobnika (wersja zapoznawcza), tworząc pulę węzłów do hostowania.

  1. 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
    
  2. 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.

  1. 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"]
    
  2. 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.

  1. 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.

  2. 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

  1. 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.

  2. 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
    
  3. 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.