Poddsandboxning (förhandsversion) med Azure Kubernetes Service (AKS)
För att skydda och skydda dina containerarbetsbelastningar från obetrodd eller potentiellt skadlig kod innehåller AKS nu en mekanism som kallas Pod Sandboxing (förhandsversion). Pod Sandboxing tillhandahåller en isoleringsgräns mellan containerprogrammet och containervärdens delade kernel- och beräkningsresurser. Till exempel CPU, minne och nätverk. Poddsandboxning kompletterar andra säkerhetsåtgärder eller dataskyddskontroller med din övergripande arkitektur för att hjälpa dig att uppfylla regel-, bransch- eller styrningsefterlevnadskrav för att skydda känslig information.
Den här artikeln hjälper dig att förstå den här nya funktionen och hur du implementerar den.
Förutsättningar
Azure CLI version 2.44.1 eller senare. Kör
az --version
för att hitta versionen och köraz upgrade
för att uppgradera versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.Azure CLI-tillägget
aks-preview
version 0.5.123 eller senare.Registrera funktionen
KataVMIsolationPreview
i din Azure-prenumeration.AKS stöder Pod Sandboxing (förhandsversion) på version 1.24.0 och senare med alla AKS-nätverksinsticksprogram.
Om du vill hantera ett Kubernetes-kluster använder du Kubernetes-kommandoradsklienten kubectl. Azure Cloud Shell levereras med
kubectl
. Du kan installera kubectl lokalt med kommandot az aks install-cli .
Installera Azure CLI-tillägget aks-preview
Viktigt!
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Kör följande kommando för att installera aks-preview-tillägget:
az extension add --name aks-preview
Kör följande kommando för att uppdatera till den senaste versionen av tillägget som släpptes:
az extension update --name aks-preview
Registrera funktionsflaggan KataVMIsolationPreview
Registrera funktionsflaggan KataVMIsolationPreview
med kommandot az feature register , som du ser i följande exempel:
az feature register --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Det tar några minuter för statusen att visa Registrerad. Kontrollera registreringsstatusen med kommandot az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
När statusen visar Registrerad uppdaterar du registreringen av Resursprovidern Microsoft.ContainerService med hjälp av kommandot az provider register :
az provider register --namespace "Microsoft.ContainerService"
Begränsningar
Följande är begränsningar med den här förhandsversionen av Pod Sandboxing (förhandsversion):
Kata-containrar kanske inte når de IOPS-prestandagränser som traditionella containrar kan nå på Azure Files och lokal SSD med höga prestanda.
Microsoft Defender för containrar stöder inte utvärdering av Kata-runtime-poddar.
Kata-värdnätverk stöds inte.
AKS stöder inte drivrutiner för containerlagringsgränssnittet och CSI-drivrutinen för Secrets Store i den här förhandsversionen.
Hur det fungerar
För att uppnå den här funktionen på AKS levererar Kata Containers som körs på Azure Linux-containervärden för AKS-stacken maskinvaruintvingande isolering. Poddsandboxning utökar fördelarna med maskinvaruisolering, till exempel en separat kernel för varje Kata-podd. Maskinvaruisolering allokerar resurser för varje podd och delar dem inte med andra Kata-containrar eller namnområdescontainrar som körs på samma värd.
Lösningsarkitekturen baseras på följande komponenter:
- Azure Linux-containervärden för AKS
- Microsoft Hyper-V Hypervisor
- Azure-finjusterad Dom0 Linux-kernel
- Cloud-Hypervisor Virtual Machine Monitor (VMM) med öppen källkod
- Integrering med Kata Container Framework
Distribution av poddsandbox-miljö med katacontainrar liknar standardarbetsflödet i container för att distribuera containrar. Distributionen innehåller alternativ för kata-runtime som du kan definiera i poddmallen.
Om du vill använda den här funktionen med en podd är den enda skillnaden att lägga till runtimeClassName kata-mshv-vm-isolation till poddspecifikationen.
När en podd använder kata-mshv-vm-isolation runtimeClass skapar den en virtuell dator som fungerar som poddsandbox som värd för containrarna. Den virtuella datorns standardminne är 2 GB och standard-CPU är en kärna om containerresursmanifestet (containers[].resources.limits
) inte anger någon gräns för PROCESSOR och minne. När du anger en gräns för CPU eller minne i containerresursmanifestet har containers[].resources.limits.cpu
den virtuella datorn med 1
argumentet att använda en + xCPU och containers[].resources.limits.memory
med 2
argumentet för att ange 2 GB + yMemory. Containrar kan bara använda CPU och minne till containrarnas gränser. Ignoreras containers[].resources.requests
i den här förhandsversionen medan vi arbetar för att minska processor- och minneskostnaderna.
Distribuera nytt kluster
Utför följande steg för att distribuera ett Azure Linux AKS-kluster med hjälp av Azure CLI.
Skapa ett AKS-kluster med kommandot az aks create och ange följande parametrar:
- --workload-runtime: Ange KataMshvVmIsolation för att aktivera funktionen Pod Sandboxing i nodpoolen. Med den här parametern ska dessa andra parametrar uppfylla följande krav. Annars misslyckas kommandot och rapporterar ett problem med motsvarande parametrar.
- --os-sku: AzureLinux. Endast Azure Linux os-sku stöder den här funktionen i den här förhandsversionen.
- --node-vm-size: Alla Virtuella Azure-datorer som är en virtuell dator i generation 2 och som har stöd för kapslad virtualisering fungerar. Till exempel virtuella Dsv3-datorer .
I följande exempel skapas ett kluster med namnet myAKSCluster med en nod i 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
Kör följande kommando för att hämta autentiseringsuppgifter för Kubernetes-klustret. Använd kommandot az aks get-credentials och ersätt värdena för klusternamnet och resursgruppens namn.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Visa en lista över alla poddar i alla namnområden med kommandot kubectl get pods .
kubectl get pods --all-namespaces
Distribuera till ett befintligt kluster
Om du vill använda den här funktionen med ett befintligt AKS-kluster måste följande krav uppfyllas:
- Följ stegen för att registrera funktionsflaggan KataVMIsolationPreview .
- Kontrollera att klustret kör Kubernetes version 1.24.0 och senare.
Använd följande kommando för att aktivera Pod Sandboxing (förhandsversion) genom att skapa en nodpool som värd för den.
Lägg till en nodpool i AKS-klustret med kommandot az aks nodepool add . Ange följande parametrar:
- --resource-group: Ange namnet på en befintlig resursgrupp för att skapa AKS-klustret i.
- --cluster-name: Ange ett unikt namn för AKS-klustret, till exempel myAKSCluster.
- --name: Ange ett unikt namn för klusternodpoolen, till exempel nodepool2.
- --workload-runtime: Ange KataMshvVmIsolation för att aktivera funktionen Pod Sandboxing i nodpoolen. Tillsammans med parametern
--workload-runtime
ska dessa andra parametrar uppfylla följande krav. Annars misslyckas kommandot och rapporterar ett problem med motsvarande parametrar.- --os-sku: AzureLinux. Endast Azure Linux os-sku stöder den här funktionen i förhandsversionen.
- --node-vm-size: Alla Virtuella Azure-datorer som är en virtuell dator i generation 2 och som har stöd för kapslad virtualisering fungerar. Till exempel virtuella Dsv3-datorer .
I följande exempel läggs en nodpool till i myAKSCluster med en nod i nodepool2 i 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
Kör kommandot az aks update för att aktivera poddsandboxning (förhandsversion) i klustret.
az aks update --name myAKSCluster --resource-group myResourceGroup
Distribuera ett betrott program
Utför följande steg för att demonstrera distributionen av ett betrott program på den delade kerneln i AKS-klustret.
Skapa en fil med namnet trusted-app.yaml för att beskriva en betrodd podd och klistra sedan in följande 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"]
Distribuera Kubernetes-podden genom att köra kommandot kubectl apply och ange filen trusted-app.yaml :
kubectl apply -f trusted-app.yaml
Kommandots utdata liknar följande exempel:
pod/trusted created
Distribuera ett program som inte är betrott
Utför följande steg för att demonstrera distributionen av ett program som inte är betrott till poddsandboxen i AKS-klustret.
Skapa en fil med namnet untrusted-app.yaml för att beskriva en ej betrodd podd och klistra sedan in följande 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"]
Värdet för runtimeClassNameSpec är
kata-mhsv-vm-isolation
.Distribuera Kubernetes-podden genom att köra kommandot kubectl apply och ange filen untrusted-app.yaml :
kubectl apply -f untrusted-app.yaml
Kommandots utdata liknar följande exempel:
pod/untrusted created
Verifiera konfiguration av kernelisolering
Om du vill komma åt en container i AKS-klustret startar du en shell-session genom att köra kommandot kubectl exec . I det här exemplet kommer du åt containern i den obetrodda podden.
kubectl exec -it untrusted -- /bin/bash
Kubectl ansluter till klustret, körs
/bin/sh
i den första containern i den obetrodda podden och vidarebefordrar terminalens indata- och utdataströmmar till containerns process. Du kan också starta en shell-session till containern som är värd för den betrodda podden.När du har startat en shell-session i containern för den obetrodda podden kan du köra kommandon för att kontrollera att den obetrodda containern körs i en poddsandbox . Du kommer att märka att den har en annan kernelversion än den betrodda containern utanför sandbox-miljön.
Om du vill se kernelversionen kör du följande kommando:
uname -r
Följande exempel liknar utdata från poddens sandbox-kernel:
root@untrusted:/# uname -r 5.15.48.1-8.cm2
Starta en shell-session till containern för den betrodda podden för att verifiera kernelutdata:
kubectl exec -it trusted -- /bin/bash
Om du vill se kernelversionen kör du följande kommando:
uname -r
Följande exempel liknar utdata från den virtuella datorn som kör den betrodda podden, som är en annan kernel än den ej betrodda podd som körs i poddens sandbox-miljö:
5.15.80.mshv2-hvl1.m2
Rensa
När du är klar med utvärderingen av den här funktionen rensar du dina onödiga resurser för att undvika Azure-avgifter. Om du har distribuerat ett nytt kluster som en del av utvärderingen eller testningen kan du ta bort klustret med kommandot az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Om du har aktiverat Pod Sandboxing (förhandsversion) i ett befintligt kluster kan du ta bort poddarna med kommandot kubectl delete pod .
kubectl delete pod pod-name
Nästa steg
Läs mer om Azure Dedicated-värdar för noder med ditt AKS-kluster för att använda maskinvaruisolering och kontroll över azure-plattformsunderhållshändelser.
Azure Kubernetes Service