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ťteaz 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á.
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:
- Hostitel kontejneru Azure Linux pro AKS
- Microsoft Hyper-V Hypervisor
- Linuxové jádro Dom0 vyladěné v Azure
- Open source Cloud-Hypervisor Virtual Machine Monitor (VMM)
- Integrace s architekturou kontejneru Kata
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í runtimeClassName kata-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.
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 \ --generate-ssh-keys
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
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:
- Postupujte podle pokynů k registraci příznaku funkce KataVMIsolationPreview .
- Ověřte, že cluster používá Kubernetes verze 1.24.0 a vyšší.
Pomocí následujícího příkazu povolte sandboxing podů (Preview) vytvořením fondu uzlů, který ho bude hostovat.
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
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.
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"]
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.
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
.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
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.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
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.
Azure Kubernetes Service