可以为命名空间打上标签以强制执行 Pod 安全标准。三种策略——特权(privileged)、基准(baseline)和受限(restricted)——广泛覆盖了安全领域,并由 Pod 安全 准入控制器实现。
Pod 安全准入(Pod Security Admission)在 Kubernetes v1.23 中作为测试版默认提供。从 1.25 版本开始,Pod 安全准入正式可用(GA)。
要检查版本,请输入 kubectl version。
baseline Pod 安全标准此清单定义了一个命名空间 my-baseline-namespace,它:
baseline 策略要求的 Pod。restricted 策略要求的已创建 Pod 生成用户可见的警告,并添加审计注解。baseline 和 restricted 策略的版本固定为 v1.36。apiVersion: v1
kind: Namespace
metadata:
name: my-baseline-namespace
labels:
pod-security.kubernetes.io/enforce: baseline
pod-security.kubernetes.io/enforce-version: v1.36
# We are setting these to our _desired_ `enforce` level.
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/audit-version: v1.36
pod-security.kubernetes.io/warn: restricted
pod-security.kubernetes.io/warn-version: v1.36
kubectl label 为现有命名空间添加标签enforce 策略(或版本)标签时,准入插件将根据新策略测试命名空间中的每个 Pod。违规情况将以警告的形式返回给用户。在初步评估命名空间的安全配置更改时,使用 --dry-run 标志很有帮助。Pod 安全标准检查仍将以 试运行(dry run) 模式运行,为您提供关于新策略将如何对待现有 Pod 的信息,而不会实际更新策略。
kubectl label --dry-run=server --overwrite ns --all \
pod-security.kubernetes.io/enforce=baseline
如果您刚刚开始使用 Pod 安全标准,一个合适的初步步骤是为所有命名空间配置带有审计注解的策略,例如 baseline
kubectl label --overwrite ns --all \
pod-security.kubernetes.io/audit=baseline \
pod-security.kubernetes.io/warn=baseline
请注意,这不会设置强制执行级别,以便可以区分尚未明确评估的命名空间。您可以使用此命令列出没有明确设置强制执行级别的命名空间
kubectl get namespaces --selector='!pod-security.kubernetes.io/enforce'
您也可以更新特定的命名空间。此命令将 enforce=restricted 策略添加到 my-existing-namespace,并将受限策略的版本固定为 v1.36。
kubectl label --overwrite ns my-existing-namespace \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/enforce-version=v1.36