Übung: Konfigurieren von Azure Policy für Kubernetes auf einem AKS-Cluster
Azure Policy für Kubernetes unterstützt Organisationen dabei, Governance- und gesetzliche Anforderungen zu erfüllen, bewährte Methoden zu implementieren und organisatorische Konventionen für Cloudumgebungen einzurichten.
Entwicklungsteams in Ihrem Unternehmen nutzen Azure Kubernetes Service (AKS) als Entwicklungsplattform. Sie erkennen, dass Sie die Kosten am besten verwalten können, indem Sie Geschäftsregeln durchsetzen, die Grenzwerte für Workloads und Ressourcen festlegen. Sie möchten sicherstellen, dass Entwickler Workloads nur innerhalb bestimmter CPU- und Speicherzuweisungsgrenzen bereitstellen können. Das System muss das Ausführen von Workloads verhindern, die diese Grenzwerte überschreiten.
In dieser Übung aktivieren Sie Azure Policy für AKS in Ihrem Cluster und fügen die Richtlinie CPU- und Arbeitsspeicherressourcen für Container in einem Kubernetes-Cluster dürfen die angegebenen Limits nicht überschreiten hinzu. Dann testen Sie, ob die Richtlinie die Planung von Workloads verweigert, die die Ressourcenparameter der Richtlinie überschreiten.
Aktivieren der ContainerService- und PolicyInsights-Ressourcenanbieter
Melden Sie sich mit Ihrem Azure-Konto bei Azure Cloud Shell an. Wählen Sie die Bash-Version von Cloud Shell aus.
Azure Policy für AKS erfordert, dass die Clusterversion 1.14 oder höher ist. Führen Sie das folgende Skript zum Überprüfen der AKS-Clusterversion aus:
az aks list
Stellen Sie sicher, dass die gemeldete Clusterversion 1.14 oder höher ist.
Registrieren Sie den Azure Kubernetes Service-Anbieter, indem Sie den Befehl
az provider register
ausführen:az provider register --namespace Microsoft.ContainerService
Registrieren Sie den Azure Policy-Anbieter, indem Sie den Befehl
az provider register
ausführen:az provider register --namespace Microsoft.PolicyInsights
Aktivieren Sie die Add-On-Installation, indem Sie den Befehl
az feature register
ausführen:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Überprüfen Sie, ob die Registrierung erfolgreich war, indem Sie die Featurelistentabelle abfragen. Verwenden Sie den
az feature list
-Befehl, um die Abfrage auszuführen. Die Registrierung der Funktion kann einige Minuten in Anspruch nehmen, so dass Sie das Ergebnis regelmäßig überprüfen müssen.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Wenn für die Cloud Shell-Sitzung ein Timeout auftritt, können Sie den Registrierungsprozess über das Azure-Portal mithilfe des Onboardingvorschaubereichs nachverfolgen.
Führen Sie den
az provider register
-Befehl aus, um das Update zu verteilen, nachdem Sie sichergestellt haben, dass der Abfragebefehl für die Featureliste die Angabe „Registered“ (Registriert) anzeigt:az provider register -n Microsoft.ContainerService
Aktivieren von Azure Policy auf Ihrem Cluster
Führen Sie den
az aks enable-addons
-Befehl aus, um dasazure-policy
-Add-On für Ihren Cluster zu aktivieren:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Vergewissern Sie sich, dass der azure-policy-Pod im
kube-system
-Namespace installiert ist und der gatekeeper-Pod imgatekeeper-system
-Namespace. Führen Sie hierzu die folgendenkubectl get pods
-Befehle aus:kubectl get pods -n kube-system
Ihre Ausgabe sollte in etwa wie folgt aussehen:
NAME READY STATUS RESTARTS AGE azure-policy-78c8d74cd4-7fqn2 1/1 Running 0 12m azure-policy-webhook-545c898766-gsjrc 1/1 Running 0 12m ...
kubectl get pods -n gatekeeper-system
Ihre Ausgabe sollte in etwa wie folgt aussehen:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Stellen Sie abschließend sicher, dass das neueste Add-On installiert ist, indem Sie den
az aks show
-Befehl ausführen. Dieser Befehl ruft die Konfigurationsinformationen für Ihren Cluster ab.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
Ihre Ausgabe sollte in etwa wie folgt aussehen:
{ "config": null, "enabled": true, "identity": null }
Sie können nun zum Azure-Portal wechseln, um die Richtlinie mit dem Namen CPU- und Speicherressourcenlimits des Kubernetes-Clustercontainers sollten die angegebenen Grenzwerte nicht überschreiten zu konfigurieren.
Zuweisen einer integrierten Richtliniendefinition
Sie verwenden den Policy-Dienst im Azure-Portal, um die neue Azure Policy-Instanz zu konfigurieren.
Melden Sie sich beim Azure-Portal an.
Suchen Sie den Dienst Policy im Azure-Portal. Suchen Sie hierfür über die Suchleiste oben im Portal nach Policy, und wählen Sie den Eintrag aus.
Wählen Sie den Dienst Policy in der Liste der Dienste aus, wie hier gezeigt:
Das Policy-Dashboard wird mit einer Übersicht geöffnet, in der alle Ihre zugewiesenen Richtlinien, der Status der Ressourcen und die Auswirkungen von Richtlinien auf diese angezeigt werden. Wenn Sie keine Richtlinien zugewiesen haben, ist das Dashboard leer.
Klicken Sie im linken Menübereich unter Erstellung auf Zuweisungen:
Wie zuvor beschrieben gibt es zwei Möglichkeiten, eine Richtlinienzuweisung zu erstellen: Entweder Sie weisen eine Initiative oder eine Richtlinie zu. Klicken Sie auf der oberen Menüleiste auf Richtlinie zuweisen:
Der Bereich Richtlinie zuweisen wird angezeigt.
Geben Sie zum Erstellen der Richtlinie auf der Registerkarte Grundlagen die folgenden Werte für die einzelnen Einstellungen ein.
Einstellung Wert Bereich `Scope` Klicken Sie auf die Schaltfläche mit den Auslassungspunkten. Der Bereich Bereich wird angezeigt. Wählen Sie unter Abonnement das Abonnement aus, das Ihre Ressourcengruppe enthält. Wählen Sie für Ressourcengruppe die Gruppe rg-akscostsaving und dann die Schaltfläche Auswählen aus. Ausschlüsse Lassen Sie dieses Feld leer. Grundlagen Richtliniendefinition Klicken Sie auf die Schaltfläche mit den Auslassungspunkten. Der Bereich Verfügbare Definitionen wird angezeigt. Filtern Sie die Auswahl im Suchfeld, indem Sie CPU eingeben. Wählen Sie auf der Registerkarte Richtliniendefinitionen die Option CPU- und Arbeitsspeicherressourcen für Container in einem Kubernetes-Cluster dürfen die angegebenen Limits nicht überschreiten und dann Hinzufügen aus. Zuweisungsname Akzeptieren Sie den Standardwert. BESCHREIBUNG Lassen Sie dieses Feld leer. Durchsetzung von Richtlinien Stellen Sie sicher, dass diese Option auf Aktiviert festgelegt ist. Zugewiesen von Akzeptieren Sie den Standardwert. Im Folgenden sehen Sie ein Beispiel für die ausgefüllte Registerkarte Grundeinstellungen:
Klicken Sie auf die Registerkarte Parameter, um die Parameter für die Richtlinie anzugeben.
Legen Sie die folgenden Werte für die einzelnen Parametereinstellungen fest:
Einstellung Wert Maximal zulässige CPU-Einheiten Legen Sie den Wert auf 200m fest. Die Richtlinie gleicht diesen Wert sowohl mit dem Workload-Ressourcenanforderungswert als auch mit dem Workloadgrenzwert in der Workloadmanifestdatei ab. Maximal zulässige Arbeitsspeicherbytes Legen Sie den Wert auf 256Mi fest. Die Richtlinie gleicht diesen Wert sowohl mit dem Workload-Ressourcenanforderungswert als auch mit dem Workloadgrenzwert in der Workloadmanifestdatei ab. Im Folgenden sehen Sie ein Beispiel für die ausgefüllte Registerkarte Parameter:
Klicken Sie auf die Registerkarte Wartung. Auf dieser Registerkarte legen Sie fest, wie sich die neue Richtlinie auf bereits vorhandene Ressourcen auswirkt. Standardmäßig prüft die neue Richtlinie nur neu erstellte Ressourcen. Behalten Sie die Standardkonfiguration bei.
Im Folgenden sehen Sie ein Beispiel für die ausgefüllte Registerkarte Wartung:
Wählen Sie die Registerkarte Überprüfen und erstellen aus. Überprüfen Sie die von Ihnen ausgewählten Werte, und wählen Sie dann Erstellen aus.
Wichtig
Wenn Sie einen vorhandenen AKS-Cluster verwenden, kann die Richtlinienzuweisung etwa 15 Minuten dauern.
Testen von Ressourcenanforderungen
Im letzten Schritt testen Sie nun die neue Richtlinie. Stellen Sie Ihren Test-Workload mit Ressourcenanforderungen und Grenzwerten bereit, die gegen die neue Richtlinie verstoßen. Wenn alles richtig abläuft, gibt der Server einen Fehler zurück, der angibt, dass die Richtlinie dies verweigert.
Öffnen Sie Azure Cloud Shell, und stellen Sie sicher, dass Sie die Bash-Version von Cloud Shell auswählen.
Erstellen Sie mithilfe des integrierten Editors eine Manifestdatei für die Kubernetes-Bereitstellung. Nennen Sie die Datei
test-policy.yaml
:code test-policy.yaml
Tipp
Cloud Shell enthält einen integrierten Datei-Editor. Der Cloud Shell-Editor unterstützt Features wie die Sprachhervorhebung, die Befehlspalette und einen Datei-Explorer. Starten Sie den Editor für die einfache Dateierstellung und -bearbeitung, indem Sie
code .
im Cloud Shell-Terminal ausführen. Mit dieser Aktion wird der Editor mit dem aktiven Arbeitsverzeichnis geöffnet, das im Terminal festgelegt ist. Führen Siecode test-policy.yaml
aus, um Ihre Manifestdatei direkt für die schnelle Bearbeitung zu öffnen. Mit diesem Befehl wird der Editor ohne den Datei-Explorer geöffnet.Fügen Sie den folgenden Text in die Datei ein:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 500m memory: 256Mi limits: cpu: 1000m memory: 500Mi
Drücken Sie STRG+S, um die Datei zu speichern, und anschließend STRG+Q, um den Editor zu schließen.
Führen Sie den Befehl
kubectl apply
aus, um die Konfiguration anzuwenden und die Anwendung imcostsavings
-Namespace bereitzustellen:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Die Ausgabe sollte wie im Folgenden aussehen:
Error from server ( [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>) : error when creating "test-deploy.yml" : admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
Wie Sie sehen, hat der Zulassungswebhook
validation.gatekeeper.sh
die Anforderung zum Planen des Pods abgelehnt.Öffnen Sie die Manifestdatei, und korrigieren Sie die Ressourcenanforderung:
code test-policy.yaml
Ersetzen Sie den Text durch den folgenden Text:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 256Mi limits: cpu: 200m memory: 256Mi
Drücken Sie STRG+S, um die Datei zu speichern, und anschließend STRG+Q, um den Editor zu schließen.
Führen Sie den Befehl
kubectl apply
aus, um die Konfiguration anzuwenden und die Anwendung imcostsavings
-Namespace bereitzustellen:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Sie erhalten die folgende Ausgabe:
pod/nginx created
Rufen Sie die Pods der neu erstellten Pods in Ihrem
costsavings
-Namensraum ab.kubectl get pods --namespace costsavings
Nach wenigen Sekunden gehen die Pods in den Status
Running
über.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Drücken Sie STRG+C, um die Überwachung zu beenden, sobald die Pods ausgeführt werden.