Teilen über


Verwenden von Bereitstellungsvorkehrungen zum Erzwingen bewährter Methoden in Azure Kubernetes Service (AKS) (Preview)

In diesem Artikel erfahren Sie, wie Sie Bereitstellungsvorkehrungen verwenden, um bewährte Methoden für einen Azure Kubernetes Service (AKS)-Cluster zu erzwingen.

Übersicht

Während des gesamten Entwicklungslebenszyklus ist es üblich, dass Fehler, Probleme und andere Probleme auftreten, wenn die anfängliche Bereitstellung Ihrer Kubernetes-Ressourcen Fehlkonfigurationen enthält. Um die Belastung der Kubernetes-Entwicklung zu erleichtern, bietet Azure Kubernetes Service (AKS) Bereitstellungsvorkehrungen (Vorschau). Bereitstellungsvorkehrungen erzwingen bewährte Methoden von Kubernetes in Ihrem AKS-Cluster über Azure-Richtliniensteuerelemente.

Bereitstellungsvorkehrungen bieten zwei Konfigurationsebenen.

  • Warning: Zeigt im Codeterminal Warnmeldungen an, um Sie auf nicht konforme Clusterkonfigurationen hinzuweisen, lässt die Anforderung aber dennoch zu.
  • Enforcement: Erzwingt konforme Konfigurationen, indem es Bereitstellungen verweigert und verändert, wenn sie nicht den bewährten Methoden entsprechen.

Nachdem Sie Bereitstellungsvorkehrungen n für „Warnung“ oder „Erzwingung“ konfiguriert haben, überprüft die Bereitstellung Ihre Cluster programmgesteuert zur Erstellung oder Aktualisierungszeit für die Compliance. Bereitstellungsvorkehrungen zeigen auch aggregierte Complianceinformationen für Ihre Workloads pro Ressourcenebene über das Compliance-Dashboard von Azure-Richtlinien im Azure-Portal oder in Ihrer CLI oder Ihrem Terminal an. Das Ausführen einer nicht kompatiblen Workload weist darauf hin, dass Ihr Cluster nicht den bewährten Methoden folgt und dass Workloads auf Ihrem Cluster gefährdet sind, wenn Probleme auftreten, die durch Ihre Clusterkonfiguration verursacht werden.

Wichtig

AKS-Previewfunktionen stehen gemäß dem Self-Service- und Aktivierungsprinzip zur Verfügung. Vorschauversionen werden „wie besehen“ und „wie verfügbar“ bereitgestellt und sind von Service Level Agreements und der Herstellergarantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:

Voraussetzungen

Installieren der CLI-Erweiterung aks-preview

  1. Installieren Sie die CLI-Erweiterung aks-preview mit dem Befehl az extension add.

    az extension add --name aks-preview
    
  2. Aktualisieren Sie die Erweiterung mit dem Befehl az extension update, um sicherzustellen, dass Sie die neueste Version installiert haben.

    az extension update --name aks-preview
    

Registrieren der Funktionskennzeichnung für Bereitstellungsvorkehrungen

  1. Registrieren Sie das Featureflag SafeguardsPreview mithilfe des Befehls az feature register.

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

    Es dauert einige Minuten, bis der Status Registered (Registriert) angezeigt wird.

  2. Überprüfen Sie den Registrierungsstatus mithilfe des Befehls az feature show.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Wenn der Zustand Registered (Registriert) lautet, aktualisieren Sie die Registrierung des Ressourcenanbieters Microsoft.ContainerService mithilfe des Befehls az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Richtlinien für Bereitstellungsvorkehrungen

Hinweis

Die Richtlinien ReadOnlyRootFilesystem und RootfilesystemInitContainers sind derzeit nur unter Linux verfügbar.

In der folgenden Tabelle sind die Richtlinien aufgeführt, die aktiv werden, und die Kubernetes-Ressource aktivieren, auf die sie abzielen, wenn Sie Bereitstellungsvorkehrungen. Sie können die derzeit verfügbaren Bereitstellungsvorkehrungen im Azure-Portal als Azure Policy-Definition anzeigen oder sie in den integrierten Azure Policy-Definition für Azure Kubernetes Service anzeigen. Die Absicht dieser Sammlung besteht darin, eine allgemeine und generische Liste der bewährten Methoden zu erstellen, die für die meisten Benutzer und Anwendungsfälle gelten.

Richtlinien für Bereitstellungsvorkehrungen Kubernetes-Ressourcenmodell-Ziel Mutationsergebnis, falls verfügbar
[Vorschau]: Einzelne Knoten können nicht bearbeitet werden Node N/V
Die CPU- und Speicherressourcengrenzen für Kubernetes-Cluster-Container sollten die angegebenen Grenzen nicht überschreiten Pod Setzt den Grenzwert der CPU-Ressourcen auf 500m, wenn er nicht gesetzt ist, und setzt den Grenzwert des Arbeitsspeichers auf 500Mi, wenn kein Pfad vorhanden ist
[Vorschau]: Antiaffinitätsregeln müssen festgelegt sein Deployment, StatefulSet, ReplicationController, ReplicaSet N/V
[Vorschau]: Keine spezifischen AKS-Bezeichnungen Deployment, StatefulSet, Replicaset N/V
Container in einem Kubernetes-Cluster dürfen nur zugelassene Images verwenden Pod N/V
[Vorschau]: Reservierte Systempool-Taints Node Entfernt den CriticalAddonsOnly-Taint aus einem Benutzer-Knotenpool, wenn er nicht gesetzt ist. AKS verwendet den CriticalAddonsOnly-Taint, um Kunden-Pods vom Systempool fernzuhalten. Diese Konfiguration stellt eine klare Trennung zwischen AKS-Komponenten und Kunden-Pods sicher und verhindert die Entfernung von Kunden-Pods, die den CriticalAddonsOnly-Taint nicht tolerieren.
Stellen Sie sicher, dass für Clustercontainer Bereitschafts- oder Livetests konfiguriert sind Pod N/V
Kubernetes-Cluster sollten den Container Storage Interface(CSI)-Treiber StorageClass verwenden StorageClass N/V
[Vorschau]: Kubernetes-Clustercontainer sollten nur Images pullen, wenn Geheimnisse für das Pullen von Images vorhanden sind Pod N/V
[Vorschau]: Kubernetes-Cluster sollte präzise Budgets für die Unterbrechung von Pods implementieren Deployment, ReplicaSet, StatefulSet Legt in der PodDisruptionBudget-Ressource maxUnavailable auf 1 fest.
[Vorschau]: Kubernetes-Clusterdienste sollten eindeutige Selektoren verwenden Dienst N/V
[Preview]: In der Pod-Spezifikation ist ReadOnlyRootFilesystem auf „true“ festgelegt. Pod Legt in der Pod-Spezifikation readOnlyRootFilesystem auf true fest, falls es nicht festgelegt ist. Diese Konfiguration verhindert, dass Container in das Stammdateisystem schreiben.
[Preview]: In der Pod-Spezifikation ist RootfilesystemInitContainers auf „true“ festgelegt. Pod Legt rootFilesystemInitContainers in der Pod-Spezifikation auf true fest, falls es nicht festgelegt ist.
[Vorschau]: Kubernetes-Cluster-Containerimages sollten nicht das neueste Imagetag enthalten Deployment, StatefulSet, ReplicationController, ReplicaSet N/V
[Vorschau]: Kubernetes-Cluster-Containermages müssen den preStop-Hook enthalten Deployment, StatefulSet, ReplicationController, ReplicaSet N/V

Wenn Sie eine Idee oder Anforderung für Bereitstellungsvorkehrungen übermitteln möchten, öffnen Sie ein Problem im AKS GitHub-Repository und fügen Sie am Anfang des Titels [deployment safeguards request] hinzu.

Aktivieren von Bereitstellungsvorkehrungen

Hinweis

Wenn Sie Azure Policy zum ersten Mal für die Verwendung von Bereitstellungsvorkehrungen aktiviert haben, müssen Sie möglicherweise bis zu 20 Minuten warten, bis Azure Policy wirksam wird.

Wenn Sie die Bereitstellungsvorkehrungsebene Enforcement verwenden, erklären Sie sich damit einverstanden, dass die Bereitstellung blockiert und verändert wird. Bitte beachten Sie, wie diese Richtlinien mit Ihrem AKS-Cluster funktionieren, bevor Sie Enforcement aktivieren.

Aktivieren von Bereitstellungsvorkehrungen für einen neuen Cluster

Aktivieren Sie Bereitstellungsvorkehrungen für einen neuen Cluster mithilfe des Befehls az aks create und den Flags --safeguards-level und --safeguards-version.

Wenn Sie Nichtkompatibilitätswarnungen erhalten möchten, legen Sie die Benachrichtigung --safeguards-level auf Warning fest. Wenn Sie alle nicht kompatiblen Bereitstellungen verweigern oder stummschalten möchten, legen Sie sie auf Enforcement fest. Um Warnungen zu erhalten, legen Sie --safeguards-level auf „Warnung“ fest. Um alle Bereitstellungen zu verweigern oder zu verändern, die nicht den Bereitstellungsvorkehrungen entsprechen, legen Sie --safeguards-level auf „Erzwingung“ fest. Um die Bereitstellungsvorkehrungsversion festzulegen, verwenden Sie das Flag --safeguards-version. Derzeit ist V2.0.0 die neueste Version der Bereitstellungsvorkehrungen.

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

Aktivieren von Bereitstellungsvorkehrung in einem vorhandenen Cluster

Aktivieren Sie Bereitstellungsvorkehrungen für einen vorhandenen Cluster, der das Azure Policy-Add-On mithilfe des Befehls az aks update mit den Flags --safeguards-level und --safeguards-version aktiviert hat. Wenn Sie Nichtkompatibilitätswarnungen erhalten möchten, legen Sie die Benachrichtigung --safeguards-level auf Warning fest. Wenn Sie alle nicht kompatiblen Bereitstellungen verweigern oder stummschalten möchten, legen Sie sie auf Enforcement fest.

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

Wenn Sie die Bereitstellungsvorkehrungsebene in einem vorhandenen Cluster aktualisieren möchten, verwenden Sie den Befehl az aks update während das Flag --safeguards-level auf Warning oder Enforcement eingestellt ist.

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

Ausschließen von Namespaces

Sie können auch bestimmte Namespaces aus Bereitstellungsvorkehrungen ausschließen. Wenn Sie einen Namespace ausschließen, ist die Aktivität in diesem Namespace von Bereitstellungsvorkehrungswarnungen oder -erzwingungen nicht betroffen.

Um beispielsweise die Namespaces ns1 und ns2 auszuschließen, verwenden Sie eine durch Trennzeichen getrennte Liste von Namespaces mit dem Flag --safeguards-excluded-ns, wie im folgenden Beispiel gezeigt:

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

Aktualisieren der Version der Bereitstellungsvorkehrung

Hinweis

v2.0.0 ist die neueste Version der Bereitstellungsvorkehrungen.

Aktualisieren Sie die Version der Bereitstellungsvorkehrungen mithilfe des Befehls az aks update, wobei das Flag --safeguards-version auf die neue Version festgelegt ist. Im folgenden Beispiel wird ein vorhandener Cluster aktualisiert, um Version 2.0.0 zu verwenden:

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

Überprüfen der Compliance über Cluster hinweg

Nach der Bereitstellung Ihres Kubernetes-Manifests sehen Sie in Ihrer CLI oder Ihrem Terminal Warnungen oder eine potenzielle Verweigerungsmeldung, wenn der Cluster nicht mit den Bereitstellungsvorkehrungen konform ist, wie in den folgenden Beispielen gezeigt:

Warning

$ 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

Durchsetzung

Mit Bereitstellungsvorkehrungsmutationen mutiert die Ebene Enforcement bei Bedarf Ihre Kubernetes-Ressourcen. Ihre Kubernetes-Ressourcen müssen jedoch immer noch alle Sicherheitsvorkehrungen durchlaufen, um erfolgreich bereitgestellt werden zu können. Wenn Sicherheitsrichtlinien fehlschlagen, wird Ihre Ressource abgelehnt und nicht bereitgestellt.

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

Wenn Ihre Kubernetes-Ressourcen mit den geltenden Mutationsschutzmechanismen übereinstimmen und alle anderen Schutzanforderungen erfüllen, werden sie erfolgreich bereitgestellt, wie im folgenden Beispiel gezeigt:

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

Überprüfen der Compliance über Cluster hinweg mithilfe des Azure Policy-Dashboards

Um sicherzustellen, dass Bereitstellungsvorkehrungen angewendet wurden und um die Compliance Ihres Clusters zu überprüfen, navigieren Sie zur Azure-Portalseite für Ihren Cluster, und wählen Sie Richtlinien und dann Azure-Richtlinie aus.

Wählen Sie aus der Liste der Richtlinien und Initiativen die Initiative aus, die den Bereitstellungsvorkehrungen zugeordnet ist. Es wird ein Dashboard mit dem Compliancestatus ihres AKS-Clusters angezeigt.

Hinweis

Um die Compliance in Ihrem AKS-Cluster ordnungsgemäß zu bewerten, muss die Azure-Richtlinieninitiative auf die Ressourcengruppe Ihres Clusters beschränkt sein.

Deaktivieren von Bereitstellungsvorkehrungen

Deaktivieren Sie Bereitstellungsvorkehrungen auf Ihrem Cluster mithilfe des Befehls az aks update, und legen Sie die Einstellung --safeguards-level auf Off fest.

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

--

Häufig gestellte Fragen

Ich habe Bereitstellungsvorkehrungen mit der Azure-Richtlinie zum ersten Mal aktiviert. Warum werden keine Warnungen angezeigt? Warum werden meine Pods nicht abgelehnt?

Die Azure-Richtlinie kann bis zu 35 Minuten dauern, bis sie zum ersten Mal mit Ihrem Cluster synchronisiert wird.

Ich habe gerade von Warnung zu Erzwingung gewechselt. Wird dies sofort wirksam?

Beim Wechseln der Bereitstellungsschutzebenen müssen Sie möglicherweise bis zu 15 Minuten warten, bis die neue Stufe wirksam wird.

Kann ich meine eigenen Mutationen erstellen?

Nein Wenn Sie eine Idee für Bereitstellungsvorkehrungen haben, öffnen Sie ein Problem im AKS GitHub-Repository und fügen Sie am Anfang des Titels [deployment safeguards request] hinzu.

Kann ich auswählen, welche Mutationen ich in der Durchsetzung haben möchte?

Nein Bereitstellungsvorkehrungen geht es um alles oder nichts. Sobald Sie die Option Warnung oder Durchsetzung aktivieren, sind alle Sicherheitsvorkehrungen aktiv.

Warum wurde meine Bereitstellungsressource zugelassen, obwohl sie nicht den bewährten Methoden folgt?

Bereitstellungsvorkehrungen erzwingen bewährte Methodenstandards über Azure-Richtliniensteuerelemente und verfügen über Richtlinien, die anhand von Kubernetes-Ressourcen überprüft werden. Um Clusterkomponenten auszuwerten und zu erzwingen, erweitert Gatekeeper die Azure-Richtlinie. Die Gatekeeper-Erzwingung arbeitet derzeit auch in einem fail-open Modell. Da keine Garantie dafür besteht, dass Gatekeeper auf unseren Netzwerkanruf reagiert, stellen wir sicher, dass in diesem Fall die Überprüfung übersprungen wird, damit die Ablehnung Ihre Bereitstellungen nicht blockiert.

Weitere Informationen finden Sie unter Workload-Validierung in Gatekeeper.

Nächste Schritte