Pod 安全准入
参考官方 Kubernetes 文档:Pod 安全准入
Pod 安全准入(PSA)是一个 Kubernetes 准入控制器,通过将 Pod 规范与预定义标准进行验证,在命名空间级别强制执行安全策略。
目录
安全模式
PSA 定义了三种模式来控制如何处理政策违规:
模式 | 行为 | 使用场景 |
---|
强制 | 拒绝创建/修改不合规的 Pods。 | 需要严格安全执行的生产环境。 |
审计 | 允许 Pod 创建,但在审计日志中记录违规。 | 监控和分析安全事件,而不阻止工作负载。 |
警告 | 允许 Pod 创建,但对违规返回客户端警告。 | 测试环境或政策调整的过渡阶段。 |
关键说明:
- 强制 仅对 Pods 生效(例如,拒绝 Pods,但允许非 Pod 资源如 Deployments)。
- 审计 和 警告 同样适用于 Pods 及其控制器(例如,Deployments)。
安全标准
PSA 定义了三种安全标准以限制 Pod 权限:
标准 | 描述 | 关键限制 |
---|
特权 | 无限制访问。适用于受信任的工作负载(例如,系统组件)。 | 不验证 securityContext 字段。 |
基础 | 最小限制以防止已知的权限提升。 | 阻止 hostNetwork 、hostPID 、特权容器和不受限制的 hostPath 卷。 |
受限 | 最严格的政策,强制执行安全最佳实践。 | 要求: - runAsNonRoot: true - seccompProfile.type: RuntimeDefault - 删除 Linux 能力。 |
配置
命名空间标签
为命名空间应用标签以定义 PSA 策略。
YAML 文件示例
apiVersion: v1
kind: Namespace
metadata:
name: example-namespace
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: baseline
pod-security.kubernetes.io/warn: baseline
CLI 命令
# 步骤 1:更新 Pod 准入标签
kubectl label namespace <namespace-name> \
pod-security.kubernetes.io/enforce=baseline \
pod-security.kubernetes.io/audit=restricted \
--overwrite
# 步骤 2:验证标签
kubectl get namespace <namespace-name> --show-labels
例外
将特定用户、命名空间或运行时类排除在 PSA 检查之外。
示例配置:
apiVersion: pod-security.admission.config.k8s.io/v1
kind: PodSecurityConfiguration
exemptions:
usernames: ["admin"]
runtimeClasses: ["nvidia"]
namespaces: ["kube-system"]