In diesem Thema wird erläutert, wie Sie PSA-Controller (Pod Security Admission) konfigurieren, um von Tanzu Kubernetes Grid (TKG) bereitgestellte Arbeitslastcluster zu schützen.
Für Cluster oder Namespaces innerhalb von Clustern, auf denen Kubernetes v1.23 (oder höher) ausgeführt wird, unterstützt TKG die Anwendung von Pod-Sicherheitsrichtlinien vom Typ privileged
, baseline
oder restricted
über den PSA-Controller (Pod Security Admission).
In Kubernetes können Sie mit PSA-Controllern Arbeitslastsicherheitsrichtlinien in zwei Bereichen konfigurieren:
privileged
, baseline
und restricted
, von der niedrigsten bis zur restriktivsten.warn
gibt eine Warnung aus, audit
fügt einen Überwachungsprotokolleintrag hinzu, und enforce
blockiert die Erstellung des Pods.Sie können PSA-Controller für die Ausführung in bestimmten Namespaces oder für die clusterweite Ausführung konfigurieren. Beispielsweise können Sie einen Cluster so konfigurieren, dass ein Überwachungsprotokoll ausgelöst wird, wenn ein baseline
-Pod gegen eine Sicherheitsrichtlinie verstößt, und dass ein restricted
-Pod blockiert wird, wenn er gegen die Richtlinie verstößt.
Weitere Informationen finden Sie unter Pod-Sicherheitsstandards in der Kubernetes-Dokumentation.
Das PSA-System ersetzt Pod-Sicherheitsrichtlinien (Pod Security Policies, PSPs), die in Kubernetes v1.21 als veraltet eingestuft und in v1.25 entfernt wurden, wie in den Versionshinweisen zu Kubernetes v1.25 beschrieben.
PSPs für Knoten wurden in TKG v2.1 als veraltet eingestuft, um deren Veraltung in Kubernetes widerzuspiegeln. Informationen zum Migrieren von Pods von PSPs zum PSA-Controller finden Sie unter Migrate from PodSecurityPolicy to the Built-In PodSecurity Admission Controller.
Die PSA-Standardeinstellungen für TKG-Arbeitslastcluster hängen von der ausgeführten Kubernetes-Version ab:
warn
und Modus audit
: restricted
enforce
: keine Einstellungwarn
und Modus audit
: baseline
enforce
: keine EinstellungDie PSA-Standardeinstellungen für Cluster unter den nativen Kubernetes-Versionen in TKG 2.4, v2.3, v2.2 und v2.1 stellen sicher, dass Pods während der Migration von PSPs zu PSA weiterhin ausgeführt werden, auch wenn Warnungen über Richtlinienverstöße generiert werden:
Ab TKG v2.2 entsprechen alle internen TKG-Komponenten dem PSA-Profil restricted
.
Sie können einen neuen Cluster mit clusterweiter PSA-Funktion konfigurieren oder die PSA-Konfiguration eines vorhandenen Clusters ändern.
Wenn Sie eine clusterweite PSA-Funktion für einen neuen Arbeitslastcluster konfigurieren möchten, legen Sie POD_SECURITY_STANDARD_DEACTIVATED
in der zugehörigen Clusterkonfigurationsdatei auf false
fest und legen Sie die Werte für die anderen POD_SECURITY_STANDARD_*
-Variablen so fest, wie in der Tabelle Pod-Sicherheitsstandards in der Variablenreferenz für Konfigurationsdatei beschrieben.
POD_SECURITY_STANDARD_DEACTIVATED
POD_SECURITY_STANDARD_AUDIT
POD_SECURITY_STANDARD_WARN
POD_SECURITY_STANDARD_ENFORCE
Sie können das Clustermanifest auch als Schritt 1 des unter Erstellen eines klassenbasierten Clusters beschriebenen zweistufigen Prozesses generieren und dann die podSecurityStandard
-Variablenwerte in der Cluster
-Spezifikation bearbeiten (wie unten im Abschnitt Ändern der PSA-Konfiguration für einen vorhandenen klassenbasierten Cluster beschrieben), bevor Sie den Cluster in Schritt 2 erstellen.
So ändern Sie die PSA-Konfiguration für einen vorhandenen klassenbasierten Cluster:
Öffnen Sie die Cluster
-Objektspezifikation in einem Editor:
kubectl edit -namespace NAMESPACE CLUSTER
Bearbeiten Sie die Werte im Block podSecurityStandard
unter spec.topology.variables
:
- name: podSecurityStandard
value:
deactivated: DEACTIVATED
audit: AUDIT-PROFILE
enforce: ENFORCE-PROFILE
warn: WARN-PROFILE
auditVersion: AUDIT-VERSION
enforceVersion: ENFORCE-VERSION
warnVersion: WARN-VERSION
exemptions:
namespaces: [EXEMPT-NS]
Dabei gilt:
DEACTIVATED
ist false
, wenn eine clusterweite PSA angewendet werden soll, andernfalls true
AUDIT-PROFILE
, ENFORCE-PROFILE
und WARN-PROFILE
sind die PSA-Profile für jeden Modus. Mögliche Werte sind "privileged"
, "baseline"
und "restricted"
. Der Standardwert lautet "privileged"
.VERSION
-Werten handelt es sich um die Kubernetes-Version für die drei Modi, z. B. "v1.26"
.EXEMPT-NS
ist eine kommagetrennte Liste von Namespaces, die von der PSA-Steuerung ausgeschlossen werden sollen.Hinweis: Die System-Namespaces
kube-system
undtkg-system
werden immer von der PSA-Steuerung ausgeschlossen.
Cluster
-Objektspezifikation angewendet haben, sollten die Änderungen auf die Steuerungsebenenknoten des Clusters übertragen werden.So ändern Sie die PSA-Konfiguration für einen vorhandenen Legacy-Cluster:
Rufen Sie die aktuelle AdmissionConfiguraton
-Spezifikationsdatei aus dem KubeadmControlPlane
-Objekt ab und speichern Sie die Datei lokal. Beispiel:
kubectl get kcp my-cluster-control-plane --template='{{ range $v := .spec.kubeadmConfigSpec.files }}{{ if eq $v.path "/etc/kubernetes/admission-control-config.yaml" }}{{ $v.content }}{{ end }}{{ end }}' > admission-config.yaml
Bearbeiten Sie die Datei admission-config.yaml
entsprechend der neuen Konfiguration. In der folgenden Konfiguration wird beispielsweise enforce
auf baseline
festgelegt. Für die Modi audit
und warn
gilt weiterhin der Wert restricted
:
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "baseline"
enforce-version: "v1.24"
audit: "restricted"
audit-version: "v1.24"
warn: "restricted"
warn-version: "v1.24"
exemptions:
usernames: []
runtimeClasses: []
namespaces: ["kube-system", "tkg-system"]
Bearbeiten Sie die KubeadmControlPlane
-Objektspezifikation und ersetzen Sie den zugehörigen Array-Eintrag unter spec.kubeadmConfigSpec.files
durch die neue Konfigurationsdatei.
Nachdem Sie die KubeadmControlPlane
-Objektspezifikation angewendet haben, sollten die Änderungen auf die Steuerungsebenenknoten des Clusters übertragen werden.
Sorgen Sie vor dem Hinzufügen oder Ändern einer PSA-Konfiguration dafür, dass keine unerwarteten Ausfallzeiten entstehen, indem Sie sicherstellen, dass alle vorhandenen Arbeitslasten im Cluster oder Namespace der PSA den neuen Richtlinieneinstellungen entsprechen.
Sie können prüfen, ob Pods, die in einem vorhandenen Namespace ausgeführt werden, eine bestimmte Richtlinie erfüllen, indem Sie den Befehl kubectl label --overwrite --dry-run=server
ausführen:
kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>
Dieselben Informationen werden beim Konfigurieren des Modus audit
der PSA in die Überwachungsprotokolle geschrieben oder beim Anwenden von Ressourcen auf einen Cluster und beim Konfigurieren des Modus warn
bereitgestellt.
Aktuelle Informationen zu den verschiedenen Profilen für die Pod-Sicherheit finden Sie in der Kubernetes-Dokumentation.