Dela via


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ör az 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):

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:

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

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

Använd följande kommando för att aktivera Pod Sandboxing (förhandsversion) genom att skapa en nodpool som värd för den.

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

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

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

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

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

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