Övning – Konfigurera Azure Policy för Kubernetes i ett AKS-kluster

Slutförd

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

  1. Logga in på Azure Cloud Shell med ditt Azure-konto. Välj Bash-versionen av Cloud Shell.

  2. 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.

  3. Registrera Azure Kubernetes Service-providern genom att köra kommandot az provider register:

    az provider register --namespace Microsoft.ContainerService
    
  4. Registrera Azure Policy-providern genom att köra kommandot az provider register:

    az provider register --namespace Microsoft.PolicyInsights
    
  5. Aktivera tilläggsinstallationen genom att köra kommandot az feature register:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  6. 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.

  7. 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

  1. Kör kommandot az aks enable-addons för att aktivera azure-policy-tillägget för klustret:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. Kontrollera att azure-policy-podden är installerad i kube-system-namnområdet och att gatekeeper-podden är installerad i gatekeeper-system namnrymd. Det gör du genom att köra följande kubectl 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
    ...
    
  3. 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.

  1. Logga in på Azure-portalen.

  2. 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.

  3. Välj tjänsten Policy i listan över tjänster, som du ser här:

    Skärmbild av den allmänna sökrutan i Azure-portalen med ett resultat som visar Azure Policy-tjänsten.

    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.

  4. I det vänstra menyfönstret går du till Redigeringoch väljer Tilldelningar:

    Skärmbild av navigeringspanelen för principtjänsten som visar platsen för alternativet Tilldelningar.

  5. 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:

    Skärmbild som visar det nya alternativet för principtilldelning.

    Panelen Tilldelningsprincip visas.

  6. 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:

    Skärmbild som visar den information som samlas in på fliken Grundläggande.

  7. Välj fliken Parametrar för att ange parametrarna för principen.

  8. 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:

    Skärmbild som visar informationen på fliken Parametrar.

  9. 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:

    Skärmbild som visar den information som samlas in på fliken Reparation.

  10. 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.

  1. Öppna Azure Cloud Shell och se till att välja Bash-versionen av Cloud Shell.

  2. 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 du code test-policy.yaml. Kommandot Ths öppnar redigeraren utan utforskaren.

  3. 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
    
  4. Tryck på Ctrl+ S för att spara filen och tryck sedan på Ctrl + Q för att stänga redigeraren.

  5. Kör kommandot kubectl apply för att tillämpa konfigurationen och distribuera programmet i costsavings 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.shnekade begäran om att schemalägga podden.

  6. Ö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
    
  7. Tryck på Ctrl+ S för att spara filen och tryck sedan på Ctrl + Q för att stänga redigeraren.

  8. Kör kommandot kubectl apply för att tillämpa konfigurationen och distribuera programmet i costsavings namnområde:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    Du får följande utdata:

    pod/nginx created
    
  9. 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
    
  10. Tryck på Ctrl+C- för att sluta titta när poddarna körs.