Izolacja podów w usłudze Azure Kubernetes Service (AKS)

Izolacja zasobników w usłudze AKS wykorzystuje technologię Kata Containers do uruchamiania każdego izolowanego zasobnika w lekkiej maszynie wirtualnej (VM) z własnym jądrem gościa. Ta granica izolacji obliczeniowej oddziela obciążenie robocze od jądra hosta i obciążeń roboczych w innych maszynach wirtualnych podów. Aby dowiedzieć się więcej o architekturze, korzyściach i zastosowaniach, zobacz artykuł Omówienie izolacji zasobników w Azure Kubernetes Service (AKS).

W tym artykule wdrożysz piaskownicowanie zasobników w nowym lub istniejącym klastrze usługi AKS z systemem Azure Linux, wdrożysz aplikację z użyciem środowiska uruchomieniowego Kata, a opcjonalnie zweryfikujesz izolację jądra.

Prerequisites

  • Interfejs wiersza polecenia platformy Azure w wersji 2.80.0 lub nowszej. Uruchom polecenie az --version , aby znaleźć wersję interfejsu wiersza polecenia platformy Azure i uruchomić polecenie az upgrade w celu uaktualnienia. Aby uzyskać więcej informacji, zobacz kroki opisane w temacie Instalowanie interfejsu wiersza polecenia platformy Azure.
  • AKS obsługuje izolację zasobników w Kubernetes w wersji 1.27.0 i nowszych.
  • Aby zarządzać klastrem Kubernetes, użyj klienta wiersza polecenia kubectl. Usługa Azure Cloud Shell jest dostarczana z usługą kubectl. Można zainstalować kubectl lokalnie za pomocą polecenia az aks install-cli.
  • Funkcja Microsoft.Network/AllowBringYourOwnPublicIpAddress musi być uwzględniona w Twojej subskrypcji. Ta funkcja jest wymagana w przypadku obciążeń korzystających z izolacji Podów, które używają środowiska uruchomieniowego Kata.

Zarejestruj funkcję Microsoft.Network/AllowBringYourOwnPublicIpAddress

  1. Zarejestruj funkcję Microsoft.Network/AllowBringYourOwnPublicIpAddress w ramach subskrypcji za pomocą polecenia az feature register. Rejestracja może potrwać kilka minut.

    az feature register --namespace Microsoft.Network --name AllowBringYourOwnPublicIpAddress
    
  2. Przed wdrożeniem izolacji zasobników Pod sprawdź za pomocą polecenia az feature show, czy stan rejestracji to Registered.

    az feature show --namespace Microsoft.Network --name AllowBringYourOwnPublicIpAddress --query properties.state --output tsv
    
  3. Po zarejestrowaniu funkcji odśwież rejestrację dostawcy zasobów Microsoft.Network za pomocą polecenia az provider register.

    az provider register --namespace Microsoft.Network
    

Limitations

Następujące ograniczenia dotyczą piaskowania Podów:

  • Kata containers mogą nie osiągnąć limitów wydajności operacji IO, które mogą osiągnąć tradycyjne kontenery w usłudze Azure Files i wysokowydajnym lokalnym dysku SSD.
  • Usługa Microsoft Defender for Containers nie obsługuje oceny zasobników środowiska uruchomieniowego Kata.
  • Dostęp do sieci hosta Kata nie jest obsługiwany. Nie można bezpośrednio uzyskać dostępu do konfiguracji sieci hosta z poziomu maszyny wirtualnej.
  • Przydział procesora i pamięci przy izolacji Poda różni się od runc. Każdy zasobnik Kata działa na maszynie wirtualnej zasobnika, której stały rozmiar pamięci jest oparty na limicie pamięci zasobnika lub domyślnie wynosi 512Mi, jeśli nie określisz limitu. Limity CPU określają przydział vCPU maszyny wirtualnej poda, a limity ułamkowe są zaokrąglane w górę do pełnego vCPU na potrzeby tego przydziału. Aby uzyskać więcej informacji, zobacz Uwagi dotyczące izolacji Podów.
  • Piaskownica poda jest obsługiwana tylko w systemie Azure Linux. Systemy Ubuntu i Windows nie są obsługiwane. Aby uzyskać więcej informacji, zobacz Azure Host kontenera systemu Linux dla usługi AKS.
  • Nie można włączyć standardu FIPS (Federal Information Processing Standard) ani Trusted Launch w puli węzłów korzystającej z izolacji zasobników Pod. Aby uzyskać więcej informacji, zobacz Kwestie dotyczące izolacji Poda.
  • Architektura Arm64 nie jest obsługiwana w puli węzłów korzystającej z izolacji Pod.

Jak to działa

Izolacja podów w usłudze AKS bazuje na projekcie open source Kata Containers. Kontenery Kata działające na hoście kontenerów Azure Linux dla AKS zapewniają izolację opartą na maszynach wirtualnych oraz oddzielne jądro dla każdego podu. Izolacja podów umożliwia przydzielanie zasobów każdemu podowi, a zasoby te nie są współdzielone z innymi kontenerami Kata ani z kontenerami w przestrzeni nazw uruchomionymi na tym samym hoście.

Architektura rozwiązania jest oparta na następujących głównych składnikach:

Wdrażanie izolacji Podów przy użyciu Kata Containers jest podobne do standardowego przepływu pracy containerd wdrażania kontenerów. Klastry z włączoną izolacją Pod mają określoną klasę uruchomieniową, do której można się odwołać w manifeście Pod (runtimeClassName: kata-vm-isolation). Aby uzyskać więcej informacji o domyślnych ustawieniach klas środowiska uruchomieniowego i ich dostosowywaniu, zobacz Uwagi dotyczące izolowania zasobników.

Aby użyć tej funkcji z zasobnikiem, jedyną różnicą jest dodanie parametru runtimeClassNamekata-vm-isolation do specyfikacji zasobnika. Gdy zasobnik używa kata-vm-isolation klasy runtimeClass, funkcja hypervisor uruchamia uproszczoną maszynę wirtualną z własnym jądrem, aby obciążenie działało.

Tworzenie klastra za pomocą piaskownicy zasobnika

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, uruchamiając az aks create polecenie z następującymi parametrami:

    Parameter Wartość wymagana Notatki
    --workload-runtime KataVmIsolation Włącza izolację Podów dla puli węzłów.
    --os-sku AzureLinux Izolacja podów obsługuje tylko SKU systemu operacyjnego Azure Linux.
    --node-vm-size Rozmiar maszyny wirtualnej generacji 2 obsługujący wirtualizację zagnieżdżoną Na przykład użyj rozmiaru maszyny wirtualnej serii Dsv3 .
    --node-count 3 Tworzy trzy węzły dla tego przykładu. Dostosuj wartość obciążenia.

    Poniższy przykład obejmuje tworzenie klastra o nazwie myAKSCluster z trzema węzłami w grupie myResourceGroup:

    az aks create \
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --os-sku AzureLinux \
        --workload-runtime KataVmIsolation \
        --node-vm-size Standard_D4s_v3 \
        --node-count 3 \
        --generate-ssh-keys
    
  2. Uruchom następujące polecenie, aby uzyskać poświadczenia dostępu dla klastra Kubernetes. az aks get-credentials Użyj polecenia 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, uruchamiając polecenie kubectl get pods.

    kubectl get pods --all-namespaces
    

Włącz izolację Podów w istniejącym klastrze

Aby korzystać z tej funkcji z istniejącym klastrem usługi AKS, należy spełnić następujące wymagania:

  • Klaster uruchamia platformę Kubernetes w wersji 1.27.0 lub nowszej.

  • Użyj następującego polecenia, aby włączyć izolację Podów przez utworzenie puli węzłów do ich hostowania.

  1. Dodaj pulę węzłów do klastra usługi AKS przy użyciu az aks nodepool add polecenia z następującymi parametrami:

    Parameter Wartość wymagana Notatki
    --resource-group Grupa zasobów, która zawiera istniejący klaster AKS Na przykład użyj myResourceGroup.
    --cluster-name Nazwa istniejącego klastra AKS Na przykład użyj myAKSCluster.
    --name Unikatowa nazwa puli węzłów Na przykład użyj nodepool2.
    --workload-runtime KataVmIsolation Włącza izolację Podów w puli węzłów.
    --os-sku AzureLinux Izolacja podów obsługuje tylko wersję SKU systemu operacyjnego Azure Linux.
    --node-vm-size Rozmiar maszyny wirtualnej generacji 2 obsługujący wirtualizację zagnieżdżoną Na przykład użyj rozmiaru maszyny wirtualnej z serii Dsv3.
    --node-count 1 Tworzy jeden węzeł dla tego przykładu. Dostosuj wartość obciążenia.

    Poniższy przykład dodaje pulę węzłów do myAKSCluster z jednym węzłem w nodepool2 w myResourceGroup:

    az aks nodepool add --cluster-name myAKSCluster --resource-group myResourceGroup --name nodepool2 --os-sku AzureLinux --workload-runtime KataVmIsolation --node-vm-size Standard_D4s_v3 --node-count 1
    
  2. Uruchom polecenie az aks update, aby uzgodnić konfigurację klastra, tak aby klaster rozpoznawał nową pulę węzłów ze środowiskiem uruchomieniowym obciążeń KataVmIsolation.

    az aks update --name myAKSCluster --resource-group myResourceGroup
    
  3. Sprawdź, czy aktualizacja klastra zakończyła się pomyślnie oraz czy pula węzłów obsługująca piaskownicowanie Podów używa oczekiwanego środowiska uruchomieniowego obciążeń, wariantu SKU systemu operacyjnego i rozmiaru maszyny wirtualnej.

    az aks show \
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --query provisioningState \
        --output tsv
    
    az aks nodepool show \
        --cluster-name myAKSCluster \
        --resource-group myResourceGroup \
        --name nodepool2 \
        --query "{workloadRuntime:workloadRuntime, osSKU:osSKU, vmSize:vmSize}" \
        --output table
    

    Stan aprowizacji klastra powinien mieć wartość Succeeded. W danych wyjściowych puli węzłów powinny być widoczne KataVmIsolation, AzureLinux i wybrany rozmiar maszyny wirtualnej.

Wdrażanie aplikacji z wykorzystaniem piaskownicy Podu

Korzystając z izolacji podów, można wdrażać zarówno standardowe pody, które nie używają środowiska uruchomieniowego Kata, jak i pody Kata, które go używają. Zasobnik Kata określa runtimeClassName: kata-vm-isolation w specyfikacji zasobnika.

Klasa uruchomieniowa wybiera środowisko uruchomieniowe Kata, ale należy również zdefiniować ograniczenia harmonogramowania, gdy obciążenia mają być uruchamiane w określonej puli węzłów obsługujących piaskownicowanie podów. Na przykład użyj wbudowanej etykiety puli węzłów AKS w elemencie nodeSelector. Zastąp element nodepool2 nazwą puli węzłów do izolowania Podów.

spec:
  runtimeClassName: kata-vm-isolation
  nodeSelector:
    kubernetes.azure.com/agentpool: nodepool2

W celu silniejszego rozdzielenia można zawężać pulę węzłów piaskownicy zasobnika i dodawać pasujące tolerancje do obciążeń Kata. Defekt bez zgodnej tolerancji uniemożliwia planowanie innych obciążeń w tej puli węzłów. Aby uzyskać więcej informacji, zobacz Use node taints in an AKS cluster (Używanie defektów węzłów w klastrze usługi AKS).

Wdrażanie aplikacji przy użyciu środowiska uruchomieniowego Kata

Aby wdrożyć pod ze środowiskiem uruchomieniowym Kata w klastrze AKS, wykonaj następujące kroki.

  1. Utwórz plik o nazwie kata-app.yaml, aby opisać pod kata, a następnie wklej następujący manifest.

    kind: Pod
    apiVersion: v1
    metadata:
      name: isolated-pod
    spec:
      runtimeClassName: kata-vm-isolation
      containers:
      - name: kata
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
    

    Wartość specyfikacji zasobnika runtimeClassName to kata-vm-isolation.

  2. Wdróż zasobnik Kubernetes, uruchamiając polecenie kubectl apply i podając plik kata-app.yaml:

    kubectl apply -f kata-app.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    pod/isolated-pod created
    

Weryfikowanie izolacji jądra (opcjonalnie)

  1. Aby porównać jądra podów Kata i podów innych niż Kata, utwórz plik o nazwie normal-app.yaml. Poniższy manifest definiuje standardowy pod bez środowiska uruchomieniowego Kata:
kind: Pod
apiVersion: v1
metadata:
  name: normal-pod
spec:
  containers:
  - name: non-kata
    image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
  1. Wdróż standardowy pod za pomocą polecenia kubectl apply.

    kubectl apply -f normal-app.yaml
    
  2. Aby uzyskać dostęp do kontenera w klastrze AKS, uruchom sesję powłoki za pomocą polecenia kubectl exec. W tym przykładzie uzyskujesz dostęp do kontenera wewnątrz isolated-pod.

    kubectl exec -it isolated-pod -- /bin/sh
    

    Kubectl łączy się z klastrem, uruchamia /bin/sh wewnątrz pierwszego kontenera w isolated-pod i przekazuje strumienie wejściowe i wyjściowe terminala do procesu kontenera. Możesz również uruchomić sesję powłoki do kontenera obsługującego zasobnik inny niż Kata, aby zobaczyć różnice.

  3. Po rozpoczęciu sesji powłoki do kontenera z izolowanego zasobnika uruchom polecenia, aby sprawdzić, czy kontener kata jest uruchomiony w piaskownicy zasobnika. Ma inną wersję jądra w porównaniu z kontenerem innym niż Kata 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:

    [user]/# uname -r
    6.6.96.mshv1
    
  4. Rozpocznij sesję powłoki do kontenera z normal-pod, aby zweryfikować dane wyjściowe jądra.

    kubectl exec -it normal-pod -- /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 działa zasobnik normalny, który jest innym jądrem niż zasobnik Kata uruchomiony w piaskownicy zasobnika:

    6.6.100.mshv1-1.azl3
    

Uprzątnij zasoby

  1. Po zakończeniu oceny tej funkcji usuń zasoby, których już nie potrzebujesz, aby uniknąć opłat za korzystanie z platformy Azure. Jeśli w ramach oceny lub testowania wdrożono nowy klaster, uruchom następujące az aks delete polecenie, aby usunąć klaster usługi AKS.

    az aks delete --resource-group myResourceGroup --name myAKSCluster
    
  2. Jeśli wdrożono izolację podów w istniejącym klastrze, możesz usunąć pody za pomocą polecenia kubectl delete pod.

    kubectl get pods
    kubectl delete pod <kata-pod-name>
    
  3. Aby usunąć zasoby obliczeniowe piaskownicy Poda, możesz również usunąć pulę węzłów Kata za pomocą polecenia az aks nodepool delete. Przed usunięciem puli węzłów upewnij się, że nie są w niej uruchomione żadne obciążenia robocze, które chcesz zachować.

    az aks nodepool delete \
      --cluster-name myAKSCluster \
      --resource-group myResourceGroup \
      --name nodepool2
    

Dalsze kroki