Pod 安全准入

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

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

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

内置 Pod 安全准入强制执行

此页面是 Kubernetes v1.35 文档的一部分。如果您正在运行不同版本的 Kubernetes,请参阅该版本的文档。

Pod 安全级别

Pod 安全准入根据 Pod 安全标准定义的三个级别:privilegedbaselinerestricted,对 Pod 的 安全上下文和其他相关字段施加要求。请参阅 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.35).
#
# 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 通常是通过创建 工作负载对象(例如 DeploymentJob)间接创建的。工作负载对象定义了一个 Pod 模板,而工作负载资源的 控制器会根据该模板创建 Pod。为了帮助及早发现违规行为,审核和警告模式都应用于工作负载资源。但是,强制模式应用于工作负载资源,而仅应用于生成的 Pod 对象。

豁免

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

豁免必须显式列举。满足豁免标准的请求将被 控制平面忽略(所有 enforceauditwarn 行为将被跳过)。豁免维度包括:

  • 用户名:来自具有豁免身份验证(或模拟)用户名的用户的请求将被忽略。
  • RuntimeClassNames:指定豁免 runtime class name 的 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)