Dela via


Använda distributionsskydd för att tillämpa metodtips i Azure Kubernetes Service (AKS) (förhandsversion)

Den här artikeln visar hur du använder distributionsskydd för att tillämpa metodtips för ett AKS-kluster (Azure Kubernetes Service).

Översikt

Under hela utvecklingslivscykeln är det vanligt att buggar, problem och andra problem uppstår om den första distributionen av dina Kubernetes-resurser innehåller felkonfigurationer. För att underlätta kubernetes-utvecklingen erbjuder Azure Kubernetes Service (AKS) distributionsskydd (förhandsversion). Distributionsskydd tillämpar Metodtips för Kubernetes i AKS-klustret via Azure Policy-kontroller.

Distributionsskydd erbjuder två konfigurationsnivåer:

  • Warning: Visar varningsmeddelanden i kodterminalen för att varna dig om eventuella icke-kompatibla klusterkonfigurationer, men tillåter ändå att begäran går igenom.
  • Enforcement: Framtvingar kompatibla konfigurationer genom att neka och mutera distributioner om de inte följer bästa praxis.

När du har konfigurerat distributionsskydd för "Varning" eller "Verkställighet" utvärderar distributionen programmatiskt dina kluster vid skapande eller uppdateringstid för efterlevnad. Distributionsskydd visar även aggregerad efterlevnadsinformation för dina arbetsbelastningar på resursnivå via Azure Policys efterlevnadsinstrumentpanel i Azure Portal eller i CLI eller terminalen. Att köra en inkompatibel arbetsbelastning anger att klustret inte följer bästa praxis och att arbetsbelastningar i klustret riskerar att drabbas av problem som orsakas av klusterkonfigurationen.

Viktigt!

AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:

Förutsättningar

  • Du måste aktivera Azure Policy-tillägget för AKS. Mer information finns i Aktivera Azure Policy i ditt AKS-kluster.

  • Om du vill konfigurera distributionsskydd måste du ha version 2.0.0b1 eller senare av aks-preview tillägget. Information om hur du installerar tillägget finns i Installera CLI-tillägget aks-preview. Vi rekommenderar också att du uppdaterar Azure CLI för att säkerställa att du har den senaste versionen installerad.

  • Om du vill skapa och ändra konfigurationen för distributionsskydd behöver du en prenumeration med följande behörigheter i AKS-klustret:

    • Microsoft.Authorization/policyAssignments/write
    • Microsoft.Authorization/policyAssignments/read
  • Du måste registrera funktionsflaggan för distributionsskydd. Information om hur du registrerar funktionsflaggan finns i Registrera funktionsflaggan för distributionsskydd.

Installera CLI-tillägget aks-preview

  1. Installera CLI-tillägget aks-preview med kommandot az extension add .

    az extension add --name aks-preview
    
  2. Uppdatera tillägget så att du har den senaste versionen installerad med kommandot az extension update .

    az extension update --name aks-preview
    

Registrera funktionsflaggan för distributionsskydd

  1. Registrera funktionsflaggan SafeguardsPreview az feature register med kommandot .

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    Det tar några minuter för statusen att visa Registrerad.

  2. Kontrollera registreringsstatusen az feature show med kommandot .

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. När statusen visar Registrerad uppdaterar du registreringen av resursprovidern Microsoft.ContainerService med hjälp av az provider register kommandot .

    az provider register --namespace Microsoft.ContainerService
    

Principer för distributionsskydd

Kommentar

Principerna ReadOnlyRootFilesystem och RootfilesystemInitContainers är för närvarande endast tillgängliga i Linux.

I följande tabell visas de principer som blir aktiva och de Kubernetes-resurser som de riktar in sig på när du aktiverar distributionsskydd. Du kan visa de tillgängliga distributionsskydden i Azure Portal som en Azure Policy-definition eller i inbyggda Azure Policy-definitioner för Azure Kubernetes Service. Avsikten med den här samlingen är att skapa en gemensam och allmän lista över metodtips som gäller för de flesta användare och användningsfall.

Princip för distributionsskydd Riktad Kubernetes-resurs Mutationsresultat om det är tillgängligt
[Förhandsversion]: Det går inte att redigera enskilda noder Nod Ej tillämpligt
Kubernetes-klustercontainrar CPU- och minnesresursgränser får inte överskrida de angivna gränserna Podd Anger cpu-resursgränser till 500 m om de inte anges och anger minnesgränser till 500Mi om det inte finns någon sökväg
[Förhandsversion]: Måste ha regler för antitillhörighet angivna Distribution, StatefulSet, ReplicationController, ReplicaSet Ej tillämpligt
[Förhandsversion]: Inga AKS-specifika etiketter Distribution, StatefulSet, Replicaset Ej tillämpligt
Kubernetes-klustercontainrar bör endast använda tillåtna avbildningar Podd Ej tillämpligt
[Förhandsversion]: Taints för reserverad systempool Nod Tar bort taint från en användarnodpool om den CriticalAddonsOnly inte har angetts. AKS använder CriticalAddonsOnly taint för att hålla kundpoddar borta från systempoolen. Den här konfigurationen säkerställer en tydlig separation mellan AKS-komponenter och kundpoddar och förhindrar borttagning av kundpoddar som inte tolererar borttagningen CriticalAddonsOnly .
Se till att klustercontainrar har konfigurerat beredskaps- eller liveness-avsökningar Podd Ej tillämpligt
Kubernetes-kluster bör använda CSI-drivrutinen (Container Storage Interface) StorageClass StorageClass Ej tillämpligt
[Förhandsversion]: Kubernetes-klustercontainrar bör endast hämta avbildningar när avbildningshämtningshemligheter finns Podd Ej tillämpligt
[Förhandsversion]: Kubernetes-klustret bör implementera korrekta poddavbrottsbudgetar Distribution, ReplicaSet, StatefulSet Anger maxUnavailable i PodDisruptionBudget-resursen till 1.
[Förhandsversion]: Kubernetes-klustertjänster bör använda unika väljare Tjänst Ej tillämpligt
[Förhandsversion]: ReadOnlyRootFilesystem i poddspecifikationen är inställt på sant Podd Anger readOnlyRootFilesystem i poddspecifikationen till true om den inte har angetts. Den här konfigurationen förhindrar att containrar skriver till rotfilsystemet.
[Förhandsversion]: RootfilesystemInitContainers i poddspecifikationen är inställt på sant Podd Anger rootFilesystemInitContainers i poddspecifikationen till true om den inte har angetts.
[Förhandsversion]: Kubernetes-klustercontaineravbildningar bör inte innehålla den senaste avbildningstaggen Distribution, StatefulSet, ReplicationController, ReplicaSet Ej tillämpligt
[Förhandsversion]: Kubernetes-klustercontaineravbildningar måste innehålla preStop-kroken Distribution, StatefulSet, ReplicationController, ReplicaSet Ej tillämpligt

Om du vill skicka en idé eller begäran om distributionsskydd öppnar du ett problem på AKS GitHub-lagringsplatsen och lägger till [deployment safeguards request] i början av rubriken.

Aktivera distributionsskydd

Kommentar

Om du har aktiverat Azure Policy för första gången för att använda distributionsskydd kan du behöva vänta upp till 20 minuter innan Azure Policy börjar gälla.

Att använda distributionsskyddsnivån Enforcement innebär att du väljer att distributioner ska blockeras och muteras. Tänk på hur dessa principer kan fungera med ditt AKS-kluster innan du aktiverar Enforcement.

Aktivera distributionsskydd i ett nytt kluster

Aktivera distributionsskydd i ett nytt kluster med hjälp av az aks create kommandot med flaggorna --safeguards-level och --safeguards-version .

Om du vill få varningar om inkompatibilitet anger du --safeguards-level till Warning. Om du vill neka eller ändra alla icke-kompatibla distributioner anger du det till Enforcement. Om du vill ta emot varningar anger du --safeguards-level till "Varning". Om du vill neka eller mutera alla distributioner som inte följer distributionsskyddet anger du --safeguards-level till "Enforcement". Använd flaggan för --safeguards-version att ange versionen för distributionsskydd. För närvarande är V2.0.0 den senaste versionen av distributionsskydd.

az aks create \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --enable-addons azure-policy \
    --safeguards-level Warning \
    --safeguards-version v2.0.0 \
    --generate-ssh-keys

Aktivera distributionsskydd i ett befintligt kluster

Aktivera distributionsskydd i ett befintligt kluster som har Azure Policy-tillägget aktiverat med kommandot az aks update med flaggorna --safeguards-level och --safeguards-version . Om du vill få varningar om inkompatibilitet anger du --safeguards-level till Warning. Om du vill neka eller ändra alla icke-kompatibla distributioner anger du det till Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0

Om du vill uppdatera distributionsskyddsnivån för ett befintligt kluster använder du az aks update kommandot med --safeguards-level flaggan inställd på Warning eller Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement

Exkluderande namnområden

Du kan också undanta vissa namnområden från distributionsskydd. När du exkluderar ett namnområde påverkas inte aktiviteten i det namnområdet av distributionsskyddsvarningar eller tillämpning.

Om du till exempel vill exkludera namnrymderna ns1 och ns2använder du en kommaavgränsad lista med namnområden med --safeguards-excluded-ns flaggan, som du ser i följande exempel:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2 

Uppdatera din distributionsskyddsversion

Kommentar

v2.0.0 är den senaste versionen av distributionsskydd.

Uppdatera din distributionsskyddsversion med kommandot az aks update med --safeguards-version flaggan inställd på den nya versionen. I följande exempel uppdateras ett befintligt kluster så att det använder version 2.0.0:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0

Verifiera efterlevnad mellan kluster

När du har distribuerat Kubernetes-manifestet visas varningar eller ett potentiellt överbelastningsmeddelande i CLI eller terminalen om klustret inte är kompatibelt med distributionsskydd, som du ser i följande exempel:

Varning!

$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created

Tillämpning

Med distributionsskyddsmutationer Enforcement muterar nivån dina Kubernetes-resurser när det är tillämpligt. Dina Kubernetes-resurser måste dock fortfarande skicka alla skydd för att distribueras korrekt. Om några skyddsprinciper misslyckas nekas resursen och distribueras inte.

$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.

Om dina Kubernetes-resurser uppfyller tillämpliga mutationsskydd och uppfyller alla andra skyddskrav distribueras de korrekt, vilket visas i följande exempel:

$ kubectl apply -f pod.yml
pod/my-pod created

Verifiera efterlevnad mellan kluster med azure policy-instrumentpanelen

Om du vill kontrollera att distributionsskyddet har tillämpats och för att kontrollera klustrets efterlevnad går du till sidan Azure Portal för klustret och väljer Principer och väljer sedan Gå till Azure Policy.

I listan över principer och initiativ väljer du det initiativ som är associerat med distributionsskydd. Du ser en instrumentpanel som visar efterlevnadstillstånd i ditt AKS-kluster.

Kommentar

Azure Policy-initiativet måste begränsas till klustrets resursgrupp för att kunna utvärdera efterlevnaden i aks-klustret korrekt.

Inaktivera distributionsskydd

Inaktivera distributionsskydd i klustret med kommandot az aks update och ange --safeguards-level till Off.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off

--

Vanliga frågor

Jag aktiverade distributionsskydd med Azure Policy för första gången. Varför ser jag inga varningar? Varför avvisas inte mina poddar?

Azure Policy kan ta upp till 35 minuter att synkronisera med klustret när det har aktiverats för första gången.

Jag har precis bytt från Varning till Verkställande. Kommer detta att träda i kraft omedelbart?

När du byter distributionsskyddsnivå kan du behöva vänta upp till 15 minuter tills den nya nivån börjar gälla.

Kan jag skapa egna mutationer?

Nej. Om du har en idé om skydd öppnar du ett problem på AKS GitHub-lagringsplatsen och lägger till [deployment safeguards request] i början av rubriken.

Kan jag välja och välja vilka mutationer jag vill ha i Enforcement?

Nej. Distributionsskydd är allt eller inget. När du aktiverar Varning eller Verkställighet är alla skyddsåtgärder aktiva.

Varför blev min distributionsresurs antagen trots att den inte följde metodtipsen?

Distributionsskydd tillämpar bästa praxis-standarder via Azure Policy-kontroller och har principer som verifierar mot Kubernetes-resurser. För att utvärdera och framtvinga klusterkomponenter utökar Azure Policy Gatekeeper. Gatekeeper-tillämpningen fungerar också för närvarande i en fail-open modell. Eftersom det inte finns någon garanti för att Gatekeeper svarar på vårt nätverksanrop ser vi till att valideringen i så fall hoppas över så att nekandet inte blockerar dina distributioner.

Mer information finns i arbetsbelastningsverifiering i Gatekeeper.

Nästa steg

  • Läs mer om metodtips för att använda ett AKS-kluster.