Cvičení – konfigurace Azure Policy pro Kubernetes v clusteru AKS

Dokončeno

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

  1. Přihlaste se do Azure Cloud Shellu pomocí svého účtu Azure. Vyberte verzi Bash prostředí Cloud Shell.

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

  3. Spuštěním příkazu az provider register zaregistrujte poskytovatele Azure Kubernetes Service:

    az provider register --namespace Microsoft.ContainerService
    
  4. Spuštěním příkazu az provider register zaregistrujte poskytovatele Azure Policy:

    az provider register --namespace Microsoft.PolicyInsights
    
  5. Spuštěním příkazu povolte instalaci doplňku az feature register :

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  6. 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.

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

  1. Pokud chcete pro cluster povolit doplněk azure-policy, spusťte příkaz az aks enable-addons:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. 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
    ...
    
  3. 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.

  1. Přihlaste se k portálu Azure.

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

  3. Vyberte službu Zásady v seznamu služeb, jak vidíte níže:

    Screenshot of the general Azure portal search box with a result that shows the Azure Policy service.

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

  4. V levém podokně nabídek v části Vytváření vyberte Zadání:

    Screenshot of the Policy service navigation panel that shows the location of the Assignments option.

  5. 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:

    Screenshot that shows the new policy assignment option.

    Zobrazí se podokno Přiřadit zásadu .

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

    Screenshot that shows the information captured in the Basics tab.

  7. Vyberte kartu Parametry a zadejte parametry pro danou zásadu.

  8. 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:

    Screenshot that shows the information captured in the Parameters tab.

  9. 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:

    Screenshot that shows the information captured in the Remediation tab.

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

  1. Otevřete Azure Cloud Shell a ujistěte se, že je vybraná verze Bash tohoto prostředí.

  2. 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říkaz code test-policy.yaml. Tento příkaz otevře editor bez průzkumníka souborů.

  3. 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
    
  4. Stisknutím kombinace kláves Ctrl+S soubor uložte a stisknutím kombinace kláves Ctrl+Q zavřete editor.

  5. Spuštěním kubectl apply příkazu použijte konfiguraci a nasaďte aplikaci v costsavings 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.

  6. 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
    
  7. Stisknutím kombinace kláves Ctrl+S soubor uložte a stisknutím kombinace kláves Ctrl+Q zavřete editor.

  8. Spuštěním kubectl apply příkazu použijte konfiguraci a nasaďte aplikaci v costsavings oboru názvů:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    Zobrazí se následující výstup:

    pod/nginx created
    
  9. 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
    
  10. Jakmile uvidíte spuštěné pody, stiskněte Ctrl+C .