Pod 安全准入
Kubernetes v1.25 [稳定]
Kubernetes Pod 安全标准为 Pod 定义了不同的隔离级别。这些标准让你以清晰、一致的方式定义如何限制 Pod 的行为。
Kubernetes 提供了一个内置的Pod 安全 准入控制器 来强制执行 Pod 安全标准。当创建 Pod 时,Pod 安全限制应用于命名空间级别。
内置的 Pod 安全准入强制执行
本页是 Kubernetes v1.32 的文档的一部分。如果你正在运行不同版本的 Kubernetes,请查阅该版本的文档。
Pod 安全级别
Pod 安全准入根据 Pod 安全标准 定义的三个级别:privileged
、baseline
和 restricted
,对 Pod 的 安全上下文 和其他相关字段施加要求。有关这些要求的深入了解,请参阅 Pod 安全标准页面。
命名空间的 Pod 安全准入标签
一旦启用该特性或安装了 webhook,你可以配置命名空间,以定义要在每个命名空间中用于 Pod 安全的准入控制模式。Kubernetes 定义了一组你可以设置的 标签,以定义要用于命名空间的预定义 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.32).
#
# 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 通常是通过创建 工作负载对象 间接创建的,例如 Deployment 或 Job。工作负载对象定义一个 Pod 模板,并且工作负载资源的控制器根据该模板创建 Pod。为了帮助及早发现违规行为,审计和警告模式都应用于工作负载资源。但是,强制模式不应用于工作负载资源,仅应用于生成的 Pod 对象。
豁免
你可以定义 Pod 安全强制执行的豁免,以便允许创建由于与给定命名空间关联的策略而本应被禁止的 Pod。可以在准入控制器配置中静态配置豁免。
必须显式枚举豁免。满足豁免标准的请求将被准入控制器忽略(所有 enforce
、audit
和 warn
行为都被跳过)。豁免维度包括
- 用户名:来自具有豁免身份验证(或模拟)用户名的用户的请求将被忽略。
- RuntimeClassNames:指定了豁免运行时类名称的 Pod 和工作负载资源将被忽略。
- 命名空间:豁免命名空间中的 Pod 和 工作负载资源将被忽略。
注意
大多数 Pod 是由控制器响应工作负载资源创建的,这意味着豁免最终用户仅在直接创建 Pod 时豁免他们强制执行,而不是在创建工作负载资源时。控制器服务账户(例如system:serviceaccount:kube-system:replicaset-controller
)通常不应被豁免,因为这样做会隐式地豁免任何可以创建相应工作负载资源的用户。以下 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 迁移到内置 PodSecurity 准入控制器。