本主题介绍了如何配置 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 生成集群清单,然后编辑 Cluster
规范中的 podSecurityStandard
变量值,如更改基于类的现有集群的 PSA 中所述,然后再在步骤 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 文档。