Pod 安全准入

Pod 安全准入控制器概述,该控制器可以强制执行 Pod 安全标准。
功能状态: Kubernetes v1.25 [stable]

Kubernetes Pod 安全标准为 Pod 定义了不同的隔离级别。这些标准允许你清晰、一致地定义要如何限制 Pod 的行为。

Kubernetes 提供了一个内置的 Pod 安全 准入控制器来强制执行 Pod 安全标准。Pod 安全限制在 Pod 创建时应用于 namespace 级别。

内置 Pod 安全准入强制执行

本页面是 Kubernetes v1.33 文档的一部分。如果你运行的是其他版本的 Kubernetes,请查阅相应版本的文档。

Pod 安全级别

Pod 安全准入根据 Pod 安全标准定义的三种级别(privilegedbaselinerestricted)对 Pod 的 安全上下文及其他相关字段提出要求。有关这些要求的深入说明,请参阅 Pod 安全标准页面。

Namespace 的 Pod 安全准入标签

启用该功能或安装 Webhook 后,你可以配置 Namespace 来定义在每个 Namespace 中用于 Pod 安全的准入控制模式。Kubernetes 定义了一组 标签,你可以设置这些标签来定义要用于 Namespace 的预定义 Pod 安全标准级别。你选择的标签定义了 控制平面在检测到潜在违规时所采取的操作。

Pod 安全准入模式
模式描述
强制执行策略违规将导致 Pod 被拒绝。
审计策略违规将触发向 审计日志中记录的事件添加审计注解,但在其他方面是允许的。
警告策略违规将触发面向用户的警告,但在其他方面是允许的。

一个 Namespace 可以配置任何或所有模式,甚至可以为不同的模式设置不同的级别。

对于每种模式,都有两个确定所用策略的标签

# The per-mode level label indicates which policy level to apply for the mode.
#
# MODE must be one of `enforce`, `audit`, or `warn`.
# LEVEL must be one of `privileged`, `baseline`, or `restricted`.
pod-security.kubernetes.io/<MODE>: <LEVEL>

# Optional: per-mode version label that can be used to pin the policy to the
# version that shipped with a given Kubernetes minor version (for example v1.33).
#
# MODE must be one of `enforce`, `audit`, or `warn`.
# VERSION must be a valid Kubernetes minor version, or `latest`.
pod-security.kubernetes.io/<MODE>-version: <VERSION>

查看 使用 Namespace 标签强制执行 Pod 安全标准以查看示例用法。

工作负载资源和 Pod 模板

Pod 通常是间接创建的,通过创建一个工作负载对象,例如 DeploymentJob。工作负载对象定义了一个 Pod 模板,然后工作负载资源的 控制器根据该模板创建 Pod。为了帮助及早发现违规行为,审计和警告模式都会应用于工作负载资源。然而,强制执行模式 会应用于工作负载资源,而只会应用于生成的 Pod 对象。

例外

你可以定义 Pod 安全强制执行的**例外**,以便允许创建原本会被与给定 Namespace 关联的策略禁止的 Pod。例外可以在准入控制器配置中进行静态配置。

例外必须明确列举。符合例外条件的请求会被准入控制器**忽略**(所有 enforceauditwarn 行为都被跳过)。例外维度包括

  • 用户名: 来自具有已认证(或被模拟)例外用户名的用户的请求将被忽略。
  • RuntimeClass 名称: 指定例外 RuntimeClass 名称的 Pod 和 工作负载资源将被忽略。
  • Namespace: 例外 Namespace 中的 Pod 和 工作负载资源将被忽略。

对以下 Pod 字段的更新免除策略检查,这意味着如果 Pod 更新请求只更改这些字段,即使 Pod 违反当前策略级别,也不会被拒绝

  • 任何元数据更新,除了 seccomp 或 AppArmor 注解的更改
    • seccomp.security.alpha.kubernetes.io/pod(已弃用)
    • container.seccomp.security.alpha.kubernetes.io/*(已弃用)
    • container.apparmor.security.beta.kubernetes.io/*(已弃用)
  • .spec.activeDeadlineSeconds 的有效更新
  • .spec.tolerations 的有效更新

指标

以下是 kube-apiserver 暴露的 Prometheus 指标

  • pod_security_errors_total:此指标表示阻止正常评估的错误数量。非致命错误可能导致使用最新的 Restricted 配置来强制执行。
  • pod_security_evaluations_total:此指标表示已发生的策略评估数量,不包括导出期间被忽略或豁免的请求。
  • pod_security_exemptions_total:此指标表示豁免请求的数量,不包括被忽略或超出范围的请求。

下一步

如果你正在运行旧版本的 Kubernetes 并想升级到不包含 PodSecurityPolicy 的 Kubernetes 版本,请阅读从 PodSecurityPolicy 迁移到内置 PodSecurity 准入控制器

最后修改于 2024 年 3 月 7 日下午 4:54 PST:AppArmor v1.30 文档更新 (4f11f83a45)