Övning – Konfigurera Azure Policy för Kubernetes i ett AKS-kluster
Azure Policy for Kubernetes hjälper organisationer att uppfylla styrnings- och juridiska krav, implementera metodtips och upprätta organisationskonventioner för molnmiljöer.
Utvecklingsteam i ditt företag använder Azure Kubernetes Service (AKS) som en 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 processor- 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 ditt kluster och lägger till policyn Kubernetes-klustercontainrar ska inte överskrida de specifika gränserna för CPU- och minnesresurser. Sedan testar du om principen nekar schemaläggning av arbetsbelastningar som överskrider principens resursparametrar.
Aktivera resursprovidrar för ContainerService och PolicyInsights
Logga in på 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 verifiera aks-klusterversionen:
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 köra kommandot
az feature register
:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Kontrollera att registreringen lyckades genom att kontrollera funktionslisttabellen. Använd kommandot
az feature list
för att köra frågan. 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 Tidsgränsen nås för Cloud Shell-sessionen kan du spåra registreringsprocessen via Azure-portalen med hjälp av förhandsversionsfönstret.
Kör kommandot
az provider register
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 aktiveraazure-policy
-tillägget för klustret:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Kontrollera att azure-policy-podden är installerad i
kube-system
-namnområdet och att gatekeeper-podden är installerad igatekeeper-system
namnrymd. Det 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 har installerats 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 CPU- och minnesresursgränserna får inte överskrida de angivna gränserna.
Tilldela en inbyggd principdefinition
Om du vill konfigurera den nya Azure Policy använder du principtjänsten i Azure-portalen.
Logga in på Azure-portalen.
Leta upp tjänsten Policy i Azure-portalen. Det gör du genom att söka efter och välja Principi sökfältet överst i portalen.
Välj tjänsten Policy i listan över tjänster, som du ser här:
Policydashboarden öppnas med en översikt som visar alla dina tilldelade policyer, resursernas status och hur policyerna påverkar dem. Om du inte har tilldelat några principer är instrumentpanelen tom.
I det vänstra menyfönstret går du till Redigeringoch väljer 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:
Panelen Tilldelningsprincip visas.
På fliken Grundläggande anger du följande värden för varje inställning för att skapa din policy.
Inställning Värde omfång Omfattning Välj ellipsknappen. Fönstret Omfång visas. Under prenumerationväljer du den prenumeration som innehåller resursgruppen. För resursgruppväljer du rg-akscostsavingoch väljer sedan knappen Välj. Uteslutningar Lämna tomt. Grundläggande Principdefinition Välj ellipsknappen. Fönstret Tillgängliga definitioner visas. I rutan Sök filtrerar du genom att ange CPU. På fliken principdefinitioner väljer du Kubernetes-klustercontainrar processor- och minnesresursgränserna ska inte överskrida de angivna gränsernaoch väljer sedan Lägg till. Tilldelningsnamn Acceptera standardvärdet. Beskrivning Lämna tomt. Efterlevnad av policyer Kontrollera att det här alternativet är inställt på Aktiverad. Tilldelad av Acceptera standardvärdet. Här är ett exempel på den slutförda fliken Grundläggande:
Välj fliken Parametrar för att ange parametrarna 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 200 m. Principen matchar det här värdet med både värdet för resursbegäran för arbetsbelastning och det arbetsbelastningsgränsvärde som anges i arbetsbelastningens manifestfil. Maximalt antal tillåtna minnesbyte Ange värdet till 256Mi. Principen matchar det här värdet med både värdet för resursbegäran för arbetsbelastning och det arbetsbelastningsgränsvärde 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 Remediation:
Välj fliken Granska + skapa. Granska de värden du har valt och välj sedan Skapa.
Viktig
Om du använder ett befintligt AKS-kluster kan det ta cirka 15 minuter att tillämpa principtilldelningen.
Testresursbegä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 policyn.
Öppna Azure Cloud Shell och se till att välja Bash-versionen av Cloud Shell.
Skapa en manifestfil för Kubernetes-distributionen med hjälp av den integrerade redigeraren. Anropa filen
test-policy.yaml
:code test-policy.yaml
Tips
Cloud Shell innehåller en integrerad filredigerare. Cloud Shell-redigeraren stöder funktioner som språkmarkering, kommandopaletten och en utforskare. Om du vill skapa och redigera filer enkelt startar du redigeraren genom att köra
code .
i Cloud Shell-terminalen. Den här åtgärden öppnar redigeraren med din aktiva arbetskatalog inställd i terminalen. Om du vill öppna manifestfilen direkt för snabbredigering kör ducode test-policy.yaml
. Kommandot Ths öppnar redigeraren utan utforskaren.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.
Kör kommandot
kubectl apply
för att tillämpa konfigurationen och distribuera programmet icostsavings
namnområde: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>
Observera hur antagningswebhooken
validation.gatekeeper.sh
nekade begäran om 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.
Kör kommandot
kubectl apply
för att tillämpa konfigurationen och distribuera programmet icostsavings
namnområde: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 kapslarna till i
Running
-tillstånd.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.