Kubernetes安全:Pod安全策略PSP配置
理解PSP机制与版本限制
PodSecurityPolicy(PSP)是Kubernetes早期用于在集群层面强制实施Pod安全基线的核心机制。它主要解决的是多租户环境下,普通用户可能创建特权容器、挂载宿主机敏感目录或使用Host网络等高风险行为。与Pod定义中的SecurityContext不同,SecurityContext仅描述单个Pod期望的安全属性,而PSP属于集群级准入控制插件,在Pod创建请求到达API Server时进行拦截与校验。PSP的生效依赖于RBAC授权:只有当创建Pod的用户或ServiceAccount被显式授予了use特定PSP的权限时,该策略才会被应用。需要特别强调的是,由于PSP设计复杂且难以维护,Kubernetes官方已在1.21版本将其标记为弃用,并在1.25版本彻底移除。对于运行在1.25及以上版本的集群,继续配置PSP将直接导致API Server启动失败或策略无效。现代Kubernetes环境应全面转向Pod Security Admission(PSA)控制器或OPA Gatekeeper等第三方方案,以实现更简洁、声明式的安全管控。

配置一个典型PSP安全策略
在仍支持PSP的旧版Kubernetes集群(如1.20及以下)中,定义一个典型的安全策略需通过YAML清单明确各项约束。核心字段包括:设置privileged: false以禁止容器获取宿主机root权限;通过runAsUser规则限制为MustRunAsNonRoot,强制容器以非特权用户身份运行;在volumes白名单中仅允许configMap、secret和emptyDir,阻断对宿主机路径的挂载;同时将hostNetwork与hostPID显式设为false,防止网络与进程空间逃逸。此外,PSP本身不会自动生效,必须配合RBAC进行授权。管理员需创建ClusterRole,在rules中指定apiGroups: ["policy"]、resources: ["podsecuritypolicies"]及verbs: ["use"],随后通过ClusterRoleBinding将该角色绑定至目标Namespace的ServiceAccount或用户组。只有完成这一授权链路,对应身份创建的Pod才会被准入控制器匹配并应用该PSP约束。
部署后验证策略是否生效
策略部署完成后,必须通过实际Pod创建请求验证其拦截效果。首先,准备一个符合策略的Pod清单,例如指定非root用户ID、不请求特权模式且仅使用合法卷类型,执行kubectl apply -f compliant-pod.yaml,预期应返回pod/compliant-pod created。随后,构造一个违反策略的测试Pod,如在容器中声明privileged: true或尝试挂载/etc目录,执行创建命令后,API Server将直接拒绝请求并返回明确的准入错误,例如Error from server (Forbidden): pods "test-pod" is forbidden: unable to validate against any pod security policy。若Pod成功创建,可通过kubectl get pod <name> -o yaml检查其实际生效的securityContext,确认字段已被PSP强制覆盖。排查时,若策略未生效,需依次检查:PSP资源是否处于Ready状态、创建者是否具备对应PSP的use权限、以及集群--enable-admission-plugins参数是否包含PodSecurityPolicy。
PSP配置常见坑与迁移到PSA
在实际运维中,PSP常因授权模型复杂而引发“策略未生效”或“误拦截”问题。典型误区包括:未正确绑定ServiceAccount导致Pod匹配到默认宽松策略;或误以为PSP会修改Pod原始清单,实际上它仅在准入阶段校验,部分字段需配合Default机制才能自动注入。鉴于PSP已在1.25版本彻底废弃,新版本集群绝对不应再尝试配置。迁移至Pod Security Admission(PSA)是官方推荐路径。PSA通过为Namespace添加pod-security.kubernetes.io/enforce等标签实现管控,无需编写复杂的RBAC规则。PSA内置三个安全级别:Privileged(无限制)、Baseline(阻断已知高危配置)与Restricted(遵循Pod安全最佳实践)。每个级别可配置warn(仅警告)、audit(记录审计日志)或enforce(强制拒绝)三种模式。建议迁移时先在目标Namespace设置enforce: baseline与audit: restricted,观察业务兼容性后再逐步收紧至enforce: restricted,从而实现平滑过渡。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









