Dela via


Förstå Azure Policy för Kubernetes-kluster

Azure Policy utökar Gatekeeper v3, en webhook för antagningskontrollant för Open Policy Agent (OPA), för att tillämpa skalbara tillämpnings- och skyddsfunktioner på dina klusterkomponenter på ett centraliserat och konsekvent sätt. Klusterkomponenterna omfattar poddar, containrar och namnområden.

Med Azure Policy för Kubernetes kan du hantera och rapportera efterlevnadstillståndet för dina Kubernetes-kluster från en och samma plats. Genom att använda Azure Policys tillägg eller tillägg förbättras styrningen av dina klusterkomponenter med Azure Policy-funktioner, till exempel möjligheten att använda väljare och åsidosättningar för säker principdistribution och återställning.

Azure Policy för Kubernetes har stöd för följande klustermiljöer:

Viktigt!

Azure Policy-tilläggets Helm-modell och tillägget för AKS Engine har blivit inaktuella. Följ anvisningarna för att ta bort tilläggen.

Översikt

Genom att installera Azure Policys add-ons eller tillägg på dina Kubernetes-kluster utför Azure Policy följande funktioner:

  • Kontrollerar med Azure Policy-tjänsten om det finns principtilldelningar till klustret.
  • Distribuerar principdefinitioner till klustret som villkorsmall och villkorsanpassade resurser eller som en mutationsmallresurs (beroende på innehållet i principdefinitionen).
  • Rapporterar gransknings- och efterlevnadsinformation tillbaka till Azure Policy-tjänsten.

Utför följande åtgärder för att aktivera och använda Azure Policy med ditt Kubernetes-kluster:

  1. Konfigurera kubernetes-klustret och installera Azure Kubernetes Service (AKS) add-ons eller Azure Policys tillägg för Arc-aktiverade Kubernetes-kluster (beroende på klustertyp).

    Kommentar

    Vanliga problem med installationen finns i Felsöka – Azure Policy-tillägg.

  2. Skapa eller använda en Azure Policy-exempeldefinition för Kubernetes

  3. Tilldela en definition till ditt Kubernetes-kluster

  4. Vänta på validering

  5. Loggning och felsökning

  6. Granska begränsningar och rekommendationer i avsnittet Vanliga frågor och svar

Installera Azure Policy-tillägg för AKS

Azure Policy-tillägget för AKS är en del av Kubernetes version 1.27 med långsiktigt stöd (LTS).

Förutsättningar

  1. Registrera resursprovidrar och förhandsversionsfunktioner.

    • Azure Portal:

      Registrera resursprovidrar Microsoft.PolicyInsights . Anvisningar finns i Resursprovidrar och typer.

    • Azure CLI:

      # Log in first with az login if you're not using Cloud Shell
      
      # Provider register: Register the Azure Policy provider
      az provider register --namespace Microsoft.PolicyInsights
      
  2. Du behöver Azure CLI version 2.12.0 eller senare installerad och konfigurerad. Kör kommandot för az --version att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

  3. AKS-klustret måste vara en Kubernetes-version som stöds i Azure Kubernetes Service (AKS). Använd följande skript för att verifiera aks-klusterversionen:

    # Log in first with az login if you're not using Cloud Shell
    
    # Look for the value in kubernetesVersion
    az aks list
    
  4. Öppna portar för Azure Policy-tillägget. Azure Policy-tillägget använder dessa domäner och portar för att hämta principdefinitioner och tilldelningar och rapportera kompatibilitet för klustret tillbaka till Azure Policy.

    Domain Port
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443

När förutsättningarna har slutförts installerar du Azure Policy-tillägget i det AKS-kluster som du vill hantera.

  • Azure Portal

    1. Starta AKS-tjänsten i Azure Portal genom att välja Alla tjänster och sedan söka efter och välja Kubernetes-tjänster.

    2. Välj ett av dina AKS-kluster.

    3. Välj Principer till vänster på kubernetes-tjänstsidan.

    4. På huvudsidan väljer du knappen Aktivera tillägg .

  • Azure CLI

    # Log in first with az login if you're not using Cloud Shell
    
    az aks enable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
    

Kör följande kommando för att verifiera att tilläggsinstallationen lyckades och att azure-policy - och gatekeeper-poddarna körs:

# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system

# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system

Slutligen kontrollerar du att det senaste tillägget har installerats genom att köra det här Azure CLI-kommandot, ersätta <rg> med resursgruppens namn och <cluster-name> med namnet på ditt AKS-kluster: az aks show --query addonProfiles.azurepolicy -g <rg> -n <cluster-name>. Resultatet bör se ut ungefär som följande utdata för kluster med hjälp av tjänstens huvudnamn:

{
  "config": null,
  "enabled": true,
  "identity": null
}

Och följande utdata för kluster med hanterad identitet:

 {
   "config": null,
   "enabled": true,
   "identity": {
     "clientId": "########-####-####-####-############",
     "objectId": "########-####-####-####-############",
     "resourceId": "<resource-id>"
   }
 }

Installera Azure Policy Extension för Azure Arc-aktiverade Kubernetes

Azure Policy for Kubernetes gör det möjligt att hantera och rapportera om efterlevnadstillståndet för dina Kubernetes-kluster från en och samma plats. Med Azure Policy-tillägget för Arc-aktiverade Kubernetes-kluster kan du styra dina Arc-aktiverade Kubernetes-klusterkomponenter, till exempel poddar och containrar.

Den här artikeln beskriver hur du skapar, visar tilläggsstatus och tar bort Azure Policy for Kubernetes-tillägget.

En översikt över tilläggsplattformen finns i Azure Arc-klustertillägg.

Förutsättningar

Om du redan har distribuerat Azure Policy for Kubernetes i ett Azure Arc-kluster med Helm direkt utan tillägg följer du anvisningarna för att ta bort Helm-diagrammet. När borttagningen är klar kan du fortsätta.

  1. Se till att Kubernetes-klustret är en distribution som stöds.

    Kommentar

    Azure Policy for Arc-tillägget stöds i följande Kubernetes-distributioner.

  2. Se till att du uppfyller alla vanliga krav för Kubernetes-tillägg som anges här, inklusive att ansluta klustret till Azure Arc.

    Kommentar

    Azure Policy-tillägget stöds för Arc-aktiverade Kubernetes-kluster i dessa regioner.

  3. Öppna portar för Azure Policy-tillägget. Azure Policy-tillägget använder dessa domäner och portar för att hämta principdefinitioner och tilldelningar och rapportera kompatibilitet för klustret tillbaka till Azure Policy.

    Domain Port
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443
  4. Innan du installerar Azure Policy-tillägget eller aktiverar någon av tjänstfunktionerna måste din prenumeration aktivera Microsoft.PolicyInsights resursprovidrar.

    Kommentar

    Om du vill aktivera resursprovidern följer du stegen i Resursprovidrar och typer eller kör antingen Azure CLI- eller Azure PowerShell-kommandot.

    • Azure CLI

      # Log in first with az login if you're not using Cloud Shell
      # Provider register: Register the Azure Policy provider
      az provider register --namespace 'Microsoft.PolicyInsights'
      
    • Azure PowerShell

      # Log in first with Connect-AzAccount if you're not using Cloud Shell
      
      # Provider register: Register the Azure Policy provider
      Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
      

Skapa Azure Policy-tillägg

Kommentar

Observera följande för skapande av Azure Policy-tillägg:

  • Automatisk uppgradering är aktiverat som standard, vilket uppdaterar delversionen av Azure Policy-tillägget om några nya ändringar distribueras.
  • Alla proxyvariabler som skickas som parametrar till connectedk8s sprids till Azure Policy-tillägget för att stödja utgående proxy.

Om du vill skapa en tilläggsinstans kör du följande kommando för <> det Arc-aktiverade klustret med dina värden:

az k8s-extension create --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --extension-type Microsoft.PolicyInsights --name <EXTENSION_INSTANCE_NAME>

Exempel:

az k8s-extension create --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --extension-type Microsoft.PolicyInsights --name azurepolicy

Exempel på utdata:

{
  "aksAssignedIdentity": null,
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": {},
  "configurationSettings": {},
  "customLocationSettings": null,
  "errorInfo": null,
  "extensionType": "microsoft.policyinsights",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-test-rg/providers/Microsoft.Kubernetes/connectedClusters/my-test-cluster/providers/Microsoft.KubernetesConfiguration/extensions/azurepolicy",
 "identity": {
    "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tenantId": null,
    "type": "SystemAssigned"
  },
  "location": null,
  "name": "azurepolicy",
  "packageUri": null,
  "provisioningState": "Succeeded",
  "releaseTrain": "Stable",
  "resourceGroup": "my-test-rg",
  "scope": {
    "cluster": {
      "releaseNamespace": "kube-system"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": {
    "createdAt": "2021-10-27T01:20:06.834236+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2021-10-27T01:20:06.834236+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
  },
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "1.1.0"
}

Visa Azure Policy-tillägget

Kontrollera att det gick att skapa tilläggsinstansen och granska tilläggsmetadata genom att <> köra följande kommando som ersätter med dina värden:

az k8s-extension show --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

Exempel:

az k8s-extension show --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --name azurepolicy

Kör följande kommando för att verifiera att tilläggsinstallationen lyckades och att azure-policy- och gatekeeper-poddarna körs:

# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system

# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system

Ta bort Azure Policy-tillägget

Om du vill ta bort tilläggsinstansen kör du följande kommando som ersätter <> med dina värden:

az k8s-extension delete --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

Skapa en principdefinition

Språkstrukturen i Azure Policy för att hantera Kubernetes följer den för befintliga principdefinitioner. Det finns exempeldefinitionsfiler som du kan tilldela i Azure Policys inbyggda principbibliotek som kan användas för att styra dina klusterkomponenter.

Azure Policy for Kubernetes stöder även skapande av anpassad definition på komponentnivå för både Azure Kubernetes Service-kluster och Azure Arc-aktiverade Kubernetes-kluster. Exempel på begränsningsmallar och mutationsmallar finns i Gatekeeper Community-biblioteket. Azure Policys Visual Studio Code-tillägg kan användas för att översätta en befintlig begränsningsmall eller mutationsmall till en anpassad principdefinition för Azure Policy.

Med läget Resursprovider Microsoft.Kubernetes.Dataanvänds effektgranskning, neka, inaktiverad och mutera för att hantera dina Kubernetes-kluster.

Granskning och neka måste ange details egenskaper som är specifika för arbete med OPA Constraint Framework och Gatekeeper v3.

Som en del av egenskaperna details.templateInfo eller details.constraintInfo i principdefinitionen skickar Azure Policy URI:n eller Base64Encoded värdet för dessa CustomResourceDefinitions(CRD) till tillägget. Rego är det språk som OPA och Gatekeeper stöder för att verifiera en begäran till Kubernetes-klustret. Genom att stödja en befintlig standard för Kubernetes-hantering gör Azure Policy det möjligt att återanvända befintliga regler och para ihop dem med Azure Policy för en enhetlig rapporteringsupplevelse för molnefterlevnad. Mer information finns i Vad är Rego?.

Tilldela en principdefinition

Om du vill tilldela en principdefinition till ditt Kubernetes-kluster måste du tilldelas lämpliga principtilldelningsåtgärder för Rollbaserad åtkomstkontroll i Azure (Azure RBAC). De inbyggda Azure-rollerna Resursprincipdeltagare och Ägare har dessa åtgärder. Mer information finns i Azure RBAC-behörigheter i Azure Policy.

Hitta de inbyggda principdefinitionerna för att hantera klustret med hjälp av Azure Portal med följande steg. Om du använder en anpassad principdefinition söker du efter den efter namn eller den kategori som du skapade den med.

  1. Starta Azure Policy-tjänsten i Azure Portal. Välj Alla tjänster i det vänstra fönstret och sök sedan efter och välj Princip.

  2. I den vänstra rutan på sidan Azure Policy väljer du Definitioner.

  3. I listrutan Kategori använder du Välj alla för att rensa filtret och väljer sedan Kubernetes.

  4. Välj principdefinitionen och välj sedan knappen Tilldela .

  5. Ange omfånget till hanteringsgruppen, prenumerationen eller resursgruppen för Kubernetes-klustret där principtilldelningen gäller.

    Kommentar

    När du tilldelar Azure Policy for Kubernetes-definitionen måste omfånget innehålla klusterresursen.

  6. Ge principtilldelningen ett namn och en beskrivning som du enkelt kan använda för att identifiera den.

  7. Ange principtillämpningen till något av följande värden:

    • Aktiverad – Framtvinga principen i klustret. Kubernetes-antagningsbegäranden med överträdelser nekas.

    • Inaktiverad – Tillämpa inte principen på klustret. Kubernetes-antagningsbegäranden med överträdelser nekas inte. Resultat av efterlevnadsbedömning är fortfarande tillgängliga. När du distribuerar nya principdefinitioner till kluster som körs är alternativet Inaktiverat användbart för att testa principdefinitionen eftersom antagningsbegäranden med överträdelser inte nekas.

  8. Välj Nästa.

  9. Ange parametervärden

    • Om du vill undanta Kubernetes-namnområden från principutvärderingen anger du listan över namnområden i parametern Namnområdesundantag. Rekommendationen är att undanta: kube-system, gatekeeper-system och azure-arc.
  10. Välj Granska + skapa.

Alternativt kan du använda snabbstarten Tilldela en princip – portal för att hitta och tilldela en Kubernetes-princip. Sök efter en Kubernetes-principdefinition i stället för exempelgransknings-VM :erna.

Viktigt!

Inbyggda principdefinitioner är tillgängliga för Kubernetes-kluster i kategorin Kubernetes. En lista över inbyggda principdefinitioner finns i Kubernetes-exempel.

Principutvärdering

Var 15:e minut kontrollerar tillägget med Azure Policy-tjänsten om det har gjorts ändringar i principtilldelningarna. Under den här uppdateringscykeln söker tillägget efter ändringar. Dessa ändringar utlöser åtgärder för att skapa, uppdatera eller ta bort i begränsningsmallarna och begränsningarna.

Om ett namnområde har en klusteranpassad etikett i ett Kubernetes-kluster nekas inte antagningsbegäranden med överträdelser. Resultat av efterlevnadsbedömning är fortfarande tillgängliga.

  • Azure Arc-aktiverat Kubernetes-kluster: admission.policy.azure.com/ignore

Kommentar

En klusteradministratör kan ha behörighet att skapa och uppdatera villkorsmallar och villkorsresurser som installeras av Azure Policy-tillägget, men dessa scenarier stöds inte när manuella uppdateringar skrivs över. Gatekeeper fortsätter att utvärdera principer som fanns innan du installerar tillägget och tilldelar Principdefinitioner för Azure Policy.

Var 15:e minut gör tillägget en fullständig genomsökning av klustret. Efter att ha samlat in information om den fullständiga genomsökningen, och eventuella utvärderingar i realtid från Gatekeeper av försök till ändringar i klustret, rapporteras resultatet tillbaka till Azure Policy och tas med i efterlevnadsinformationen, precis som alla andra Azure Policy-tilldelningar. Endast resultat för aktiva principtilldelningar returneras under granskningscykeln. Granskningsresultat kan också visas som överträdelser i statusfältet för den begränsning som misslyckades. Mer information om icke-kompatibla resurser finns i Komponentinformation för resursproviderlägen.

Kommentar

Varje efterlevnadsrapport i Azure Policy för dina Kubernetes-kluster innehåller alla överträdelser under de senaste 45 minuterna. Tidsstämpeln anger när en överträdelse inträffade.

Några andra överväganden:

  • Om klusterprenumerationen registreras med Microsoft Defender för molnet tillämpas Microsoft Defender för molnet Kubernetes-principer automatiskt på klustret.

  • När en neka-princip tillämpas på kluster med befintliga Kubernetes-resurser fortsätter alla befintliga resurser som inte är kompatibla med den nya principen att köras. När den icke-kompatibla resursen schemaläggs om på en annan nod blockerar Gatekeeper resursskapandet.

  • När ett kluster har en neka-princip som validerar resurser får användaren inget meddelande om avvisande när en distribution skapas. Tänk dig till exempel en Kubernetes-distribution som innehåller replicasets och poddar. När en användare kör returnerar kubectl describe deployment $MY_DEPLOYMENTden inte ett avvisandemeddelande som en del av händelserna. Returnerar dock kubectl describe replicasets.apps $MY_DEPLOYMENT de händelser som är associerade med avvisande.

Kommentar

Init-containrar kan ingå under principutvärderingen. Om du vill se om init-containrar ingår läser du CRD för följande eller en liknande deklaration:

input_containers[c] {
   c := input.review.object.spec.initContainers[_]
}

Konflikter med villkorsmall

Om villkorsmallar har samma namn på resursmetadata, men principdefinitionen refererar till källan på olika platser, anses principdefinitionerna vara i konflikt. Exempel: Två principdefinitioner refererar till samma template.yaml fil som lagras på olika källplatser som Azure Policy-mallarkivet (store.policy.core.windows.net) och GitHub.

När principdefinitioner och deras villkorsmallar tilldelas men inte redan är installerade i klustret och är i konflikt rapporteras de som en konflikt och installeras inte i klustret förrän konflikten har lösts. På samma sätt fortsätter alla befintliga principdefinitioner och deras villkorsmallar som redan finns i klustret som står i konflikt med nyligen tilldelade principdefinitioner att fungera normalt. Om en befintlig tilldelning uppdateras och det inte går att synkronisera villkorsmallen markeras klustret också som en konflikt. Information om alla konfliktmeddelanden finns i kompatibilitetsskäl för AKS-resursproviderläge

Loggning

Som Kubernetes-kontrollant/container behåller både azure-policy - och gatekeeper-poddarna loggar i Kubernetes-klustret. I allmänhet kan azure-policyloggar användas för att felsöka problem med principinmatning till klustret och efterlevnadsrapportering. Poddloggarna gatekeeper-controller-manager kan användas för att felsöka körningsnekanden. Poddloggarna för gatekeeper-audit kan användas för att felsöka granskningar av befintliga resurser. Loggarna kan visas på sidan Insikter i Kubernetes-klustret. Mer information finns i Övervaka Kubernetes-klusterprestanda med Azure Monitor för containrar.

Om du vill visa tilläggsloggarna använder du kubectl:

# Get the azure-policy pod name installed in kube-system namespace
kubectl logs <azure-policy pod name> -n kube-system

# Get the gatekeeper pod name installed in gatekeeper-system namespace
kubectl logs <gatekeeper pod name> -n gatekeeper-system

Om du försöker felsöka en viss ComplianceReasonCode som visas i dina efterlevnadsresultat kan du söka i poddloggarna för azure-policy för att se det fullständiga tillhörande felet.

Mer information finns i Debugging Gatekeeper (Felsöka Gatekeeper) i Gatekeeper-dokumentationen.

Visa Gatekeeper-artefakter

När tillägget har laddat ned principtilldelningarna och installerat villkorsmallarna och begränsningarna i klustret kommenteras både med Azure Policy-information som principtilldelnings-ID och principdefinitions-ID. Använd följande steg för att konfigurera klienten för att visa tilläggsrelaterade artefakter:

  1. Konfigurera kubeconfig för klustret.

    För ett Azure Kubernetes Service-kluster använder du följande Azure CLI:

    # Set context to the subscription
    az account set --subscription <YOUR-SUBSCRIPTION>
    
    # Save credentials for kubeconfig into .kube in your home folder
    az aks get-credentials --resource-group <RESOURCE-GROUP> --name <CLUSTER-NAME>
    
  2. Testa klusteranslutningen.

    Kör kommandot kubectl cluster-info. En lyckad körning gör att varje tjänst svarar med en URL där den körs.

Visa mallarna för tilläggsbegränsningar

Om du vill visa villkorsmallar som laddats ned av tillägget kör du kubectl get constrainttemplates. Villkorsmallar som börjar med k8sazure är de som installeras av tillägget.

Visa mallarna för tilläggsmutation

Om du vill visa mutationsmallar som laddats ned av tillägget kör du kubectl get assign, kubectl get assignmetadataoch kubectl get modifyset.

Hämta Azure Policy-mappningar

Om du vill identifiera mappningen mellan en villkorsmall som laddats ned till klustret och principdefinitionen använder du kubectl get constrainttemplates <TEMPLATE> -o yaml. Resultatet ser ut ungefär så här:

apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
    annotations:
    azure-policy-definition-id: /subscriptions/<SUBID>/providers/Microsoft.Authorization/policyDefinitions/<GUID>
    constraint-template-installed-by: azure-policy-addon
    constraint-template: <URL-OF-YAML>
    creationTimestamp: "2021-09-01T13:20:55Z"
    generation: 1
    managedFields:
    - apiVersion: templates.gatekeeper.sh/v1beta1
    fieldsType: FieldsV1
...

<SUBID> är prenumerations-ID och <GUID> är ID för den mappade principdefinitionen. <URL-OF-YAML> är källplatsen för villkorsmallen som tillägget laddades ned för att installeras i klustret.

När du har namnen på de nedladdade villkorsmallarna för tillägg kan du använda namnet för att se de relaterade begränsningarna. Använd kubectl get <constraintTemplateName> för att hämta listan. Begränsningar som installeras av tillägget börjar med azurepolicy-.

Visa villkorsinformation

Begränsningen innehåller information om överträdelser och mappningar till principdefinitionen och tilldelningen. Om du vill se informationen använder du kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml. Resultatet ser ut ungefär så här:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAzureContainerAllowedImages
metadata:
  annotations:
    azure-policy-assignment-id: /subscriptions/<SUB-ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Authorization/policyAssignments/<ASSIGNMENT-GUID>
    azure-policy-definition-id: /providers/Microsoft.Authorization/policyDefinitions/<DEFINITION-GUID>
    azure-policy-definition-reference-id: ""
    azure-policy-setdefinition-id: ""
    constraint-installed-by: azure-policy-addon
    constraint-url: <URL-OF-YAML>
  creationTimestamp: "2021-09-01T13:20:55Z"
spec:
  enforcementAction: deny
  match:
    excludedNamespaces:
    - kube-system
    - gatekeeper-system
    - azure-arc
  parameters:
    imageRegex: ^.+azurecr.io/.+$
status:
  auditTimestamp: "2021-09-01T13:48:16Z"
  totalViolations: 32
  violations:
  - enforcementAction: deny
    kind: Pod
    message: Container image nginx for container hello-world has not been allowed.
    name: hello-world-78f7bfd5b8-lmc5b
    namespace: default
  - enforcementAction: deny
    kind: Pod
    message: Container image nginx for container hello-world has not been allowed.
    name: hellow-world-89f8bfd6b9-zkggg

Felsöka tillägget

Mer information om hur du felsöker tillägget för Kubernetes finns i avsnittet Kubernetes i azure policy-felsökningsartikeln.

Om du har problem med Azure Policy-tillägget för Arc-tillägg går du till:

För Azure Policy-relaterade problem går du till:

Azure Policy-tillägg för AKS-ändringslogg

Azure Policys tillägg för AKS har ett versionsnummer som anger avbildningsversionen av tillägget. Eftersom funktionsstöd nyligen har introducerats i tillägget ökas versionsnumret.

Det här avsnittet hjälper dig att identifiera vilken tilläggsversion som är installerad i klustret och även dela en historisk tabell med Azure Policy-tilläggsversionen som är installerad per AKS-kluster.

Identifiera vilken tilläggsversion som är installerad i klustret

Azure Policy-tillägget använder standardschemat semantisk versionshantering för varje version. Om du vill identifiera den Azure Policy-tilläggsversion som används kan du köra följande kommando: kubectl get pod azure-policy-<unique-pod-identifier> -n kube-system -o json | jq '.spec.containers[0].image'

Om du vill identifiera den Gatekeeper-version som azure policytillägget använder kan du köra följande kommando: kubectl get pod gatekeeper-controller-<unique-pod-identifier> -n gatekeeper-system -o json | jq '.spec.containers[0].image'

För att slutligen identifiera den AKS-klusterversion som du använder följer du den länkade AKS-vägledningen.

Tilläggsversioner som är tillgängliga per varje AKS-klusterversion

1.7.1

Introduktion till CEL och VAP. Common Expression Language (CEL) är ett Kubernetes-inbyggt uttrycksspråk som kan användas för att deklarera verifieringsregler för en princip. Funktionen Validering av antagningsprincip (VAP) ger utvärdering av in-tree-principer, minskar svarstiden för antagningsbegäranden och förbättrar tillförlitligheten och tillgängligheten. Valideringsåtgärderna som stöds är Neka, Varna och Granskning. Anpassad principredigering för CEL/VAP är tillåten och befintliga användare behöver inte konvertera sin Rego till CEL eftersom de båda stöds och används för att tillämpa principer. Om du vill använda CEL och VAP måste användarna registrera sig i funktionsflaggan AKS-AzurePolicyK8sNativeValidation Microsoft.ContainerService i namnområdet. Mer information finns i Gatekeeper-dokumentationen.

Säkerhetsförbättringar.

  • Publicerad sep 2024
  • Kubernetes 1.27+ (VAP-generering stöds endast på 1.30+)
  • Gatekeeper 3.17.1

1.7.0

Introduktion till expansion, en skift vänster-funktion som låter dig veta i förväg om dina arbetsbelastningsresurser (distributioner, repliker, jobb osv.) kommer att producera tillåtna poddar. Expansion bör inte ändra beteendet för dina principer. I stället skiftar den bara Gatekeepers utvärdering av poddomfattande principer så att de sker vid arbetsbelastningens antagningstid i stället för poddantagningstid. För att kunna utföra den här utvärderingen måste den dock generera och utvärdera en konsekvenspodd som baseras på poddspecifikationen som definierats i arbetsbelastningen, som kan ha ofullständiga metadata. Konsekvenspodden innehåller till exempel inte rätt ägarreferenser. På grund av den här lilla risken för att principbeteendet ändras introducerar vi expansion som inaktiverad som standard. Om du vill aktivera expansion för en viss principdefinition anger du .policyRule.then.details.source till All. Inbyggda objekt kommer snart att uppdateras för att aktivera parameterisering av det här fältet. Om du testar din principdefinition och upptäcker att konsekvensanalyspodden som genereras i utvärderingssyfte är ofullständig kan du också använda en mutation med källan Generated för att mutera vad händer om-poddar. Mer information om det här alternativet finns i Gatekeeper-dokumentationen.

Säkerhetsförbättringar.

  • Släpptes juli 2024
  • Kubernetes 1.27+
  • Gatekeeper 3.16.3

1.6.1

Säkerhetsförbättringar.

  • Publicerad maj 2024
  • Gatekeeper 3.14.2

1.5.0

Säkerhetsförbättringar.

  • Publicerad maj 2024
  • Kubernetes 1.27+
  • Gatekeeper 3.16.3

1.4.0

Aktiverar mutation och externa data som standard. Den ytterligare muterande webhooken och den ökade tidsgränsen för validering av webhook kan lägga till svarstid för anrop i värsta fall. Introducerar även stöd för att visa principdefinitioner och ange definitionsversion i efterlevnadsresultat.

  • Publicerad maj 2024
  • Kubernetes 1.25+
  • Gatekeeper 3.14.0

1.3.0

Introducerar feltillstånd för felprinciper, vilket gör att de kan skiljas från principer i inkompatibla tillstånd. Lägger till stöd för v1-villkorsmallar och användning av parametern excludedNamespaces i mutationsprinciper. Lägger till en felstatuskontroll för villkorsmallar efter installationen.

  • Släpptes februari 2024
  • Kubernetes 1.25+
  • Gatekeeper 3.14.0

1.2.1

  • Släpptes oktober 2023
  • Kubernetes 1.25+
  • Gatekeeper 3.13.3

1.1.0

  • Släpptes juli 2023
  • Kubernetes 1.27+
  • Gatekeeper 3.11.1

1.0.1

  • Släpptes juni 2023
  • Kubernetes 1.24+
  • Gatekeeper 3.11.1

1.0.0

Azure Policy for Kubernetes stöder nu mutationer för att åtgärda AKS-kluster i stor skala!

Ta bort tillägget

Ta bort tillägget från AKS

Om du vill ta bort Azure Policy-tillägget från ditt AKS-kluster använder du antingen Azure Portal eller Azure CLI:

  • Azure Portal

    1. Starta AKS-tjänsten i Azure Portal genom att välja Alla tjänster och sedan söka efter och välja Kubernetes-tjänster.

    2. Välj det AKS-kluster där du vill inaktivera Azure Policy-tillägget.

    3. Välj Principer till vänster på kubernetes-tjänstsidan.

    4. På huvudsidan väljer du knappen Inaktivera tillägg .

  • Azure CLI

    # Log in first with az login if you're not using Cloud Shell
    
    az aks disable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
    

Ta bort tillägget från Azure Arc-aktiverade Kubernetes

Kommentar

Helm-modellen för Azure Policy-tillägget är nu inaktuell. Du bör välja Azure Policy Extension för Azure Arc-aktiverade Kubernetes i stället.

Kör följande Helm-kommando för att ta bort Azure Policy-tillägget och Gatekeeper från ditt Azure Arc-aktiverade Kubernetes-kluster:

helm uninstall azure-policy-addon

Ta bort tillägget från AKS-motorn

Kommentar

AKS Engine-produkten är nu inaktuell för Azures offentliga molnkunder. Överväg att använda Azure Kubernetes Service (AKS) för hanterade Kubernetes- eller Kluster-API-providern Azure för självhanterade Kubernetes. Det finns inga nya funktioner planerade. det här projektet uppdateras endast för CVEs och liknande, med Kubernetes 1.24 som den slutliga versionen för att ta emot uppdateringar.

Om du vill ta bort Azure Policy-tillägget och Gatekeeper från AKS Engine-klustret använder du den metod som överensstämmer med hur tillägget installerades:

  • Om det installeras genom att ange egenskapen addons i klusterdefinitionen för AKS Engine:

    Distribuera om klusterdefinitionen till AKS Engine när du har ändrat egenskapen addons för azure-policy till false:

    "addons": [
      {
        "name": "azure-policy",
        "enabled": false
      }
    ]
    

    Mer information finns i AKS Engine – Inaktivera Azure Policy-tillägg.

  • Kör följande Helm-kommando om det är installerat med Helm-diagram:

    helm uninstall azure-policy-addon
    

Begränsningar

  • Allmänna Azure Policy-definitioner och tilldelningsgränser finns i Azure Policys dokumenterade gränser
  • Azure Policy-tillägg för Kubernetes kan bara distribueras till Linux-nodpooler.
  • Maximalt antal poddar som stöds av Azure Policy-tillägget per kluster: 10 000
  • Maximalt antal poster som inte är kompatibla per princip per kluster: 500
  • Maximalt antal poster som inte uppfyller kraven per prenumeration: 1 miljon
  • Installationer av Gatekeeper utanför Azure Policy-tillägget stöds inte. Avinstallera alla komponenter som installerades av en tidigare Gatekeeper-installation innan du aktiverar Azure Policy-tillägget.
  • Orsaker till bristande efterlevnad är inte tillgängliga för läget Microsoft.Kubernetes.Data Resource Provider. Använd komponentinformation.
  • Undantag på komponentnivå stöds inte för resursproviderlägen. Stöd för parametrar är tillgängligt i Azure Policy-definitioner för att exkludera och inkludera specifika namnområden.
  • Att använda anteckningen metadata.gatekeeper.sh/requires-sync-data i en villkorsmall för att konfigurera replikering av data från klustret till OPA-cachen är för närvarande endast tillåtet för inbyggda principer. Anledningen är att den kan öka resursanvändningen för Gatekeeper-poddar dramatiskt om den inte används noggrant.

Konfigurera Gatekeeper-konfigurationen

Det går inte att ändra Gatekeeper-konfigurationen eftersom den innehåller viktiga säkerhetsinställningar. Ändringar i konfigurationen avstäms.

Använda data.inventory i villkorsmallar

För närvarande använder flera inbyggda principer datareplikering, vilket gör det möjligt för användare att synkronisera befintliga resurser på klustret till OPA-cachen och referera till dem under utvärderingen av en AdmissionReview begäran. Datareplikeringsprinciper kan skiljas från förekomsten av data.inventory i Rego och förekomsten av anteckningen metadata.gatekeeper.sh/requires-sync-data , som informerar Azure Policy-tillägget om vilka resurser som måste cachelagras för att principutvärderingen ska fungera korrekt. Den här processen skiljer sig från fristående Gatekeeper, där den här anteckningen är beskrivande, inte beskrivande.

Datareplikering är för närvarande blockerad för användning i anpassade principdefinitioner, eftersom replikering av resurser med höga instansantal kan avsevärt öka Gatekeeper-poddarnas resursanvändning om den inte används noggrant. Ett fel visas ConstraintTemplateInstallFailed när du försöker skapa en anpassad principdefinition som innehåller en villkorsmall med den här kommentaren.

Det kan verka som om du tar bort anteckningen för att minska det fel du ser, men principtillägget synkroniserar inte några nödvändiga resurser för begränsningsmallen i cacheminnet. Därför utvärderas dina principer mot en tom data.inventory (förutsatt att ingen inbyggd tilldelas som replikerar nödvändiga resurser). Detta leder till missvisande efterlevnadsresultat. Som tidigare nämnts är det inte heller tillåtet att redigera konfigurationen manuellt för att cachelagras de resurser som krävs.

Följande begränsningar gäller endast för Azure Policy-tillägget för AKS:

  • AKS Pod-säkerhetsprincipen och Azure Policy-tillägget för AKS kan inte båda aktiveras. Mer information finns i säkerhetsbegränsningar för AKS-poddar.
  • Namnområden som automatiskt undantas av Azure Policy-tillägget för utvärdering: kube-system och gatekeeper-system.

Vanliga frågor och svar

Vad distribuerar Azure Policy-tillägget/Azure Policy-tillägget i mitt kluster vid installationen?

Azure Policy-tillägget kräver tre Gatekeeper-komponenter som ska köras: En granskningspodd och två webhook-poddrepliker. En Azure Policy-podd och en Azure Policy webhook-podd installeras också.

Hur mycket resursförbrukning ska jag förvänta mig att Azure Policy-tillägget/tillägget ska användas för varje kluster?

Azure Policy for Kubernetes-komponenter som körs i klustret förbrukar fler resurser när antalet Kubernetes-resurser och principtilldelningar ökar i klustret, vilket kräver gransknings- och tvingande åtgärder.

Följande är uppskattningar som hjälper dig att planera:

  • För färre än 500 poddar i ett enda kluster med högst 20 begränsningar: två vCPU:er och 350 MB minne per komponent.
  • För mer än 500 poddar i ett enda kluster med högst 40 begränsningar: tre virtuella processorer och 600 MB minne per komponent.

Kan Azure Policy for Kubernetes-definitioner tillämpas på Windows-poddar?

Windows-poddar stöder inte säkerhetskontexter. Därför kan vissa Av Azure Policy-definitionerna, som att inte tillåta rotprivilegier, eskaleras i Windows-poddar och gäller endast för Linux-poddar.

Vilken typ av diagnostikdata samlas in av Azure Policy-tillägget?

Azure Policy-tillägget för Kubernetes samlar in begränsade klusterdiagnostikdata. Dessa diagnostikdata är viktiga tekniska data som rör programvara och prestanda. Data används på följande sätt:

  • Håll Azure Policy-tillägget uppdaterat.
  • Håll Azure Policy-tillägget säkert, tillförlitligt och högpresterande.
  • Förbättra Azure Policy-tillägget – genom aggregerad analys av användningen av tillägget.

Informationen som samlas in av tillägget är inte personliga data. Följande information samlas in för närvarande:

  • Azure Policy-tilläggsagentversion
  • Klustertyp
  • Klusterregion
  • Klusterresursgrupp
  • Klusterresurs-ID
  • Klusterprenumerations-ID
  • Klusteroperativsystem (exempel: Linux)
  • Klusterstad (exempel: Seattle)
  • Klusterstat eller provins (exempel: Washington)
  • Klusterland eller region (exempel: USA)
  • Undantag/fel som påträffas av Azure Policy-tillägg under agentinstallation vid principutvärdering
  • Antal Gatekeeper-principdefinitioner som inte har installerats av Azure Policy-tillägget

Vad är allmänna metodtips att tänka på när du installerar Azure Policy-tillägget?

  • Använd systemnodpoolen med CriticalAddonsOnly taint för att schemalägga Gatekeeper-poddar. Mer information finns i Använda systemnodpooler.
  • Skydda utgående trafik från dina AKS-kluster. Mer information finns i Kontrollera utgående trafik för klusternoder.
  • Om klustret har aad-pod-identity aktiverats ändrar NMI-poddar (Node Managed Identity) noderna iptables för att fånga upp anrop till Slutpunkten för Azure-instansmetadata. Den här konfigurationen innebär att alla begäranden som görs till metadataslutpunkten fångas upp av NMI även om podden inte använder aad-pod-identity.
  • AzurePodIdentityException CRD kan konfigureras för att informera om aad-pod-identity att alla begäranden till metadataslutpunkten som kommer från en podd som matchar etiketter som definierats i CRD bör vara proxied utan någon bearbetning i NMI. Systempoddar med kubernetes.azure.com/managedby: aks etikett i kube-system-namnområdet bör undantas i aad-pod-identity genom att AzurePodIdentityException konfigurera CRD. Mer information finns i Inaktivera aad-pod-identity för en specifik podd eller ett visst program. Om du vill konfigurera ett undantag installerar du YAML med mikrofonfel.

Nästa steg