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 avaks-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
Installera CLI-tillägget
aks-preview
med kommandotaz extension add
.az extension add --name aks-preview
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
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.
Kontrollera registreringsstatusen
az feature show
med kommandot .az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
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 ns2
anvä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.
Azure Kubernetes Service