使用命名空间标签强制执行 Pod 安全标准

命名空间可以被标记以强制执行Pod 安全标准。 三个策略特权基线受限广泛涵盖了安全范围,并由Pod 安全准入控制器实现。

开始之前

Pod 安全准入在 Kubernetes v1.23 中默认可用,作为 Beta 版本。从 1.25 版本开始,Pod 安全准入正式可用。

要检查版本,请输入kubectl version

通过命名空间标签要求基线 Pod 安全标准

此清单定义了一个命名空间my-baseline-namespace,它

  • 阻止任何不满足基线策略要求的 Pod。
  • 生成面向用户的警告,并向任何不符合受限策略要求的已创建 Pod 添加审计注释。
  • 基线受限策略的版本固定到 v1.32。
apiVersion: v1
kind: Namespace
metadata:
  name: my-baseline-namespace
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/enforce-version: v1.32

    # We are setting these to our _desired_ `enforce` level.
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/audit-version: v1.32
    pod-security.kubernetes.io/warn: restricted
    pod-security.kubernetes.io/warn-version: v1.32

使用kubectl label向现有命名空间添加标签

最初评估命名空间的安全配置文件更改时,应用--dry-run标志很有帮助。Pod 安全标准检查仍将在dry run模式下运行,为您提供有关新策略将如何处理现有 Pod 的信息,而无需实际更新策略。

kubectl label --dry-run=server --overwrite ns --all \
    pod-security.kubernetes.io/enforce=baseline

应用于所有命名空间

如果您刚开始使用 Pod 安全标准,那么一个合适的初始步骤是为所有命名空间配置更严格级别的审计注释,例如基线

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.32。

kubectl label --overwrite ns my-existing-namespace \
  pod-security.kubernetes.io/enforce=restricted \
  pod-security.kubernetes.io/enforce-version=v1.32
上次修改时间:2022 年 11 月 05 日下午 6:40 PST:更新 PodSecurityPolicy 删除的文档 (bb85d62752)