Oefening: Azure Policy configureren voor Kubernetes op een AKS-cluster
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
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.
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.
Registreer de Azure Kubernetes Service-provider door de opdracht
az provider register
uit te voeren:az provider register --namespace Microsoft.ContainerService
Registreer de Azure Policy-provider door de opdracht
az provider register
uit te voeren:az provider register --namespace Microsoft.PolicyInsights
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
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.
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
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
Voer de opdracht
az aks enable-addons
uit om de invoegtoepassingazure-policy
voor het cluster in te schakelen:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Controleer of de pod azure-policy is geïnstalleerd in de naamruimte
kube-system
en of de pod gatekeeper is geïnstalleerd in de naamruimtegatekeeper-system
. Voer hiertoe de volgende opdrachtenkubectl 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 ...
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.
Meld u aan bij Azure Portal.
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.
Selecteer de service Policy in de lijst met services, zoals hier 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.
Selecteer opdrachten in het linkermenuvenster onder Ontwerpen:
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:
Het deelvenster Beleid toewijzen wordt weergegeven.
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:
Selecteer het tabblad Parameters om de parameters voor het beleid op te geven.
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:
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:
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.
Open Azure Cloud Shell en zorg ervoor dat u de Bash-versie van Cloud Shell selecteert.
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. Voercode test-policy.yaml
uit om het manifestbestand rechtstreeks te openen voor snelle bewerking. Met deze opdracht wordt de editor geopend zonder de bestandsverkenner.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
Druk op Ctrl+S om het bestand op te slaan en druk vervolgens op Ctrl+Q om de editor te sluiten.
Voer de opdracht uit om de
kubectl apply
configuratie toe te passen en de toepassing in decostsavings
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.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
Druk op Ctrl+S om het bestand op te slaan en druk vervolgens op Ctrl+Q om de editor te sluiten.
Voer de opdracht uit om de
kubectl apply
configuratie toe te passen en de toepassing in decostsavings
naamruimte te implementeren:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Er wordt uitvoer weergegeven zoals deze:
pod/nginx created
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 naamruimtecostsavings
.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
Druk op Ctrl+C om te stoppen met kijken.
Hulp nodig? Raadpleeg onze gids voor probleemoplossing of geef specifieke feedback door een probleem te melden.