Oefening: Azure Policy configureren voor Kubernetes in een AKS-cluster
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
Meld u aan bij Azure Cloud Shell met uw Azure-account. Selecteer de Bash-versie van Cloud Shell.
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.
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 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.
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
Voer de opdracht
az aks enable-addons
uit om deazure-policy
-invoegtoepassing voor uw cluster in te schakelen:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Controleer of de azure-policy-pod is geïnstalleerd in de
kube-system
naamruimte en of de gatekeeper-pod is geïnstalleerd in degatekeeper-system
naamruimte. Voer hiervoor de volgendekubectl 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 ...
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.
Meld u aan bij de Azure Portal.
Zoek de Policy-service in Azure Portal. Hiervoor zoekt u in de zoekbalk boven aan het portaal naar en selecteert u Beleid.
Selecteer de Policy-service in de lijst met services, zoals hier 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.
In het linkermenuvenster, onder Ontwerp, selecteer Toewijzingen:
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:
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 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:
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 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:
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:
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.
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 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 ucode test-policy.yaml
uit. Met de opdracht Ths opent u de editor zonder de verkenner.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
kubectl apply
uit om de configuratie toe te passen en de toepassing in decostsavings
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.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
Druk op Ctrl+S- om het bestand op te slaan en druk vervolgens op Ctrl+Q- om de editor te sluiten.
Voer de opdracht
kubectl apply
uit om de configuratie toe te passen en de toepassing in decostsavings
naamruimte te implementeren:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
U krijgt de volgende uitvoer:
pod/nginx created
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
Druk op Ctrl+C om te stoppen met monitoren zodra de pods draaien.