使用命名空间标签实施 Pod 安全标准

可以为命名空间添加标签以强制执行 Pod 安全标准。三种策略 privilegedbaselinerestricted 广泛涵盖了安全范围,并由 Pod 安全 准入控制器 实施。

准备工作

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

要检查版本,请输入 kubectl version

使用命名空间标签要求 baseline Pod 安全标准

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

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

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

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

在初始评估命名空间的安全配置文件更改时,应用 --dry-run 标志很有帮助。Pod 安全标准检查仍将在*试运行*模式下运行,为您提供有关新策略如何处理现有 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.30。

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