Konfigurera principer för AKS-resurskvoter med hjälp av Azure Policy för Kubernetes

Slutförd

Azure Policy hjälper dig att framtvinga standarder och utvärdera efterlevnad i stor skala för din molnmiljö. Det är bra att företag implementerar affärsregler för att definiera hur anställda får använda företagets programvara, maskinvara och andra resurser i organisationen. Därför använder företag principer för att framtvinga, granska och definiera åtkomst. Med hjälp av principer kan en organisation uppfylla styrningskrav och juridiska krav, implementera bästa praxis samt etablera organisatoriska konventioner.

Med Azure Kubernetes Service (AKS) kan du samordna dina molnbaserade program effektivt med principer. Du inser att du måste tillämpa affärsregler för att hantera hur teamen använder AKS för att säkerställa en kostnadseffektiv metod. Du bestämmer dig för att använda Azure Policy för att tillämpa den här idén på dina Azure-baserade molnresurser.

Innan du diskuterar hur du använder Azure Policy för Kubernetes bör du förstå några fler begrepp som aktiverar den här funktionen inifrån Kubernetes.

Vad är en Kubernetes-antagningskontrollant?

En antagningskontrollant (admission controller) är ett Kubernetes-plugin-program som fångar upp autentiserade och auktoriserade begäranden till Kubernetes-API:et före det begärda Kubernetes-objektets beständighet. Anta till exempel att du distribuerar en ny arbetsbelastning och distributionen innehåller en poddbegäran med särskilda minneskrav. Antagningskontrollanten fångar upp distributionsbegärandet och måste auktorisera distributionen innan den görs beständig i klustret.

Du kan betrakta en antagningskontrollant som programvara som styr och framtvingar hur klustret används och utformas. Den begränsar förfrågningar om att skapa, ta bort och ändra Kubernetes-objekt.

Vad är en webhook för antagningskontrollant?

En webhook för en antagningskontrollant är en HTTP-återanropsfunktion som tar emot antagningsbegäranden och sedan agerar på dessa begäranden. Antagningskontrollanter måste konfigureras vid körning. Dessa kontrollanter finns antingen för plugin-programmet för kompilerad antagning eller för ett distribuerat tillägg som körs som en webhook.

Webhooks för antagning finns tillgängliga som två typer: en validerande webhook eller en muterande webhook. Mutationswebhookar anropas först och kan ändra och tillämpa standardvärden på de objekt som skickas till API-servern. Valideringswebhookar validerar objektvärden och kan avvisa begäranden.

Vad är Open Policy Agent (OPA)?

Open Policy Agent (OPA) är en principmotor med öppen källkod för generell användning som tillhandahåller ett deklarativt högnivåspråk där du kan skriva principer. Med dessa principer kan du definiera regler som övervakar hur systemet ska bete sig.

Vad är OPA Gatekeeper?

OPA Gatekeeper är en webhook med öppen källkod som validerar Kubernetes-antagningskontrollanten och som tillämpar crd-baserade principer (Custom Resource Definition) som följer OPA-syntaxen.

Målet med OPA Gatekeeper är att du ska kunna anpassa antagningsprinciper med hjälp av konfiguration i stället för hårdkodade principregler för tjänster. Du får även en fullständig vy av klustret för att identifiera resurser som bryter mot principer.

Använd OPA Gatekeeper för att definiera organisationsomfattande principer med regler:

  • maxgränser för resurser som CPU och minne framtvingas på alla konfigurerade poddar

  • distributionen av avbildningar endast tillåts från godkända lagringsplatser

  • Namngivningskonvention för etiketter för alla namnområden i ett kluster måste ange en kontaktpunkt för varje namnområde.

  • Mandat att klustertjänster har globalt unika väljare.

Azure Policy för AKS

Azure Policy utökar OPA Gatekeeper version 3 och integreras med AKS via inbyggda principer. Principerna tillämpar framtvinganden och skydd i stor skala i ditt kluster på ett centraliserat och konsekvent sätt.

Ditt företags utvecklingsteam vill optimera utvecklingen och introducera utvecklingsverktyg såsom DevSpaces för att förenkla sitt arbetsflöde för Kubernetes-utveckling. Du vill se till att teammedlemmarna följer vissa resursgränser för sina projekt. Du bestämmer dig för att skapa en princip som definierar de beräkningsresurser, lagringsresurser och antal objekt som tillåts i namnområdena för utveckling.

För att konfigurera resursgränser kan du tillämpa resurskvoter på namnområdesnivån och övervaka resursanvändningen för att justera principkvoter. Med den här strategin kan du reservera och begränsa resurser i hela utvecklingsteamet.

Så här aktiverar du Azure Policy-tillägget för AKS

Du registrerar funktionen för Azure Policy-tillägget för AKS genom att utföra följande steg. Vi tillhandahåller exempel här, men du kommer att slutföra stegen i nästa lektion.

  1. Registrera två resursprovidrar med hjälp av kommandot az provider register:

    • Microsoft.ContainerService och Microsoft.PolicyInsights: Dessa resursproviders stöder åtgärder som att fråga efter information om principhändelser och hantera containrar. Det här är åtgärder för att fråga efter, skapa, uppdatera eller ta bort principreparation.

    Här är ett exempel på de två registreringskommandona:

    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.PolicyInsights
    
  2. Registrera funktionen AKS-AzurePolicyAutoApprove med resursprovidern Microsoft. ContainerService. Här är ett exempel på kommandot:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  3. När du har bekräftat den lyckade funktionsregistreringen az provider register kör du kommandot med parametern --namespace för att sprida den nya funktionsregistreringen. Här är ett exempel på kommandot:

    az provider register -n Microsoft.ContainerService
    
  4. Aktivera azure-policy-tillägget:

    az aks enable-addons \
        --addons azure-policy \
        --name myAKSCluster \
        --resource-group myResourceGroup
    

    När du aktiverar tillägget schemaläggs arbetsbelastningar i två namnområden i klustret. Det första namnområdet är kube-system, som innehåller azure-policy och azure-policy-webhook. Det andra namnområdet är gatekeeper-system, som innehåller gatekeeper-controller-manager. Dessa arbetsbelastningar ansvarar för utvärdering av begäranden som skickas till AKS-kontrollplanet. Baserat på dina konfigurerade principer kan din principwebbhook tillåta eller neka begäranden.

Tilldela en inbyggd principdefinition

Du hanterar principerna för din Azure-miljö med hjälp av Azure-instrumentpanelen för principefterlevnad. På instrumentpanelen kan du öka detaljnivån per resurs och per princip. Det hjälper dig att se till att resurserna efterlever kraven genom att använda massåtgärder för befintliga resurser och automatisk reparation för nya resurser.

För varje princip visas följande översiktsinformation:

Objekt beskrivning Exempel
Namn Policyns namn. [Förhandsversion]: Se till att containerns cpu- och minnesresursgränser inte överskrider de angivna gränserna i Kubernetes-klustret.
Definitionsområde Den prenumerationsresursgrupp som den här principen gäller för. mySubscription/rg-akscostsaving.
Kompatibilitetstillstånd Efterlevnadsstatusen för tilldelade principer. Kompatibel, Konfliktfylld, Inte startad eller Inte registrerad.
Resursefterlevnad Procentandel av resurser som uppfyller principen. Den här beräkningen tar hänsyn till kompatibla och icke-kompatibla resurser samt resurser i konflikt. 100
Icke-kompatibla resurser Antal unika resurser som bryter mot en eller flera principregler. 3
Icke-kompatibla principer Antalet icke-efterlevande principer. 5

Härifrån kan du öka detaljnivån i informationen per resurs och per princip för de händelser som utlöses. Du kan till exempel undersöka information om en nekad arbetsbelastningsdistribution.

Tilldelning av principer

Om du vill tilldela en princip väljer du alternativet Tilldelningar under avsnittet Redigering i Azure Policy-navigeringspanelen.

Du tilldelar Azure-principer på ett av två sätt: som en grupp med principer som kallas ett initiativ eller som en enda princip.

Initiativtilldelning

En initiativtilldelning är en samling med Azure-principdefinitioner som grupperas för att uppfylla ett specifikt mål eller syfte. Målet kan till exempel vara att tillämpa Payment Card Industry Data Security Standard för dina resurser.

Principtilldelning

En principtilldelning tilldelar en enskild princip, till exempel Tillåt inte privilegierade containrar i Kubernetes-kluster.

Så här tilldelar du en princip

Varje princip definieras med hjälp av en serie konfigurationssteg. Den mängd information som du registrerar beror på vilken typ av princip du väljer.

Om du till exempel vill begränsa resursdistribution av utvecklare i företagets molnmiljö kan du tilldela en av de inbyggda Azure-principerna för Azure Kubernetes Service. Namnet på principen är Se till att containerns gränser för CPU- och minnesresurser inte överskrider de angivna gränserna i Kubernetes-klustret.

Principen kräver att du anger gränsen för de tillåtna resurser som begärs av distributionsbegäranden.

Låt oss ta en titt på de konfigurerbara alternativen när du tilldelar en princip.

Grundläggande principinformation

Det första steget kräver att du väljer och anger grundläggande information som definierar den nya principen. Den här informationen kan till exempel vara principen och resursomfånget. Den här tabellen visar varje objekt som du kan konfigurera:

Objekt beskrivning
Definitionsområde Omfånget avgör vilka resurser eller grupper av resurser som principtilldelningen tillämpas på. Det här värdet baseras på en prenumeration eller en hanteringsgrupp. Du kan exkludera resurser från ditt val på en nivå lägre än omfångsnivån.
Principdefinition Den princip som du vill tillämpa. Du kan välja bland flera inbyggda principalternativ.
Namn på tilldelning Namnet som används för att identifiera den tilldelade principen.
Beskrivning En beskrivning i fritext som beskriver principen.
Principframtvingande Du kan välja Aktiverad och Inaktiverad. Om alternativet är Inaktiverat tillämpas inte principen och begäranden nekas inte med icke-efterlevnad.
Tilldelad av Ett fritextvärde där standardvärdet är den registrerade användaren. Du kan ändra det här värdet.

Principparametrar

Principer kräver att du konfigurerar de affärsregler som gäller för varje enskild princip. Inte alla principer har samma affärsregler, och därför har varje princip olika parametrar.

Till exempel kräver principen Se till att gränserna för containerns processor- och minnesresurser inte överstiger angivna gränser i Kubernetes-kluster att du anger tre parametrar:

  • Maximalt antal cpu-enheter som tillåts för en container
  • Maximalt antal minnesbyte som tillåts för en container
  • En lista över Kubernetes-namnområden som ska undantas från principen

Jämför den principen med Webbappen bör endast vara åtkomlig via HTTPS, som inte har några anpassade parametrar att konfigurera.

Alla principer har inställningen Effekt. Den här inställningen aktiverar eller inaktiverar principkörningen. Precis som med parametrar kan principer också ha olika alternativ för Effekt.

För resurshanteringsprincipen kan du till exempel välja granskning, neka eller inaktivera som effektvärde . För webbappsprincipen kan du bara välja audit (granska) eller disable (inaktivera).

I den här tabellen visas alla de effekter som för närvarande stöds i principdefinitioner:

Effekt beskrivning
Lägga till Lägger till fler fält i den begärda resursen
Audit (Granska) Skapar en varningshändelse i aktivitetsloggen
AuditIfNotExists Möjliggör granskning av resurser som är relaterade till resursen som matchar villkoret
Deny (Neka) Förhindrar en resursbegäran som inte matchar definierade standarder via en principdefinition och misslyckas med begäran
DeployIfNotExists Kör en malldistribution när villkoret uppfylls
Disabled (Inaktiverat) Användbart för testningssituationer eller när principdefinitionen har parametriserat effekten och du vill inaktivera en enskild tilldelning
Modify (Ändra) Lägger till, uppdaterar eller tar bort taggar på en resurs när den skapas eller uppdateras

Principreparation

Det sista steget är att överväga principreparation. När du tilldelar principer är det möjligt att resurser redan finns och bryter mot den nya principen. Som standard tillämpas endast nyligen skapade resurser på den nya principen. Använd reparation för att kontrollera befintliga resurser när du har tilldelat en ny princip. Reparationsuppgifter kan variera beroende på vilka typer av principer som tillämpas.

I nästa övning använder du principen Se till att containerns cpu- och minnesresursgränser inte överskrider de angivna gränserna i Kubernetes-klusterprincipen för att sänka kostnaderna ytterligare.