Cvičení – konfigurace Azure Policy pro Kubernetes v clusteru AKS
Azure Policy pro Kubernetes pomáhá organizacím dodržovat zásady správného řízení a zákonné požadavky a implementovat osvědčené postupy a organizační konvence pro cloudová prostředí.
Vývojové týmy ve vaší společnosti používají AKS (Azure Kubernetes Service) jako vývojovou platformu. Uvědomujete si, že nejlepším způsobem správy nákladů je vynucování obchodních pravidel, která definují limity prostředků úloh. Chcete zajistit, aby vývojáři mohli nasazovat úlohy jenom v rámci specifických limitů pro přidělení procesoru a paměti. Systém musí zabránit úlohám, které překračují tyto limity.
V tomto cvičení povolíte službu Azure Policy pro AKS ve vašem clusteru a přidáte limity prostředků procesoru a paměti kontejnerů clusteru Kubernetes, které by neměly překročit zadané zásady omezení . Pak otestujete, jestli zásada odmítne plánování úloh, které překračují parametry prostředku zásady.
Povolení poskytovatelů prostředků ContainerService a PolicyInsights
Přihlaste se do Azure Cloud Shellu pomocí svého účtu Azure. Vyberte verzi Bash prostředí Cloud Shell.
Azure Policy pro AKS vyžaduje verzi clusteru 1.14 nebo novější. Spuštěním následujícího skriptu ověřte verzi clusteru AKS:
az aks list
Ujistěte se, že oznámená verze clusteru je 1.14 nebo novější.
Spuštěním příkazu
az provider register
zaregistrujte poskytovatele Azure Kubernetes Service:az provider register --namespace Microsoft.ContainerService
Spuštěním příkazu
az provider register
zaregistrujte poskytovatele Azure Policy:az provider register --namespace Microsoft.PolicyInsights
Spuštěním příkazu povolte instalaci doplňku
az feature register
:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Zkontrolujte, jestli registrace proběhla úspěšně, a to dotazováním tabulky seznamu funkcí. Ke spuštění dotazu použijte příkaz
az feature list
. Dokončení registrace funkce může trvat několik minut, takže je potřeba pravidelně kontrolovat výsledek.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Pokud vyprší časový limit relace Cloud Shellu, můžete proces registrace sledovat prostřednictvím webu Azure Portal a podokna onboardingu Preview.
Spusťte příkaz,
az provider register
kterým se aktualizace rozšíří, jakmile potvrdíte, že příkaz dotazu seznamu funkcí zobrazuje položku Registrováno:az provider register -n Microsoft.ContainerService
Povolení služby Azure Policy v clusteru
Pokud chcete pro cluster povolit doplněk
azure-policy
, spusťte příkazaz aks enable-addons
:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Ověřte, že v oboru názvů
kube-system
je nainstalovaný pod azure-policy a v oboru názvůgatekeeper-system
pod gatekeeper. Provedete to pomocí následujících příkazůkubectl get pods
:kubectl get pods -n kube-system
Výstup by měl vypadat nějak takto:
NAME READY STATUS RESTARTS AGE azure-policy-78c8d74cd4-7fqn2 1/1 Running 0 12m azure-policy-webhook-545c898766-gsjrc 1/1 Running 0 12m ...
kubectl get pods -n gatekeeper-system
Výstup by měl vypadat nějak takto:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Nakonec spuštěním příkazu
az aks show
ověřte, jestli je nainstalovaný nejnovější doplněk. Tento příkaz načte informace o konfiguraci pro váš cluster.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
Výstup by měl vypadat nějak takto:
{ "config": null, "enabled": true, "identity": null }
Teď jste připraveni přejít na web Azure Portal a nakonfigurovat zásady s názvem Kontejnery clusteru Kubernetes– limity prostředků procesoru a paměti by neměly překročit zadané limity.
Přiřazení definice předdefinované zásady
Novou zásadu Azure nakonfigurujete pomocí služby Zásady na webu Azure Portal.
Přihlaste se k portálu Azure.
Vyhledejte na webu Azure Portal službu Zásady. Uděláte to tak, že na panelu hledání v horní části portálu vyhledáte a vyberete Zásady.
Vyberte službu Zásady v seznamu služeb, jak vidíte níže:
Otevře se řídicí panel Zásady s přehledem, který zobrazuje všechny přiřazené zásady, stav prostředků a informace o tom, jak jsou ovlivněné zásadami. Pokud jste nepřiřadili žádné zásady, řídicí panel je prázdný.
V levém podokně nabídek v části Vytváření vyberte Zadání:
Vzpomeňte si z předchozího popisu, že máte dvě možnosti vytvoření přiřazení zásad: přiřadíte iniciativu nebo zásadu. V horním řádku nabídek vyberte Přiřadit zásadu:
Zobrazí se podokno Přiřadit zásadu .
Na kartě Základy zadejte následující hodnoty pro každé nastavení a vytvořte zásadu.
Nastavení Hodnota Scope Obor Vyberte tlačítko se třemi tečky. Zobrazí se podokno Obor . V části Předplatné vyberte předplatné, které obsahuje vaši skupinu prostředků. V části Skupina prostředků vyberte rg-akscostsaving a pak vyberte tlačítko Vybrat . Vyloučení Nechte prázdné. Základy Definice zásady Vyberte tlačítko se třemi tečky. Zobrazí se podokno Dostupné definice . Do vyhledávacího pole vyfiltrujte výběr zadáním procesoru. Na kartě Definice zásad vyberte kontejnery clusteru Kubernetes– limity prostředků procesoru a paměti by neměly překročit zadané limity a pak vyberte Přidat. Název přiřazení Přijměte výchozí nastavení. Popis Nechte prázdné. Vynucení zásad Ujistěte se, že je tato možnost nastavená na Povoleno. Přiřadil Přijměte výchozí nastavení. Tady je příklad vyplněné karty Základní informace.
Vyberte kartu Parametry a zadejte parametry pro danou zásadu.
Pro každé nastavení parametru nastavte následující hodnoty:
Nastavení Hodnota Maximální povolený počet jednotek procesoru Nastavte hodnotu na 200m. Zásada porovnává tuto hodnotu s ohledem na hodnotu požadavků na prostředky úlohy a hodnotu limitu úlohy, jak jsou specifikované v souboru manifestu úlohy. Maximální povolený počet bajtů paměti Nastavte hodnotu na 256Mi. Zásada porovnává tuto hodnotu s ohledem na hodnotu požadavků na prostředky úlohy a hodnotu limitu úlohy, jak jsou specifikované v souboru manifestu úlohy. Tady je příklad vyplněné karty Parametry:
Vyberte kartu Náprava. Na této kartě vyberete, jak nová zásada ovlivňuje prostředky, které už existují. Ve výchozím nastavení nová zásada kontroluje pouze nově vytvořené prostředky. Ponechte standardní výchozí konfiguraci.
Tady je příklad vyplněné karty Náprava:
Vyberte kartu Zkontrolovat a vytvořit. Zkontrolujte hodnoty, které jste vybrali, a pak vyberte Vytvořit.
Důležité
Pokud používáte existující cluster AKS, může přiřazení zásad trvat přibližně 15 minut.
Otestování požadavků na prostředky
Poslední krok spočívá v otestování nové zásady. Nasaďte testovací úlohu s požadavky na prostředky a limity, které porušují nové zásady. Pokud vše proběhne správně, server vrátí chybu, která hlásí odepření zásadou.
Otevřete Azure Cloud Shell a ujistěte se, že je vybraná verze Bash tohoto prostředí.
Pomocí integrovaného editoru vytvořte soubor manifestu pro nasazení Kubernetes. Jako název souboru zadejte
test-policy.yaml
:code test-policy.yaml
Tip
Cloud Shell zahrnuje integrovaný editor souborů. Editor Cloud Shell podporuje funkce, jako je zvýraznění jazyka, paleta příkazů a průzkumník souborů. Pro jednoduché vytváření a úpravy souborů spusťte editor spuštěním
code .
v terminálu Cloud Shellu. Tato akce otevře editor s aktivním pracovním adresářem nastaveným v terminálu. Pokud chcete soubor manifestu přímo otevřít pro rychlé úpravy, spusťte příkazcode test-policy.yaml
. Tento příkaz otevře editor bez průzkumníka souborů.Vložte do souboru následující text:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 500m memory: 256Mi limits: cpu: 1000m memory: 500Mi
Stisknutím kombinace kláves Ctrl+S soubor uložte a stisknutím kombinace kláves Ctrl+Q zavřete editor.
Spuštěním
kubectl apply
příkazu použijte konfiguraci a nasaďte aplikaci vcostsavings
oboru názvů:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Výstup by měl vypadat přibližně takto:
Error from server ( [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>) : error when creating "test-deploy.yml" : admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
Všimněte si, jak webhook přístupu
validation.gatekeeper.sh
zamítl požadavek na naplánování podu.Otevřete soubor manifestu a opravte požadavek na prostředky:
code test-policy.yaml
Nahraďte text následujícím textem:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 256Mi limits: cpu: 200m memory: 256Mi
Stisknutím kombinace kláves Ctrl+S soubor uložte a stisknutím kombinace kláves Ctrl+Q zavřete editor.
Spuštěním
kubectl apply
příkazu použijte konfiguraci a nasaďte aplikaci vcostsavings
oboru názvů:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Zobrazí se následující výstup:
pod/nginx created
Získejte pody nově vytvořených podů v
costsavings
oboru názvů.kubectl get pods --namespace costsavings
Během několika sekund se pody přecházejí do
Running
stavu.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Jakmile uvidíte spuštěné pody, stiskněte Ctrl+C .