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

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

准备工作

Pod 安全准入功能从 Kubernetes v1.23 开始默认可用,处于 Beta 阶段。从 v1.25 版本开始,Pod 安全准入功能已正式发布。

要检查版本,请输入 kubectl version

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

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

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

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

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

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