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

Slutförd

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

  1. Logga in i 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 validera din AKS-klusterversion:

    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 az feature register köra kommandot:

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

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

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

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. Kontrollera att podden azure-policy är installerad i namnområdet kube-system och att podden gatekeeper är installerad i namnområdet gatekeeper-system. Detta 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 ä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.

  1. Logga in på Azure-portalen.

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

  3. Välj Policy-tjänsten i listan över tjänster enligt följande bild:

    Screenshot of the general Azure portal search box with a result that shows the Azure Policy service.

    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.

  4. I det vänstra menyfönstret, under Redigering, väljer du Tilldelningar:

    Screenshot of the Policy service navigation panel that shows the location of the Assignments option.

  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:

    Screenshot that shows the new policy assignment option.

    Fönstret Tilldela princip visas.

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

    Screenshot that shows the information captured in the Basics tab.

  7. Välj fliken Parametrar för att ange parametrar 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 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:

    Screenshot that shows the information captured in the Parameters tab.

  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 Åtgärd:

    Screenshot that shows the information captured in the Remediation tab.

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

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

  2. 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 du code test-policy.yaml. Det här kommandot öppnar redigeringsprogrammet utan filutforskaren.

  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. kubectl apply Kör kommandot för att tillämpa konfigurationen och distribuera programmet i costsavings 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.

  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. kubectl apply Kör kommandot för att tillämpa konfigurationen och distribuera programmet i costsavings namnområdet:

    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 poddarna till tillståndet Running .

    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.