Övning – Konfigurera Azure Policy för Kubernetes i ett AKS-kluster
Med Azure Policy for Kubernetes kan organisationer uppfylla styrningskrav och juridiska krav, implementera beprövade metoder och upprätta organisationens regelverk för molnmiljöer.
Utvecklingsteam i ditt företag implementerar Azure Kubernetes Service (AKS) som utvecklingsplattform. Du inser att det bästa sättet att hantera kostnader är genom att framtvinga affärsregler som definierar begränsningar för arbetsbelastningsresurser. Du vill se till att utvecklare endast kan distribuera arbetsbelastningar inom specifika gränser för CPU- och minnesallokering. Systemet måste förhindra arbetsbelastningar som överskrider dessa gränser.
I den här övningen aktiverar du Azure Policy för AKS i klustret och lägger till Kubernetes-klustercontainrarnas CPU- och minnesresursgränser får inte överskrida den angivna begränsningsprincipen . Sedan testar du om principen nekar schemaläggning av arbetsbelastningar som överskrider principens resursparametrar.
Aktivera resursprovidrarna ContainerService och PolicyInsights
Logga in i Azure Cloud Shell med ditt Azure-konto. Välj Bash-versionen av Cloud Shell.
Azure Policy för AKS kräver att klusterversionen är 1.14 eller senare. Kör följande skript för att validera din AKS-klusterversion:
az aks list
Kontrollera att den rapporterade klusterversionen är 1.14 eller senare.
Registrera Azure Kubernetes Service-providern genom att köra kommandot
az provider register
:az provider register --namespace Microsoft.ContainerService
Registrera Azure Policy-providern genom att köra kommandot
az provider register
:az provider register --namespace Microsoft.PolicyInsights
Aktivera tilläggsinstallationen genom att
az feature register
köra kommandot:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Kontrollera att registreringen lyckades genom att köra frågor mot tabellen med funktionslistor. Kör frågan med hjälp av kommandot
az feature list
. Det kan ta flera minuter att slutföra funktionens registrering, så du måste kontrollera resultatet regelbundet.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Om Cloud Shell-sessionen överskrider tidsgränsen kan du spåra registreringsprocessen via Azure-portalen med hjälp av förhandsversionen av registreringssidan.
az provider register
Kör kommandot för att sprida uppdateringen när du har bekräftat att frågekommandot för funktionslistan visar "Registrerad":az provider register -n Microsoft.ContainerService
Aktivera Azure Policy i klustret
Kör kommandot
az aks enable-addons
för att aktivera tilläggetazure-policy
för klustret:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Kontrollera att podden azure-policy är installerad i namnområdet
kube-system
och att podden gatekeeper är installerad i namnområdetgatekeeper-system
. Detta gör du genom att köra följandekubectl get pods
-kommandon:kubectl get pods -n kube-system
Dina utdata bör se ut ungefär så här:
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
Dina utdata bör se ut ungefär så här:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Kontrollera slutligen att det senaste tillägget är installerat genom att köra kommandot
az aks show
. Det här kommandot hämtar konfigurationsinformationen för klustret.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
Dina utdata bör se ut ungefär så här:
{ "config": null, "enabled": true, "identity": null }
Nu är du redo att växla till Azure-portalen för att konfigurera principen med namnet Kubernetes-klustercontainrar PROCESSOR- och minnesresursgränser får inte överskrida de angivna gränserna.
Tilldela en inbyggd principdefinition
Konfigurera den nya Azure-principen med hjälp av Policy-tjänsten i Azure-portalen.
Logga in på Azure-portalen.
Leta upp Policy-tjänsten i Azure-portalen. Det gör du genom att söka efter och välja Princip i sökfältet överst i portalen.
Välj Policy-tjänsten i listan över tjänster enligt följande bild:
Policy-instrumentpanelen öppnas med en översikt som visar alla dina tilldelade principer, statusen för resurser och hur principerna påverkar dem. Om du inte har tilldelat några principer är instrumentpanelen tom.
I det vänstra menyfönstret, under Redigering, väljer du Tilldelningar:
Kom ihåg från vår tidigare beskrivning att du har två alternativ för att skapa en principtilldelning: du tilldelar antingen ett initiativ eller en princip. I den översta menyraden väljer du Tilldela princip:
Fönstret Tilldela princip visas.
På fliken Grundläggande anger du följande värden för varje inställning för att skapa din princip.
Inställning Värde Definitionsområde Omfång Välj ellipsknappen. Omfångsfönstret visas. Under prenumeration väljer du den prenumeration som innehåller resursgruppen. För Resursgrupp väljer du rg-akscostsaving och väljer sedan knappen Välj . Exkluderingar Lämna tomt. Grundläggande inställningar Definition av princip Välj ellipsknappen. Fönstret Tillgängliga definitioner visas. I rutan Sök filtrerar du markeringen genom att ange CPU. På fliken Principdefinitioner väljer du Kubernetes-klustercontainrarna CPU- och minnesresursgränser ska inte överskrida de angivna gränserna och väljer sedan Lägg till. Namn på tilldelning Acceptera standardvärdet. beskrivning Lämna tomt. Principframtvingande Kontrollera att det här alternativet är inställt på Aktiverad. Tilldelad av Acceptera standardvärdet. Här är ett exempel på fliken för Grundinställningar:
Välj fliken Parametrar för att ange parametrar för principen.
Ange följande värden för var och en av parameterinställningarna:
Inställning Värde Maximalt antal tillåtna CPU-enheter Ange värdet till 200m. Principen matchar det här värdet till både resursbegärandevärdet för arbetsbelastningen och det värde för arbetsbelastningsgräns som anges i arbetsbelastningens manifestfil. Maximalt antal tillåtna minnesbyte Ange värdet till 256Mi. Principen matchar det här värdet till både resursbegärandevärdet för arbetsbelastningen och det värde för arbetsbelastningsgräns som anges i arbetsbelastningens manifestfil. Här är ett exempel på den slutförda fliken Parametrar:
Välj fliken Reparation . På den här fliken väljer du hur den nya principen påverkar resurser som redan finns. Som standard kontrollerar den nya principen endast nyligen skapade resurser. Behåll standardkonfigurationen.
Här är ett exempel på den slutförda fliken Åtgärd:
Välj fliken Granska + skapa . Granska de värden som du har valt och välj sedan Skapa.
Viktigt!
Om du använder ett befintligt AKS-kluster kan det ta cirka 15 minuter att tillämpa principtilldelningen.
Testa resursbegäranden
Det sista steget är att testa den nya principen. Distribuera testarbetsbelastningen med resursbegäranden och begränsningar som strider mot den nya principen. Om allt går som det ska returnerar servern ett fel som anger nekad av principen.
Öppna Azure Cloud Shell och se till att välja Bash-versionen av Cloud Shell.
Skapa en manifestfil för Kubernetes-distributionen i det integrerade redigeringsprogrammet. Anropa filen
test-policy.yaml
:code test-policy.yaml
Dricks
Cloud Shell innehåller ett integrerat filredigeringsprogram. Cloud Shell-redigeraren stöder funktioner som språkmarkering, kommandopaletten och en utforskare. För enkel filskapande och redigering startar du redigeraren genom att köra
code .
i Cloud Shell-terminalen. Då öppnas redigeringsprogrammet med den aktiva arbetskatalogen i terminalen. Om du vill öppna manifestfilen direkt för snabb redigering kör ducode test-policy.yaml
. Det här kommandot öppnar redigeringsprogrammet utan filutforskaren.Klistra in följande text i filen:
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
Tryck på Ctrl+S för att spara filen och tryck sedan på Ctrl+Q för att stänga redigeraren.
kubectl apply
Kör kommandot för att tillämpa konfigurationen och distribuera programmet icostsavings
namnområdet:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Dina utdata bör likna följande:
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>
Lägg märke till hur webhooken för antagning,
validation.gatekeeper.sh
, nekade begäran att schemalägga podden.Öppna manifestfilen och åtgärda resursbegäran:
code test-policy.yaml
Ersätt texten med följande text:
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
Tryck på Ctrl+S för att spara filen och tryck sedan på Ctrl+Q för att stänga redigeraren.
kubectl apply
Kör kommandot för att tillämpa konfigurationen och distribuera programmet icostsavings
namnområdet:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Du får följande utdata:
pod/nginx created
Hämta poddarna för de nyligen skapade poddarna i ditt
costsavings
namnområde.kubectl get pods --namespace costsavings
Inom några sekunder övergår poddarna till tillståndet
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Tryck på Ctrl+C för att sluta titta när poddarna körs.