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 u de kosten moet beheren door bedrijfsregels af te dwingen waarmee resourcelimieten voor werkbelastingen worden gedefinieerd. 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 configureert u Azure Policy voor Azure Kubernetes Service op uw AKS-cluster. U configureert een Kubernetes-clustercontainers CPU- en geheugenresourcelimieten mogen niet groter zijn dan het opgegeven limietbeleid . Ten slotte kunt u testen of het beleid de planning weigert van werkbelastingen 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.

    Waarschuwing

    In deze oefening worden preview-functies gebruikt. Nadat u enkele preview-functies in Azure hebt ingeschakeld, kunnen er standaardwaarden worden gebruikt voor alle AKS-clusters die in het abonnement worden gemaakt. Test preview-functies in niet-productieabonnementen om onvoorziene neveneffecten in productie-implementaties te voorkomen.

  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 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 voor de functielijst uit te voeren. 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, dus u zult het resultaat regelmatig moeten 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 Cloud Shell sessie, kunt u het registratieproces volgen via de Azure Portal met behulp van het preview-onboardingvenster.

  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
    

De preview-extensies van Azure CLI installeren

  1. Als u met deze preview wilt werken, moet u de preview-extensie aks-preview van Azure CLI gebruiken voor AKS. (U kunt deze stap negeren als u deze in de vorige oefening hebt voltooid.)

    Installeer de meest recente versie van de preview-extensie van Azure CLI door de opdracht az extension add uit te voeren:

    az extension add --name aks-preview
    

    U kunt de geïnstalleerde versie van de extensie controleren als u de preview-versie al hebt geïnstalleerd. Voer de opdracht az extension show uit om de versie van de extensie op te vragen:

    az extension show --name aks-preview --query [version]
    

    Voer de opdracht az extension update uit als u de extensie eerder hebt geïnstalleerd en u deze moet bijwerken naar een nieuwere versie:

    az extension update --name aks-preview
    

De Azure Policy-invoegtoepassing inschakelen

  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
    

    Hier volgt een voorbeeld van de uitvoer van de opdracht:

    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
    

    Hier volgt een voorbeeld van de uitvoer van de opdracht:

    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"
    
    {
        "config": null,
        "enabled": true,
        "identity": null
    }
    

    U kunt nu overschakelen naar de Azure Portal om het beleid met de naam Kubernetes-clustercontainers CPU- en geheugenresourcelimieten te configureren, mag niet groter zijn dan de opgegeven limieten.

Een ingebouwde beleidsdefinitie toewijzen

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

  1. Meld u aan bij Azure Portal.

  2. Zoek de service Policy in Azure Portal. U doet dit door in de zoekbalk boven aan de portal naar Beleid te zoeken en te selecteren.

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

    Schermopname van het algemene zoekvak in Azure Portal waarbij als resultaat de service Azure Policy wordt weergegeven.

    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 beleid hebt toegewezen, is het dashboard leeg.

  4. Selecteer opdrachten in het linkermenuvenster onder Ontwerpen:

    Schermopname van het navigatievenster van de Policy-service waarin de plaats van de optie Toewijzingen wordt aangegeven.

  5. Zoals u nog weet uit onze vorige beschrijving, hebt u twee opties om een beleidstoewijzing te maken: u wijst een initiatief of beleid toe. Selecteer beleid toewijzen in de bovenste menubalk:

    Schermopname van de nieuwe beleidstoewijzingsoptie.

    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
    Bereik Selecteer de knop met het beletselteken. Het deelvenster Bereik wordt weergegeven. Selecteer onder abonnement het abonnement dat uw resourcegroep bevat. Selecteer voor resourcegroepakscostsavinggrp en selecteer vervolgens Selecteren.
    Uitsluitingen Laat leeg.
    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 niet groter dan de opgegeven limieten. en selecteer vervolgens Selecteren.
    Naam van toewijzing Accepteer de standaardwaarde.
    Description Laat leeg.
    Beleidsafdwinging Zorg ervoor dat deze optie is ingesteld op Ingeschakeld.
    Toegewezen door Accepteer de standaardwaarde.

    Hier volgt een voorbeeld van het ingevulde tabblad Basisinformatie:

    Schermopname van de gegevens die op het tabblad Basisinformatie zijn vastgelegd.

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

    Schermopname van de gegevens die op het tabblad Parameters zijn vastgelegd.

  9. Selecteer het tabblad Herstel. Op dit tabblad selecteert u de impact van het nieuwe beleid op bestaande resources. Standaard is het nieuwe beleid alleen van invloed op nieuw gemaakte resources. Verander de standaardconfiguratie op dit tabblad niet.

    Hier volgt een voorbeeld van het ingevulde tabblad Herstel:

    Schermopname van de gegevens die op het tabblad Herstel zijn vastgelegd.

  10. Selecteer het tabblad Controleren en opslaan . 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. U gaat een testwerkbelasting implementeren die resourceaanvragen en -limieten bevat die het nieuwe beleid schenden.

  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. Voor het eenvoudig maken en bewerken van bestanden start u de editor door deze uit te voeren code . in 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 opdracht uit om de kubectl apply configuratie toe te passen en de toepassing in de costsavings naamruimte te implementeren:

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

    Er wordt uitvoer weergegeven zoals deze:

    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
    

    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: 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 uit om de kubectl apply configuratie toe te passen en de toepassing in de costsavings naamruimte te implementeren:

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

    Er wordt uitvoer weergegeven zoals deze:

    pod/nginx created
    
  9. Voer de kubectl get pods opdracht uit om de zojuist gemaakte pod weer te geven. Zorg dat u de query voor pods uitvoert in de naamruimte costsavings.

    kubectl get pods --namespace costsavings
    

    Na een paar seconden ziet u dat de pods overgaan in de status Running.

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