Oefening: Azure Policy configureren voor Kubernetes op een AKS-cluster

Voltooid

Azure Policy voor Kubernetes helpt organisaties om te voldoen aan governance- en wettelijke vereisten en best practices en organisatieconventies voor cloudomgevingen te implementeren.

Ontwikkelteams in uw bedrijf gebruiken Azure Kubernetes Service (AKS) als een ontwikkelplatform. U realiseert zich dat de beste manier om kosten te beheren is door bedrijfsregels af te dwingen die workloadresourcelimieten definiëren. U wilt ervoor zorgen dat ontwikkelaars alleen werkbelastingen binnen specifieke limieten voor CPU en geheugentoewijzing kunnen implementeren. Het systeem moet werkbelastingen voorkomen die deze limieten overschrijden.

In deze oefening schakelt u Azure Policy voor AKS in op uw cluster en voegt u de CPU- en geheugenresourcelimieten van Kubernetes-clustercontainers toe die niet groter mogen zijn dan het opgegeven limietbeleid . Vervolgens test u of het beleid planningsworkloads weigert die de resourceparameters van het beleid overschrijden.

De resourceproviders ContainerService en PolicyInsights inschakelen

  1. Meld u met behulp van uw Azure-account aan bij Azure Cloud Shell. Selecteer de Bash-versie van Cloud Shell.

  2. Voor Azure Policy voor AKS is clusterversie 1.14 of hoger vereist. Voer het volgende script uit om de versie van het AKS-cluster te valideren:

    az aks list
    

    Controleer of de gerapporteerde clusterversie 1.14 of hoger is.

  3. Registreer de Azure Kubernetes Service-provider door de opdracht az provider register uit te voeren:

    az provider register --namespace Microsoft.ContainerService
    
  4. Registreer de Azure Policy-provider door de opdracht az provider register uit te voeren:

    az provider register --namespace Microsoft.PolicyInsights
    
  5. Schakel de installatie van de invoegtoepassing in door de opdracht uit te az feature register voeren:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  6. Controleer of de registratie is geslaagd door een query uit te voeren op de tabel met de functielijst. Gebruik de opdracht az feature list om de query uit te voeren. Het kan enkele minuten duren voordat de registratie van de functie is voltooid, zodat u het resultaat periodiek moet controleren.

    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')].   {Name:name,State:properties.state}"
    

    Als er een time-out voor de Cloud Shell-sessie optreedt, kunt u het registratieproces in Azure Portal volgen met behulp van het deelvenster Preview van onboarding.

  7. Voer de az provider register opdracht uit om de update door te geven nadat u hebt bevestigd dat de queryopdracht voor de functielijst 'Geregistreerd' wordt weergegeven:

    az provider register -n Microsoft.ContainerService
    

Azure Policy inschakelen in uw cluster

  1. Voer de opdracht az aks enable-addons uit om de invoegtoepassing azure-policy voor het cluster in te schakelen:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. Controleer of de pod azure-policy is geïnstalleerd in de naamruimte kube-system en of de pod gatekeeper is geïnstalleerd in de naamruimte gatekeeper-system. Voer hiertoe de volgende opdrachten kubectl get pods uit:

    kubectl get pods -n kube-system
    

    Uw uitvoer moet er ongeveer als volgt uitzien:

    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
    

    Uw uitvoer moet er ongeveer als volgt uitzien:

    NAME                                            READY   STATUS    RESTARTS   AGE
    gatekeeper-controller-manager-d5cd87796-5tmhq   1/1     Running   0          15m
    ...
    
  3. Controleer ten slotte of de nieuwste invoegtoepassing is geïnstalleerd door de opdracht az aks show uit te voeren. Met deze opdracht worden de configuratiegegevens voor het cluster opgehaald.

    az aks show \
     --resource-group $RESOURCE_GROUP\
     --name $AKS_CLUSTER_NAME \
     -o table --query "addonProfiles.azurepolicy"
    

    Uw uitvoer moet er ongeveer als volgt uitzien:

    {
        "config": null,
        "enabled": true,
        "identity": null
    }
    

    U bent nu klaar om over te schakelen naar Azure Portal om het beleid met de naam Kubernetes-clustercontainers CPU- en geheugenresourcelimieten te configureren, mag de opgegeven limieten niet overschrijden.

Een ingebouwde beleidsdefinitie toewijzen

Gebruik de service Policy in Azure Portal om de nieuwe Azure Policy te configureren.

  1. Meld u aan bij de Azure-portal.

  2. Zoek de service Policy in Azure Portal. Hiervoor zoekt en selecteert u beleid in de zoekbalk boven aan de portal.

  3. Selecteer de service Policy in de lijst met services, zoals hier wordt weergegeven:

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

    Het Policy-dashboard wordt geopend met een overzicht van alle toegewezen beleidsregels, de status van resources en de invloed van de beleidsregels op deze resources. Als u geen beleidsregels hebt toegewezen, is het dashboard leeg.

  4. Selecteer Opdrachten in het linkermenuvenster onder Ontwerpen:

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

  5. Zoals u weet, hebt u twee opties voor het maken van een beleidstoewijzing: u wijst een initiatief of beleid toe. Selecteer beleid toewijzen in de bovenste menubalk:

    Screenshot that shows the new policy assignment option.

    Het deelvenster Beleid toewijzen wordt weergegeven.

  6. Voer op het tabblad Basisinformatie de volgende waarden in voor elke instelling om uw beleid te maken.

    Instelling Weergegeven als
    Scope
    Bereik Selecteer de knop met het beletselteken. Het deelvenster Bereik wordt weergegeven. Selecteer onder abonnement het abonnement dat uw resourcegroep bevat. Selecteer voor Resourcegroep rg-akscostsaving en selecteer vervolgens de knop Selecteren.
    Uitsluitingen Leeg laten.
    Basisinstellingen
    Beleidsdefinitie Selecteer de knop met het beletselteken. Het deelvenster Beschikbare definities wordt weergegeven. Filter de selectie in het zoekvak door CPU in te voeren. Selecteer op het tabblad Beleidsdefinities de CPU- en geheugenresourcelimieten voor Kubernetes-clustercontainers mogen de opgegeven limieten niet overschrijden en selecteer vervolgens Toevoegen.
    Naam van toewijzing Accepteer de standaardwaarde.
    Beschrijving Leeg laten.
    Beleidsafdwinging Zorg ervoor dat deze optie is ingesteld op Ingeschakeld.
    Toegewezen door Accepteer de standaardwaarde.

    Hier volgt een voorbeeld van het ingevulde tabblad Basisinformatie:

    Screenshot that shows the information captured in the Basics tab.

  7. Selecteer het tabblad Parameters om de parameters voor het beleid op te geven.

  8. Stel de volgende waarden in voor elk van de parameterinstellingen:

    Instelling Weergegeven als
    Maximaal toegestaan aantal CPU-eenheden Stel de waarde in op 200m. Het beleid vergelijkt deze waarde met zowel de aangevraagde resources voor de werkbelasting als de waarde van de limiet voor de werkbelasting, opgegeven in het manifestbestand van de werkbelasting.
    Maximaal toegestane aantal geheugenbytes Stel de waarde in op 256Mi. Het beleid vergelijkt deze waarde met zowel de aangevraagde resources voor de werkbelasting als de waarde van de limiet voor de werkbelasting, opgegeven in het manifestbestand van de werkbelasting.

    Hier volgt een voorbeeld van het ingevulde tabblad Parameters:

    Screenshot that shows the information captured in the Parameters tab.

  9. Selecteer het tabblad Herstel . Op dit tabblad selecteert u hoe het nieuwe beleid van invloed is op resources die al bestaan. Standaard controleert het nieuwe beleid alleen nieuw gemaakte resources. Behoud de standaardconfiguratie.

    Hier volgt een voorbeeld van het ingevulde tabblad Herstel:

    Screenshot that shows the information captured in the Remediation tab.

  10. Selecteer het tabblad Beoordelen en maken . Controleer de waarden die u hebt gekozen en selecteer vervolgens Maken.

Belangrijk

Als u een bestaand AKS-cluster gebruikt, kan het ongeveer 15 minuten duren voordat de beleidstoewijzing is toegepast.

Resourceaanvragen testen

Als laatste stap test u het nieuwe beleid. Implementeer uw testworkload met resourceaanvragen en limieten die het nieuwe beleid schenden. Als alles correct verloopt, retourneert de server een fout met de melding geweigerd door beleid.

  1. Open Azure Cloud Shell en zorg ervoor dat u de Bash-versie van Cloud Shell selecteert.

  2. Maak een manifestbestand voor de Kubernetes-implementatie met behulp van de geïntegreerde editor. Roep het bestand test-policy.yaml aan:

    code test-policy.yaml
    

    Tip

    Cloud Shell bevat een geïntegreerde bestandseditor. Cloud Shell-editor ondersteunt functies zoals taalmarkeringen, het opdrachtenpalet en een verkenner. Start de editor voor het eenvoudig maken en bewerken van bestanden door deze uit te voeren code . in de Cloud Shell-terminal. Met deze actie wordt de editor geopend met uw actieve werkmapset in de terminal. Voer code test-policy.yaml uit om het manifestbestand rechtstreeks te openen voor snelle bewerking. Met deze opdracht wordt de editor geopend zonder de bestandsverkenner.

  3. Plak de volgende tekst in het bestand:

    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. Druk op Ctrl+S om het bestand op te slaan en druk vervolgens op Ctrl+Q om de editor te sluiten.

  5. Voer de kubectl apply opdracht uit om de configuratie toe te passen en de toepassing in de costsavings naamruimte te implementeren:

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

    De uitvoer moet er ongeveer als volgt uitzien:

    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>
    

    U ziet hoe de toegangswebhook, validation.gatekeeper.sh, de aanvraag om de pod te plannen heeft geweigerd.

  6. Open het manifestbestand en corrigeer de resourceaanvraag:

    code test-policy.yaml
    

    Vervang de tekst door de volgende tekst:

    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. Druk op Ctrl+S om het bestand op te slaan en druk vervolgens op Ctrl+Q om de editor te sluiten.

  8. Voer de kubectl apply opdracht uit om de configuratie toe te passen en de toepassing in de costsavings naamruimte te implementeren:

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

    U krijgt de volgende uitvoer:

    pod/nginx created
    
  9. Haal de pods op van de zojuist gemaakte pods in uw costsavings naamruimte.

    kubectl get pods --namespace costsavings
    

    Binnen een paar seconden gaan de pods over naar de Running status.

    NAME    READY   STATUS    RESTARTS   AGE
    nginx   1/1     Running   0          50s
    
  10. Druk op Ctrl+C om te stoppen met kijken zodra de pods worden uitgevoerd.