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 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
Meld u met behulp van uw Azure-account aan bij Azure Cloud Shell. Selecteer de Bash-versie van Cloud Shell.
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 uit te
az feature register
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 voor de Cloud Shell-sessie optreedt, kunt u het registratieproces in Azure Portal volgen met behulp van het deelvenster Preview van onboarding.
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
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
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 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.
Meld u aan bij de Azure-portal.
Zoek de service Policy in Azure Portal. Hiervoor zoekt en selecteert u beleid in de zoekbalk boven aan de portal.
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 beleidsregels hebt toegewezen, is het dashboard leeg.
Selecteer Opdrachten in het linkermenuvenster onder Ontwerpen:
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:
Het deelvenster Beleid toewijzen wordt weergegeven.
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:
Selecteer het tabblad Parameters om de parameters voor het beleid op te geven.
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:
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:
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.
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. 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. 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
kubectl apply
opdracht 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 om de pod te plannen heeft geweigerd.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
Druk op Ctrl+S om het bestand op te slaan en druk vervolgens op Ctrl+Q om de editor te sluiten.
Voer de
kubectl apply
opdracht 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
Running
status.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Druk op Ctrl+C om te stoppen met kijken zodra de pods worden uitgevoerd.