Richtlinieneinschränkungen im Hinblick auf Kosten und Zuverlässigkeit verwenden
Policy Controller enthält eine Standardbibliothek mit Einschränkungsvorlagen, die mit dem Cost and Reliability Policy Bundle verwendet werden können. Damit lassen sich Best Practices zum Ausführen kosteneffizienter GKE-Cluster anwenden, ohne die Leistung oder Zuverlässigkeit ihrer Arbeitslasten zu beeinträchtigen.
Einschränkungen für Richtlinienpakete zu Kosten und Zuverlässigkeit
Name der Einschränkung | Beschreibung der Einschränkung |
---|---|
cost-reliability-v2023-pod-disruption-budget | Erfordert die PodDisruptionBudget-Konfiguration für Deployments, ReplikatSets, StatefulSets und ReplicationControllers. |
cost-reliability-v2023-pod-resources-best-practices | Erfordert, dass Container Ressourcenanfragen festlegen und den Best Practices folgen. |
cost-reliability-v2023-required-labels | Erfordert, dass alle Pods und Controller (ReplikatSet, Deployment, StatefulSet und DaemonSet) die erforderlichen Labels haben: Umgebung, Team und Anwendung. |
cost-reliability-v2023-restrict-repos | Beschränkt Container-Images auf eine Liste der zulässigen Repositories, damit sie mit Artifact Registry das Image-Streaming nutzen können. |
cost-reliability-v2023-spotvm-termination-grace | Erfordert „terminationGracePeriodSeconds“ von 15 s oder weniger für Pods und Pod-Vorlagen mit einem nodeSelector oder nodeAfffinty für gke-spot. |
Hinweise
- Installieren und initialisieren Sie die Google Cloud CLI, die die in dieser Anleitung verwendeten Befehle
gcloud
undkubectl
enthält. Wenn Sie Cloud Shell verwenden, ist die Google Cloud CLI vorinstalliert. - Installieren Sie Policy Controller Version 1.15.3 oder höher mit der Standardbibliothek der Einschränkungsvorlagen in Ihrem Cluster. Außerdem müssen Sie die Unterstützung für referenzielle Einschränkungen aktivieren, da dieses Bundle referenzielle Einschränkungen enthält.
Policy Controller für referenzielle Einschränkungen konfigurieren
Speichern Sie das folgende YAML-Manifest in einer Datei als
policycontroller-config.yaml
. Das Manifest konfiguriert Policy Controller so, dass bestimmte Arten von Objekten beobachtet werden.apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Service" - group: "policy" version: "v1" kind: "PodDisruptionBudget"
Wenden Sie das
policycontroller-config.yaml
-Manifest an:kubectl apply -f policycontroller-config.yaml
Cluster und Arbeitslast konfigurieren
- Jede von einem
service
ausgewähltepod
muss Bereitschaftsprüfungen enthalten. - Alle
deployment
,replicaset
,statefulset
undreplicationcontroller
müssen einepoddisruptionbudget
enthalten. - Alle Container sollten Anfragen vom Typ
cpu
undmemory
enthalten. Dabei sollte dasmemory
-Limit dem Limitmemory
entsprechen, das den Best Practices entspricht. - Fügen Sie allen Pods und Pod-Vorlagen die Labels
environment
,team
undapp
hinzu. - Hosten Sie Container-Images mithilfe von Artifact Registry in derselben Region wie den Cluster, um das Image-Streaming zu aktivieren.
Lassen Sie die relevante Artifact Registry zu. Folgen Sie dazu dem Beispiel in
cost-reliability-v2023-restrict-repos
. - Alle Pods und Pod-Vorlagen, die
gke-spot
verwenden, müssen einenterminationGracePeriodSeconds
von 15 Sekunden oder weniger enthalten.
Richtlinien-Bundle „Audit-Kosten und Zuverlässigkeit“
Mit Policy Controller können Sie Richtlinien für Ihren Kubernetes-Cluster erzwingen. Sie können diese Einschränkungen im „Audit“-Modus bereitstellen, um Ihre Arbeitslasten und deren Einhaltung im Hinblick auf die Kosten- und Zuverlässigkeitsrichtlinien zu testen, die in der vorherigen Tabelle aufgeführt sind. Damit können Sie Verstöße aufdecken und vor allem Ihnen selbst die Möglichkeit geben, diese zu beheben, bevor Sie sie für Ihren Kubernetes-Cluster erzwingen.
Sie können diese Richtlinien anwenden, wenn spec.enforcementAction
mit kubectl, kpt oder Config Sync auf dryrun
festgelegt ist.
kubectl
(Optional) Sehen Sie sich eine Vorschau der Richtlinieneinschränkungen mit kubectl an:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
Wenden Sie die Richtlinieneinschränkungen mit kubectl an:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
Die Ausgabe sieht so aus:
gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace created k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos created k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget created k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices created k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels created
Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
Die Ausgabe sieht in etwa so aus:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels dryrun 0
KPT
Installieren und richten Sie kpt ein.
kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
Laden Sie das PCI-DSS v3.2.1-Richtlinien-Bundle mithilfe von kpt von GitHub herunter:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Initialisieren Sie das Arbeitsverzeichnis mit kpt, wodurch eine Ressource erstellt wird, um Änderungen verfolgen zu können:
cd cost-reliability-v2023 kpt live init
Wenden Sie die Richtlinieneinschränkungen mit kpt an:
kpt live apply
Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:
kpt live status --output table --poll-until current
Der Status
CURRENT
bestätigt die erfolgreiche Installation der Einschränkungen.
Config Sync
Installieren und richten Sie kpt ein.
kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
So erstellen oder hängen Sie
.gitignore
mitresourcegroup.yaml
an:echo resourcegroup.yaml >> .gitignore
Erstellen Sie ein dediziertes
policies
-Verzeichnis:mkdir -p policies
Laden Sie das Richtlinien-Bundle für Kosten und Zuverlässigkeit von GitHub mithilfe von kpt herunter:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023 policies/cost-reliability-v2023
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Optional) Sehen Sie sich eine Vorschau der zu erstellenden Richtlinieneinschränkungen an:
kpt live init policies/cost-reliability-v2023 kpt live apply --dry-run policies/cost-reliability-v2023
Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie
policies/cost-reliability-v2023
dem Stammverzeichniskustomization.yaml
hinzu. Andernfalls entfernen Sie die Dateipolicies/cost-reliability-v2023/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/cost-reliability-v2023/kustomization.yaml
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy audit enforcement' git push
Prüfen Sie den Status der Installation:
watch gcloud beta container fleet config-management status --project PROJECT_ID
Der Status
SYNCED
bestätigt die Installation der Richtlinien.
Richtlinienverstöße ansehen
Nachdem die Richtlinieneinschränkungen im Prüfmodus installiert wurden, können Verstöße im Cluster über das Policy Controller-Dashboard in der UI angezeigt werden.
Sie können auch kubectl
verwenden, um mit dem folgenden Befehl Verstöße im Cluster anzusehen:
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Wenn Verstöße vorliegen, kann eine Liste der Verstoßmeldungen pro Einschränkung mit folgenden Methoden angezeigt werden:
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Maßnahmen zur Durchsetzung des Richtlinien-Bundles für Kosten und Zuverlässigkeit ändern
Nachdem Sie die Richtlinienverstöße in Ihrem Cluster geprüft haben, können Sie den Erzwingungsmodus so ändern, dass der Admission-Controller entweder warn
auf den Cluster ausführt oder sogar deny
die Anwendung nicht konformer Ressourcen auf den Cluster blockiert.
kubectl
Legen Sie mit kubectl die Erzwingungsaktion der Richtlinien auf
warn
fest:kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
Prüfen Sie, ob die Maßnahme zur Durchsetzung von Richtlinieneinschränkungen aktualisiert wurde:
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
KPT
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Wenden Sie die Richtlinieneinschränkungen an:
kpt live apply
Config Sync
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy bundle warn enforcement' git push
Prüfen Sie den Status der Installation:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Wenn das Repository in der Spalte
SYNCED
angezeigt wird, wird die Installation der Richtlinien bestätigt.
Richtlinienerzwingung testen
Erstellen Sie mit dem folgenden Befehl eine nicht konforme Ressource im Cluster:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
hostPort: 80
name: wordpress
EOF
Der Admission-Controller sollte eine Warnung ausgeben, in der die Richtlinienverstöße aufgelistet sind, gegen die diese Ressource verstößt, wie im folgenden Beispiel gezeigt:
Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <cpu> request. Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <memory> request. Warning: [cost-reliability-v2023-required-labels] This app is missing one or more required labels: `environment`, `team`, and `app`. Warning: [cost-reliability-v2023-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"] pod/wp-non-compliant created
Richtlinien-Bundle „Kosten und Zuverlässigkeit“ entfernen
Bei Bedarf kann das Richtlinien-Bundle „Kosten und Zuverlässigkeit“ aus dem Cluster entfernt werden.
kubectl
Verwenden Sie kubectl, um die Richtlinien zu entfernen:
kubectl delete constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023
KPT
Entfernen Sie die Richtlinien:
kpt live destroy
Config Sync
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
git rm -r SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Removing Cost and Reliability policies' git push
Prüfen Sie den Status:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Das Repository, das in der Spalte
SYNCED
angezeigt wird, bestätigt das Entfernen der Richtlinien.