Pod 安全准入

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

Kubernetes 的 Pod 安全标准 定义了 Pod 的不同隔离级别。这些标准使您可以以清晰、一致的方式定义希望如何限制 Pod 的行为。

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

内置 Pod 安全准入强制执行

本页是 Kubernetes v1.31 文档的一部分。如果您运行的是其他版本的 Kubernetes,请参阅该版本的文档。

Pod 安全级别

Pod 安全准入根据 Pod 安全标准 定义的三个级别对 Pod 的 安全上下文 和其他相关字段提出要求:privilegedbaselinerestricted。请参阅 Pod 安全标准 页面以深入了解这些要求。

命名空间的 Pod 安全准入标签

启用该功能或安装 Webhook 后,您可以配置命名空间以定义要用于每个命名空间中 Pod 安全的准入控制模式。Kubernetes 定义了一组 标签,您可以设置它们以定义要为命名空间使用哪个预定义的 Pod 安全标准级别。您选择的标签定义了如果检测到潜在违规,控制平面 将采取的操作

Pod 安全准入模式
模式描述
enforce策略违规会导致 Pod 被拒绝。
audit策略违规将触发向 审计日志 中记录的事件添加审计注释,但除此之外,其他操作都允许。
warn策略违规将触发用户界面警告,但除此之外,其他操作都允许。

命名空间可以配置任何或所有模式,甚至可以为不同的模式设置不同的级别。

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

# 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.31).
#
# 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>

查看 使用命名空间标签强制执行 Pod 安全标准 以查看示例用法。

工作负载资源和 Pod 模板

Pod 通常是通过间接创建来创建的,方法是创建 工作负载对象,例如 部署作业。工作负载对象定义了一个 *Pod 模板*,并且工作负载资源的 控制器 基于该模板创建 Pod。为了帮助尽早发现违规行为,审计和警告模式都将应用于工作负载资源。但是,enforce 模式**不会**应用于工作负载资源,而只应用于生成的 Pod 对象。

豁免

您可以定义对 Pod 安全强制执行的 *豁免*,以允许创建由于与给定命名空间关联的策略而原本会被禁止的 Pod。豁免可以在 准入控制器配置 中进行静态配置。

必须明确枚举豁免。满足豁免条件的请求将被 *忽略* 准入控制器(所有 enforceauditwarn 行为都将被跳过)。豁免维度包括

  • 用户名:来自具有豁免身份验证(或模拟)用户名的用户的请求将被忽略。
  • RuntimeClassNames:指定了豁免运行时类名的 Pod 和 工作负载资源 将被忽略。
  • 命名空间:位于豁免命名空间中的 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:此指标表示阻止正常评估的错误数。非致命错误可能会导致使用最新的受限配置文件进行强制执行。
  • pod_security_evaluations_total:此指标表示已发生的策略评估次数,不包括在导出过程中被忽略或豁免的请求。
  • pod_security_exemptions_total:此指标表示豁免请求的次数,不包括被忽略或超出范围的请求。

下一步

如果您运行的是较旧版本的 Kubernetes,并且想要升级到不包含 PodSecurityPolicies 的 Kubernetes 版本,请阅读 从 PodSecurityPolicy 迁移到内置 Pod 安全准入控制器

上次修改时间:2024 年 3 月 7 日 下午 4:54 PST:AppArmor v1.30 文档更新 (4f11f83a45)