本主題說明如何設定 Pod 安全性許可 (PSA) 控制器以保護由 Tanzu Kubernetes Grid (TKG) 部署的工作負載叢集。
對於執行 Kubernetes v1.23 及更高版本的叢集或叢集中的命名空間,TKG 支援透過 Pod 安全性許可 (PSA) 控制器套用 privileged
、baseline
或 restricted
類型的 Pod 安全原則。
Kubernetes 中的 PSA 控制器可讓您沿著兩個軸設定工作負載安全原則:
privileged
、baseline
和 restricted
,限制從最低到最嚴格。warn
輸出警告,audit
新增稽核記錄項目,enforce
阻止建立 Pod。您可以將 PSA 控制器設為在特定命名空間或叢集範圍內執行。例如,您可以將叢集設為在 baseline
Pod 違反安全原則時觸發稽核記錄,如果 restricted
Pod 違反安全原則,則會封鎖該 Pod。
如需詳細資訊,請參閱 Kubernetes 說明文件中的 Pod 安全標準。
PSA 系統取代在 Kubernetes v1.21 中棄用並在 v1.25 中移除的 Pod 安全原則 (PSP),如 Kubernetes v1.25 版本資訊中所述。
節點的 PSP 在 TKG v2.1 中已棄用,以反映它們在 Kubernetes 中的棄用情況;如需瞭解如何將 Pod 從 PSP 移轉至 PSA 控制器,請參閱從 PodSecurityPolicy 移轉至內建 PodSecurity 許可控制器。
TKG 工作負載叢集的預設 PSA 設定取決於其執行的 Kubernetes 版本:
warn
和 audit
模式:restricted
enforce
模式:無設定warn
和 audit
模式:baseline
enforce
模式:無設定在 TKG 2.3、v2.2 和 v2.1 中執行原生 Kubernetes 版本的叢集的預設 PSA 設定可確保 Pod 在從 PSP 移轉至 PSA 期間繼續執行,即使它們產生有關違反原則的警告也是如此:
從 TKG v2.2 開始,所有內部 TKG 元件都符合 PSA restricted
設定檔。
可以使用叢集範圍的 PSA 設定新叢集或變更現有叢集的 PSA。
如要為新的工作負載叢集設定叢集範圍的 PSA,請將其叢集組態檔中的 POD_SECURITY_STANDARD_DEACTIVATED
設為 false
並設定其他 POD_SECURITY_STANDARD_*
變數,如《組態檔變數參考》中的 Pod 安全標準表格中所述。
POD_SECURITY_STANDARD_DEACTIVATED
POD_SECURITY_STANDARD_AUDIT
POD_SECURITY_STANDARD_WARN
POD_SECURITY_STANDARD_ENFORCE
您還可以依照建立以類別為基礎的叢集中所述的兩步驟程序的步驟 1 產生叢集資訊清單,然後依下方變更以類別為基礎的現有叢集的 PSA 中所述編輯 Cluster
規格中的 podSecurityStandard
變數值,之後再依步驟 2 建立叢集。
如要變更以類別為基礎的現有叢集的 PSA 組態,請執行以下操作:
在編輯器中開啟 Cluster
物件規格:
kubectl edit -namespace NAMESPACE CLUSTER
編輯 spec.topology.variables
之下的 podSecurityStandard
區塊中的值:
- 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]
其中:
DEACTIVATED
為 false
以套用叢集範圍的 PSA,否則為 true
AUDIT-PROFILE
、ENFORCE-PROFILE
和 WARN-PROFILE
是每種模式的 PSA 組態檔,該模式可以是 "privileged"
、"baseline"
或 "restricted"
。預設值為 "privileged"
。VERSION
值是三種模式的 Kubernetes 版本,例如 "v1.26"
。EXEMPT-NS
是以逗號分隔的命名空間清單,以從 PSA 控制項中排除。附註:
kube-system
和tkg-system
的系統命名空間將會始終從 PSA 控制項中排除。
Cluster
物件規格後,應將變更推出到叢集的控制平面節點。如要變更現有舊版叢集的 PSA 組態,請執行以下操作:
從 KubeadmControlPlane
物件擷取目前的 AdmissionConfiguraton
規格檔案,並將之儲存在本機,例如:
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
將 admission-config.yaml
檔案編輯為新組態。例如,以下將 enforce
設為 baseline
並將 audit
和 warn
模式保持為 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"]
編輯 KubeadmControlPlane
物件規格,並將其位於 spec.kubeadmConfigSpec.files
的陣列項目取代為我們的新組態檔。
在套用 KubeadmControlPlane
物件規格後,應將變更推出到叢集的控制平面節點。
新增或變更 PSA 之前,請確保 PSA 的叢集或命名空間中的所有現有工作負載都符合新原則設定,以避免意外停機。
您可以透過執行 kubectl label --overwrite --dry-run=server
來評估在現有命名空間中執行的 Pod 是否符合指定的原則:
kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>
在設定 Pod 安全性許可的 audit
模式時,相同的資訊會寫入稽核記錄,或者在將資源套用於叢集並設定 warn
模式時提供相同的資訊。
有關 Pod 安全的不同組態檔的最新資訊,請參閱 Kubernetes 說明文件。