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
Sie müssen das Azure Policy-Add-On für AKS aktivieren. Weitere Informationen finden Sie unter Aktivieren von Azure Policy für Ihren AKS-Cluster.
Um Bereitstellungsvorkehrungen zu konfigurieren, müssen Sie über die Version
2.0.0b1
oder höher deraks-preview
-Erweiterung verfügen. Informationen zum Installieren der Erweiterung finden Sie unter Installieren der Azure CLI-Erweiterung aks-preview. Außerdem wird empfohlen, die Azure CLI zu aktualisieren, um sicherzustellen, dass die neueste Version installiert ist.Um die Konfiguration für Bereitstellungsvorkehrungen zu erstellen und zu ändern, benötigen Sie ein Abonnement mit den folgenden Berechtigungen für Ihren AKS-Cluster:
- Microsoft.Authorization/policyAssignments/write
- Microsoft.Authorization/policyAssignments/read
Sie müssen die Funktionskennzeichnung für Bereitstellungsvorkehrungen registrieren. Informationen zum Registrieren der Funktionskennzeichnung finden Sie unter Registrieren der Funktionskennzeichnung für Bereitstellungsvorkehrungen.
Installieren der CLI-Erweiterung aks-preview
Installieren Sie die CLI-Erweiterung
aks-preview
mit dem Befehlaz extension add
.az extension add --name aks-preview
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
Registrieren Sie das Featureflag
SafeguardsPreview
mithilfe des Befehlsaz feature register
.az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
Es dauert einige Minuten, bis der Status Registered (Registriert) angezeigt wird.
Überprüfen Sie den Registrierungsstatus mithilfe des Befehls
az feature show
.az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
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
- Erfahren Sie mehr über bewährte Methoden für das Ausführen eines AKS-Clusters.
Azure Kubernetes Service