Pod Sandboxing (preview) met Azure Kubernetes Service (AKS)

Om uw containerworkloads te beveiligen en te beveiligen tegen niet-vertrouwde of mogelijk schadelijke code, bevat AKS nu een mechanisme met de naam Pod Sandboxing (preview). Pod Sandboxing biedt een isolatiegrens tussen de containertoepassing en de gedeelde kernel en rekenresources van de containerhost. Bijvoorbeeld CPU, geheugen en netwerken. Pod Sandboxing vormt een aanvulling op andere beveiligingsmaatregelen of besturingselementen voor gegevensbeveiliging met uw algemene architectuur om te voldoen aan wettelijke, branche- of governancenalevingsvereisten voor het beveiligen van gevoelige informatie.

Dit artikel helpt u deze nieuwe functie te begrijpen en hoe u deze implementeert.

Vereisten

  • Azure CLI versie 2.44.1 of hoger. Voer az --version deze uit om de versie te vinden en voer deze uit az upgrade om de versie te upgraden. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

  • De aks-preview Azure CLI-extensie versie 0.5.123 of hoger.

  • Registreer de KataVMIsolationPreview functie in uw Azure-abonnement.

  • AKS ondersteunt Pod Sandboxing (preview) op versie 1.24.0 en hoger met alle AKS-netwerkinvoegtoepassingen.

  • Gebruik de Kubernetes-opdrachtregelclient kubectl om een Kubernetes-cluster te beheren. Azure Cloud Shell wordt geleverd met kubectl. U kunt kubectl lokaal installeren met behulp van de opdracht az aks install-cli .

De Azure CLI-extensie aks-preview installeren

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Voer de volgende opdracht uit om de aks-preview-extensie te installeren:

az extension add --name aks-preview

Voer de volgende opdracht uit om bij te werken naar de nieuwste versie van de extensie die is uitgebracht:

az extension update --name aks-preview

De kataVMIsolationPreview-functievlag registreren

Registreer de KataVMIsolationPreview functievlag met behulp van de opdracht az feature register , zoals wordt weergegeven in het volgende voorbeeld:

az feature register --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"

Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven. Controleer de registratiestatus met behulp van de opdracht az feature show :

az feature show --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"

Wanneer de status Geregistreerd is, vernieuwt u de registratie van de Resourceprovider Microsoft.ContainerService met behulp van de opdracht az provider register:

az provider register --namespace "Microsoft.ContainerService"

Beperkingen

Hier volgen beperkingen met deze preview van Pod Sandboxing (preview):

Hoe het werkt

Om deze functionaliteit op AKS te bereiken, levert Kata Containers die worden uitgevoerd op de Azure Linux-containerhost voor AKS-stack hardware-afgedwongen isolatie. Pod Sandboxing breidt de voordelen uit van hardware-isolatie, zoals een afzonderlijke kernel voor elke Kata-pod. Hardware-isolatie wijst resources toe voor elke pod en deelt deze niet met andere Kata-containers of naamruimtecontainers die op dezelfde host worden uitgevoerd.

De oplossingsarchitectuur is gebaseerd op de volgende onderdelen:

Het implementeren van Pod Sandboxing met kata-containers is vergelijkbaar met de standaardwerkstroom voor containers voor het implementeren van containers. De implementatie bevat kata-runtime-opties die u in de podsjabloon kunt definiëren.

Als u deze functie met een pod wilt gebruiken, is het enige verschil om runtimeClassNamekata-mshv-vm-isolatie toe te voegen aan de podspecificatie.

Wanneer een pod gebruikmaakt van de runtimeClass kata-mshv-vm-isolatie , wordt er een VIRTUELE machine gemaakt die als pod-sandbox fungeert om de containers te hosten. Het standaardgeheugen van de VIRTUELE machine is 2 GB en de standaard-CPU is één kern als het containerresourcemanifest (containers[].resources.limits) geen limiet voor CPU en geheugen opgeeft. Wanneer u een limiet opgeeft voor CPU of geheugen in het containerresourcemanifest, heeft containers[].resources.limits.cpu de VIRTUELE machine het 1 argument om één + xCPU te gebruiken en containers[].resources.limits.memory met het 2 argument om 2 GB + yMemory op te geven. Containers kunnen alleen CPU en geheugen gebruiken voor de limieten van de containers. De containers[].resources.requests gegevens worden in deze preview genegeerd terwijl we werken om de CPU- en geheugenoverhead te verminderen.

Nieuw cluster implementeren

Voer de volgende stappen uit om een Azure Linux AKS-cluster te implementeren met behulp van de Azure CLI.

  1. Maak een AKS-cluster met behulp van de opdracht az aks create en geef de volgende parameters op:

    • --workload-runtime: Geef KataMshvVmIsolation op om de functie Pod Sandboxing in te schakelen in de knooppuntgroep. Met deze parameter voldoen deze andere parameters aan de volgende vereisten. Anders mislukt de opdracht en rapporteert deze een probleem met de bijbehorende parameters.
    • --os-sku: AzureLinux. Alleen de Besturingssysteem-sku van Azure Linux ondersteunt deze functie in deze preview-versie.
    • --node-vm-size: elke Azure-VM-grootte die een vm van de tweede generatie is en ondersteuning biedt voor geneste virtualisatie werkt. Bijvoorbeeld Dsv3-VM's .

    In het volgende voorbeeld wordt een cluster met de naam myAKSCluster gemaakt met één knooppunt in de myResourceGroup:

    az aks create --name myAKSCluster --resource-group myResourceGroup --os-sku AzureLinux --workload-runtime KataMshvVmIsolation --node-vm-size Standard_D4s_v3 --node-count 1
    
  2. Voer de volgende opdracht uit om toegangsreferenties op te halen voor het Kubernetes-cluster. Gebruik de opdracht az aks get-credentials en vervang de waarden voor de clusternaam en de naam van de resourcegroep.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Geef alle pods in alle naamruimten weer met behulp van de opdracht kubectl get pods .

    kubectl get pods --all-namespaces
    

Implementeren in een bestaand cluster

Als u deze functie wilt gebruiken met een bestaand AKS-cluster, moet aan de volgende vereisten worden voldaan:

  • Volg de stappen om de kataVMIsolationPreview-functievlag te registreren.
  • Controleer of op het cluster Kubernetes versie 1.24.0 en hoger wordt uitgevoerd.

Gebruik de volgende opdracht om Pod Sandboxing (preview) in te schakelen door een knooppuntgroep te maken om deze te hosten.

  1. Voeg een knooppuntgroep toe aan uw AKS-cluster met behulp van de opdracht az aks nodepool add . Geef de volgende parameters op:

    • --resource-group: Voer de naam in van een bestaande resourcegroep waarin u het AKS-cluster wilt maken.
    • --clusternaam: Voer een unieke naam in voor het AKS-cluster, zoals myAKSCluster.
    • --name: Voer een unieke naam in voor uw clusterknooppuntgroep, zoals nodepool2.
    • --workload-runtime: Geef KataMshvVmIsolation op om de functie Pod Sandboxing in te schakelen in de knooppuntgroep. Naast de --workload-runtime parameter voldoen deze andere parameters aan de volgende vereisten. Anders mislukt de opdracht en rapporteert deze een probleem met de bijbehorende parameters.
      • --os-sku: AzureLinux. Alleen de Besturingssysteem-sku van Azure Linux ondersteunt deze functie in de preview-versie.
      • --node-vm-size: elke Azure-VM-grootte die een vm van de tweede generatie is en ondersteuning biedt voor geneste virtualisatie werkt. Bijvoorbeeld Dsv3-VM's .

    In het volgende voorbeeld wordt een knooppuntgroep toegevoegd aan myAKSCluster met één knooppunt in nodepool2 in 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. Voer de opdracht az aks update uit om pod-sandboxing (preview) in te schakelen op het cluster.

    az aks update --name myAKSCluster --resource-group myResourceGroup
    

Een vertrouwde toepassing implementeren

Voer de volgende stappen uit om de implementatie van een vertrouwde toepassing op de gedeelde kernel in het AKS-cluster te demonstreren.

  1. Maak een bestand met de naam trusted-app.yaml om een vertrouwde pod te beschrijven en plak het volgende 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. Implementeer de Kubernetes-pod door de opdracht kubectl apply uit te voeren en geef het bestand trusted-app.yaml op:

    kubectl apply -f trusted-app.yaml
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    pod/trusted created
    

Een niet-vertrouwde toepassing implementeren

Voer de volgende stappen uit om de implementatie van een niet-vertrouwde toepassing in de pod-sandbox op het AKS-cluster te demonstreren.

  1. Maak een bestand met de naam untrusted-app.yaml om een niet-vertrouwde pod te beschrijven en plak het volgende 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"]
    

    De waarde voor runtimeClassNameSpec is kata-mhsv-vm-isolation.

  2. Implementeer de Kubernetes-pod door de opdracht kubectl apply uit te voeren en geef het bestand untrusted-app.yaml op:

    kubectl apply -f untrusted-app.yaml
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    pod/untrusted created
    

Configuratie van kernelisolatie controleren

  1. Als u toegang wilt krijgen tot een container in het AKS-cluster, start u een shellsessie door de opdracht kubectl exec uit te voeren. In dit voorbeeld opent u de container in de niet-vertrouwde pod.

    kubectl exec -it untrusted -- /bin/bash
    

    Kubectl maakt verbinding met uw cluster, wordt uitgevoerd /bin/sh in de eerste container binnen de niet-vertrouwde pod en stuurt de invoer- en uitvoerstromen van uw terminal door naar het proces van de container. U kunt ook een shellsessie starten voor de container die als host fungeert voor de vertrouwde pod.

  2. Nadat u een shellsessie naar de container van de niet-vertrouwde pod hebt gestart, kunt u opdrachten uitvoeren om te controleren of de niet-vertrouwde container wordt uitgevoerd in een pod-sandbox. U ziet dat deze een andere kernelversie heeft dan de vertrouwde container buiten de sandbox.

    Voer de volgende opdracht uit om de kernelversie te zien:

    uname -r
    

    Het volgende voorbeeld lijkt op uitvoer van de sandbox-kernel van de pod:

    root@untrusted:/# uname -r
    5.15.48.1-8.cm2
    
  3. Start een shellsessie naar de container van de vertrouwde pod om de kerneluitvoer te controleren:

    kubectl exec -it trusted -- /bin/bash
    

    Voer de volgende opdracht uit om de kernelversie te zien:

    uname -r
    

    Het volgende voorbeeld lijkt op uitvoer van de VIRTUELE machine waarop de vertrouwde pod wordt uitgevoerd. Dit is een andere kernel dan de niet-vertrouwde pod die wordt uitgevoerd in de pod-sandbox:

    5.15.80.mshv2-hvl1.m2
    

Opschonen

Wanneer u klaar bent met het evalueren van deze functie, moet u uw onnodige resources opschonen om Azure-kosten te voorkomen. Als u een nieuw cluster hebt geïmplementeerd als onderdeel van uw evaluatie of test, kunt u het cluster verwijderen met behulp van de opdracht az aks delete .

az aks delete --resource-group myResourceGroup --name myAKSCluster

Als u Pod Sandboxing (preview) hebt ingeschakeld voor een bestaand cluster, kunt u de pod(s) verwijderen met behulp van de kubectl delete pod-opdracht .

kubectl delete pod pod-name

Volgende stappen

Meer informatie over Azure Dedicated-hosts voor knooppunten met uw AKS-cluster voor het gebruik van hardware-isolatie en controle over onderhoudsgebeurtenissen van het Azure-platform.