Pod 安全准入

参考官方 Kubernetes 文档:Pod 安全准入

Pod 安全准入(PSA)是一个 Kubernetes 准入控制器,通过将 Pod 规范与预定义标准进行验证,在命名空间级别强制执行安全策略。

目录

安全模式

PSA 定义了三种模式来控制如何处理政策违规:

模式行为使用场景
强制拒绝创建/修改不合规的 Pods。需要严格安全执行的生产环境。
审计允许 Pod 创建,但在审计日志中记录违规。监控和分析安全事件,而不阻止工作负载。
警告允许 Pod 创建,但对违规返回客户端警告。测试环境或政策调整的过渡阶段。

关键说明

  • 强制 仅对 Pods 生效(例如,拒绝 Pods,但允许非 Pod 资源如 Deployments)。
  • 审计警告 同样适用于 Pods 及其控制器(例如,Deployments)。

安全标准

PSA 定义了三种安全标准以限制 Pod 权限:

标准描述关键限制
特权无限制访问。适用于受信任的工作负载(例如,系统组件)。不验证 securityContext 字段。
基础最小限制以防止已知的权限提升。阻止 hostNetworkhostPID、特权容器和不受限制的 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"]