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

Voltooid

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

Ontwikkelteams in uw bedrijf omarmen 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 workloads alleen binnen specifieke limieten voor CPU- en geheugentoewijzing kunnen implementeren. Het systeem moet voorkomen dat workloads die deze limieten overschrijden, worden uitgevoerd.

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

De ContainerService- en PolicyInsights-resourceproviders inschakelen

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

  2. Voor Azure Policy voor AKS moet de clusterversie 1.14 of hoger zijn. Voer het volgende script uit om de AKS-clusterversie te valideren:

    az aks list
    

    Zorg ervoor dat 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 az feature register uit te 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 optreedt voor de Cloud Shell-sessie, kunt u het registratieproces volgen via Azure Portal met behulp van het deelvenster preview-onboarding.

  7. Voer de opdracht az provider register 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 azure-policy-invoegtoepassing voor uw cluster in te schakelen:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. Controleer of de azure-policy-pod is geïnstalleerd in de kube-system naamruimte en of de gatekeeper-pod is geïnstalleerd in de gatekeeper-system naamruimte. Voer hiervoor de volgende kubectl get pods opdrachten 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 az aks show opdracht uit te voeren. Met deze opdracht worden de configuratiegegevens voor uw 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, mogen de opgegeven limietenniet overschrijden.

Een ingebouwde beleidsdefinitie toewijzen

Als u het nieuwe Azure Policy wilt configureren, gebruikt u de Beleidsservice in Azure Portal.

  1. Meld u aan bij de Azure Portal.

  2. Zoek de Policy-service in Azure Portal. Hiervoor zoekt u in de zoekbalk boven aan het portaal naar en selecteert u Beleid.

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

    Schermopname van het zoekvak van de algemene Azure-portal met een resultaat waarin de Azure Policy-service wordt weergegeven.

    Het dashboard Beleid wordt geopend met een overzicht van al uw toegewezen beleidsregels, de status van resources en de invloed van het beleid op deze beleidsregels. Als u geen beleidsregels hebt toegewezen, is het dashboard leeg.

  4. In het linkermenuvenster, onder Ontwerp, selecteer Toewijzingen:

    Schermopname van het navigatiedeelvenster van de beleidsservice met de locatie van de optie Toewijzingen.

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

    Schermafbeelding die de optie voor nieuwe beleidstoewijzing toont.

    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 Waarde
    Bereik
    Draagwijdte Selecteer de knop met het beletselteken. Het deelvenster Bereik wordt weergegeven. Selecteer onder abonnementhet abonnement dat uw resourcegroep bevat. Selecteer voor Resourcegroeprg-akscostsavingen selecteer de knop vervolgens.
    Uitsluitingen Laat leeg.
    Basisprincipes
    Beleidsdefinitie Selecteer de knop met het beletselteken. Het deelvenster Beschikbare definities wordt weergegeven. Voer in het vak ZoekenCPU-in om de selectie te filteren. Selecteer op het tabblad Beleidsdefinities de CPU- en geheugenresourcelimieten van Kubernetes-clustercontainers niet de opgegeven limietenen selecteer vervolgens Toevoegen.
    Toewijzingsnaam Accepteer de standaardwaarde.
    Beschrijving Laat leeg.
    Afdwingen van beleid Zorg ervoor dat deze optie is ingesteld op Ingeschakeld.
    Toegewezen door Accepteer de standaardwaarde.

    Hier is een voorbeeld van het voltooide tabblad Basisbeginselen:

    Schermopname van de informatie die is vastgelegd op het tabblad Basisbeginselen.

  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 Waarde
    Maximaal toegestane CPU-eenheden Stel de waarde in op 200m. Het beleid stemt deze waarde af op zowel de aanvraagwaarde van de workloadresource als de limietwaarde van de workload die zijn opgegeven in het manifestbestand van de workload.
    Maximaal toegestane geheugenbytes Stel de waarde in op 256Mi-. Het beleid komt overeen met deze waarde voor zowel de workloadresourceaanvraagwaarde als de workloadlimietwaarde die is opgegeven in het manifestbestand van de workload.

    Hier volgt een voorbeeld van het voltooide tabblad Parameters:

    Schermopname van de informatie die is vastgelegd op het tabblad Parameters.

  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 bronnen. Behoud de standaardconfiguratie.

    Hier volgt een voorbeeld van het voltooide tabblad Herstel:

    Schermopname van de informatie die is vastgelegd op het tabblad Herstel.

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

Belangrijk

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

Resourceaanvragen testen

De laatste stap is het testen van het nieuwe beleid. Implementeer uw testworkload met resourceaanvragen en limieten die het nieuwe beleid schenden. Als alles correct verloopt, geeft de server een foutmelding dat dit door beleid is geweigerd.

  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 aan test-policy.yaml:

    code test-policy.yaml
    

    Tip (if referring to a piece of advice)

    Cloud Shell bevat een geïntegreerde bestandseditor. Cloud Shell-editor ondersteunt functies zoals taalmarkeringen, het opdrachtenpalet en een verkenner. Voor het eenvoudig maken en bewerken van bestanden start u de editor door code . uit te voeren in de Cloud Shell-terminal. Met deze actie opent u de editor met uw actieve werkdirectory ingesteld in de terminal. Als u het manifestbestand rechtstreeks wilt openen om snel te bewerken, voert u code test-policy.yamluit. Met de opdracht Ths opent u de editor zonder de verkenner.

  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 opdracht kubectl apply 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 heeft geweigerd om de pod te plannen.

  6. Open het manifestbestand en los de resourceaanvraag op:

    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 opdracht kubectl apply 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 status Running.

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