Sandboxing podů (Preview) se službou Azure Kubernetes Service (AKS)

Kvůli zabezpečení a ochraně úloh kontejneru před nedůvěryhodným nebo potenciálně škodlivým kódem teď AKS obsahuje mechanismus označovaný jako Sandboxing podů (Preview). Sandboxing podů poskytuje hranici izolace mezi aplikací kontejneru a sdíleným jádrem a výpočetními prostředky hostitele kontejneru. Například procesor, paměť a sítě. Sandboxing podů doplňuje další bezpečnostní opatření nebo ovládací prvky ochrany dat s vaší celkovou architekturou, které vám pomůžou splnit zákonné, oborové nebo požadavky na dodržování zásad správného řízení pro zabezpečení citlivých informací.

Tento článek vám pomůže pochopit tuto novou funkci a jak ji implementovat.

Požadavky

  • Azure CLI verze 2.44.1 nebo novější. Spuštěním příkazu vyhledejte az --version verzi a spusťte az upgrade upgrade verze. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

  • Rozšíření aks-preview Azure CLI verze 0.5.123 nebo novější.

  • KataVMIsolationPreview Zaregistrujte funkci ve svém předplatném Azure.

  • AKS podporuje sandboxing podů (Preview) ve verzi 1.24.0 a vyšší se všemi síťovými moduly plug-in AKS.

  • Ke správě clusteru Kubernetes použijte klient příkazového řádku Kubernetes kubectl. Součástí azure Cloud Shellu je kubectl. Kubectl můžete nainstalovat místně pomocí příkazu az aks install-cli .

Instalace rozšíření Azure CLI aks-Preview

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Pokud chcete nainstalovat rozšíření aks-preview, spusťte následující příkaz:

az extension add --name aks-preview

Spuštěním následujícího příkazu aktualizujte nejnovější verzi vydaného rozšíření:

az extension update --name aks-preview

Registrace příznaku funkce KataVMIsolationPreview

KataVMIsolationPreview Příznak funkce zaregistrujte pomocí příkazu az feature register, jak je znázorněno v následujícím příkladu:

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

Zobrazení stavu Zaregistrované trvá několik minut. Pomocí příkazu az feature show ověřte stav registrace:

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

Pokud se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí příkazu az provider register :

az provider register --namespace "Microsoft.ContainerService"

Omezení

Následující omezení platí pro tuto verzi Preview sandboxingu podů (Preview):

  • Kontejnery Kata nemusí dosáhnout limitů výkonu vstupně-výstupních operací za sekundu, ke kterým mohou tradiční kontejnery přistupovat ve službě Azure Files a v místním ssd s vysokým výkonem.

  • Microsoft Defender for Containers nepodporuje posouzení podů modulu runtime Kata.

  • Kata hostitelská síť není podporovaná.

  • AKS nepodporuje ovladače rozhraní úložiště kontejnerů a ovladač CSI úložiště tajných kódů v této verzi Preview.

Jak to funguje

Aby bylo dosaženo této funkce v AKS, kata containers běžící na hostiteli kontejneru Azure Linux pro zásobník AKS poskytuje hardwarově vynucenou izolaci. Sandboxing podů rozšiřuje výhody izolace hardwaru, jako je samostatné jádro pro každý pod Kata. Izolace hardwaru přiděluje prostředky pro každý pod a nesdílí je s jinými kontejnery Kata Containers ani kontejnery oborů názvů spuštěnými na stejném hostiteli.

Architektura řešení je založená na následujících komponentách:

Nasazení sandboxu podů pomocí kontejnerů Kata se podobá standardnímu kontejnerovanému pracovnímu postupu pro nasazení kontejnerů. Nasazení zahrnuje možnosti kata-runtime, které můžete definovat v šabloně podu.

Pokud chcete tuto funkci použít s podem, jediným rozdílem je přidání runtimeClassNamekata-mshv-vm-isolation do specifikace podu.

Pokud pod používá modul runtimeClass kata-mshv-vm-isolation , vytvoří virtuální počítač, který bude sloužit jako sandbox podu pro hostování kontejnerů. Výchozí paměť virtuálního počítače je 2 GB a výchozí procesor je jedno jádro, pokud manifestcontainers[].resources.limits prostředků kontejneru () nezadá limit procesoru a paměti. Když v manifestu prostředků kontejneru zadáte limit procesoru nebo paměti, virtuální počítač má containers[].resources.limits.cpu s argumentem 1 použít jeden + xCPU a containers[].resources.limits.memory s 2 argumentem pro určení 2 GB + yMemory. Kontejnery můžou na omezení kontejnerů používat pouze procesor a paměť. V containers[].resources.requests této verzi Preview se ignorují, zatímco pracujeme na snížení režie procesoru a paměti.

Nasazení nového clusteru

Pomocí Azure CLI nasaďte cluster Azure Linux AKS pomocí následujícího postupu.

  1. Vytvořte cluster AKS pomocí příkazu az aks create a zadejte následující parametry:

    • --workload-runtime: Zadejte KataMshvVmIsolation , aby se povolila funkce Sandboxing podu ve fondu uzlů. S tímto parametrem musí tyto další parametry splňovat následující požadavky. Jinak příkaz selže a nahlásí problém s odpovídajícími parametry.
    • --os-sku: AzureLinux. Tuto funkci v této verzi Preview podporuje pouze skladová položka Azure Linuxu.
    • --node-vm-size: Jakákoli velikost virtuálního počítače Azure, která je virtuální počítač 2. generace a podporuje vnořené virtualizace, funguje. Například virtuální počítače Dsv3 .

    Následující příklad vytvoří cluster myAKSCluster s jedním uzlem v 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. Spuštěním následujícího příkazu získejte přihlašovací údaje pro přístup ke clusteru Kubernetes. Použijte příkaz az aks get-credentials a nahraďte hodnoty názvu clusteru a názvu skupiny prostředků.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Pomocí příkazu kubectl get pods vypište všechny pody ve všech oborech názvů.

    kubectl get pods --all-namespaces
    

Nasazení do existujícího clusteru

Pokud chcete tuto funkci použít se stávajícím clusterem AKS, musí být splněny následující požadavky:

Pomocí následujícího příkazu povolte sandboxing podů (Preview) vytvořením fondu uzlů, který ho bude hostovat.

  1. Přidejte do clusteru AKS fond uzlů pomocí příkazu az aks nodepool add . Zadejte následující parametry:

    • --resource-group: Zadejte název existující skupiny prostředků, ve které chcete vytvořit cluster AKS.
    • --cluster-name: Zadejte jedinečný název clusteru AKS, například myAKSCluster.
    • --name: Zadejte jedinečný název fondu uzlů clusterů, například nodepool2.
    • --workload-runtime: Zadejte KataMshvVmIsolation , aby se povolila funkce Sandboxing podu ve fondu uzlů. Spolu s parametrem --workload-runtime musí tyto další parametry splňovat následující požadavky. Jinak příkaz selže a nahlásí problém s odpovídajícími parametry.
      • --os-sku: AzureLinux. Tuto funkci podporuje pouze skladová položka Azure Linuxu ve verzi Preview.
      • --node-vm-size: Jakákoli velikost virtuálního počítače Azure, která je virtuální počítač 2. generace a podporuje vnořené virtualizace, funguje. Například virtuální počítače Dsv3 .

    Následující příklad přidá fond uzlů do myAKSCluster s jedním uzlem v nodepool2 v 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. Spuštěním příkazu az aks update povolte v clusteru sandboxing podů (Preview).

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

Nasazení důvěryhodné aplikace

Pokud chcete předvést nasazení důvěryhodné aplikace ve sdíleném jádru v clusteru AKS, proveďte následující kroky.

  1. Vytvořte soubor s názvem trusted-app.yaml , který popisuje důvěryhodný pod, a vložte následující 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. Nasaďte pod Kubernetes spuštěním příkazu kubectl apply a zadejte soubor trusted-app.yaml :

    kubectl apply -f trusted-app.yaml
    

    Výstup příkazu se podobá následujícímu příkladu:

    pod/trusted created
    

Nasazení nedůvěryhodné aplikace

Pokud chcete předvést nasazení nedůvěryhodné aplikace do sandboxu podů v clusteru AKS, proveďte následující kroky.

  1. Vytvořte soubor s názvem nedůvěryhodný soubor app.yaml , který popisuje nedůvěryhodný pod, a vložte následující 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"]
    

    Hodnota runtimeClassNameSpec je kata-mhsv-vm-isolation.

  2. Nasaďte pod Kubernetes spuštěním příkazu kubectl apply a zadejte soubor untrusted-app.yaml :

    kubectl apply -f untrusted-app.yaml
    

    Výstup příkazu se podobá následujícímu příkladu:

    pod/untrusted created
    

Ověření konfigurace izolace jádra

  1. Pokud chcete získat přístup ke kontejneru v clusteru AKS, spusťte relaci prostředí spuštěním příkazu kubectl exec . V tomto příkladu přistupujete ke kontejneru uvnitř nedůvěryhodného podu.

    kubectl exec -it untrusted -- /bin/bash
    

    Kubectl se připojí k vašemu clusteru, spustí /bin/sh se uvnitř prvního kontejneru v nedůvěryhodném podu a předá vstupní a výstupní streamy vašeho terminálu do procesu kontejneru. Můžete také spustit relaci prostředí s kontejnerem, který je hostitelem důvěryhodného podu.

  2. Po spuštění relace prostředí pro kontejner nedůvěryhodného podu můžete spustit příkazy, které ověří, že je nedůvěryhodný kontejner spuštěný v sandboxu podu. Všimněte si, že má v porovnání s důvěryhodným kontejnerem mimo sandbox jinou verzi jádra.

    Verzi jádra zobrazíte spuštěním následujícího příkazu:

    uname -r
    

    Následující příklad se podobá výstupu z jádra sandboxu podu:

    root@untrusted:/# uname -r
    5.15.48.1-8.cm2
    
  3. Spusťte relaci prostředí s kontejnerem důvěryhodného podu a ověřte výstup jádra:

    kubectl exec -it trusted -- /bin/bash
    

    Verzi jádra zobrazíte spuštěním následujícího příkazu:

    uname -r
    

    Následující příklad se podobá výstupu z virtuálního počítače, na kterém běží důvěryhodný pod, což je jiné jádro než nedůvěryhodný pod spuštěný v sandboxu podu:

    5.15.80.mshv2-hvl1.m2
    

Vyčištění

Až dokončíte vyhodnocení této funkce, abyste se vyhnuli poplatkům za Azure, vyčistěte nepotřebné prostředky. Pokud jste v rámci testování nebo testování nasadili nový cluster, můžete cluster odstranit pomocí příkazu az aks delete .

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

Pokud jste v existujícím clusteru povolili sandboxing podů (Preview), můžete je odebrat pomocí příkazu kubectl delete pod .

kubectl delete pod pod-name

Další kroky

Přečtěte si další informace o vyhrazených hostitelích Azure pro uzly s clusterem AKS, abyste mohli používat izolaci hardwaru a kontrolu nad událostmi údržby platformy Azure.