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

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

在您开始之前

Pod 安全准入在 Kubernetes v1.23 中作为 beta 版本默认可用。从 v1.25 版本开始,Pod 安全准入普遍可用。

要检查版本,请输入 kubectl version

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

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

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

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

使用 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.31。

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