使用命名空间标签强制执行 Pod 安全标准
命名空间可以被打上标签来强制执行 Pod 安全标准。三个策略:privileged (特权)、baseline (基线) 和 restricted (受限),它们广泛覆盖了安全范围,并由 Pod Security 准入控制器 实现。
开始之前
Pod Security Admission 在 Kubernetes v1.23 中作为 Beta 版本默认可用。从 v1.25 版本开始,Pod Security Admission 已正式发布 (GA)。
要检查版本,输入 kubectl version
。
使用命名空间标签要求执行 baseline
Pod 安全标准
此清单定义了一个 Namespace my-baseline-namespace
,它会:
- 阻止 不满足
baseline
策略要求的任何 Pod。 - 对任何不符合
restricted
策略要求的已创建 Pod,生成一个面向用户的警告并添加审计注解。 - 将
baseline
和restricted
策略的版本固定到 v1.33。
apiVersion: v1
kind: Namespace
metadata:
name: my-baseline-namespace
labels:
pod-security.kubernetes.io/enforce: baseline
pod-security.kubernetes.io/enforce-version: v1.33
# We are setting these to our _desired_ `enforce` level.
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/audit-version: v1.33
pod-security.kubernetes.io/warn: restricted
pod-security.kubernetes.io/warn-version: v1.33
使用 kubectl label
为现有命名空间添加标签
注意
当添加或更改enforce
策略(或版本)标签时,准入插件将针对新策略测试命名空间中的每个 Pod。违规行为将以警告的形式返回给用户。在初步评估命名空间的安全配置文件更改时,应用 --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
,并将 restricted 策略版本固定到 v1.33。
kubectl label --overwrite ns my-existing-namespace \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/enforce-version=v1.33
最后修改于 2022 年 11 月 05 日 下午 6:40 (太平洋标准时间 PST):Update docs for PodSecurityPolicy removal (bb85d62752)