迁移至Pod Security Admission后,如何在Baseline级别下使用hostPath?
在Baseline Pod Security级别下使用hostPath的解决方案
方案1:配置精细的Pod Security豁免
Pod Security Admission支持针对特定控制项的豁免,既能保留Baseline级别的大部分安全规则,又能绕过hostPath的限制。
操作步骤:
针对需要使用hostPath的命名空间,添加豁免标签:
# 给目标命名空间添加Baseline级别强制规则,同时豁免hostPath控制 kubectl label namespace <目标命名空间> \ pod-security.kubernetes.io/enforce=baseline \ pod-security.kubernetes.io/enforce-version=v1.29 \ # 替换为你的K8s对应版本 pod-security.kubernetes.io/exempt-controls=hostPaths
或者通过YAML文件编辑命名空间:
apiVersion: v1 kind: Namespace metadata: name: <目标命名空间> labels: pod-security.kubernetes.io/enforce: baseline pod-security.kubernetes.io/enforce-version: v1.29 pod-security.kubernetes.io/exempt-controls: "hostPaths"
该配置仅豁免hostPath相关限制,Baseline级别的其他安全规则依然生效。
方案2:用自定义准入控制器实现精细化控制
如果需要仅允许特定路径的hostPath,可结合Kyverno或OPA Gatekeeper这类工具,在Baseline基础上添加自定义规则:
以Kyverno为例,创建允许指定hostPath的集群策略:
apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: allow-approved-hostpath spec: validationFailureAction: Audit # 先审计验证,无问题后改为Enforce rules: - name: restrict-to-approved-paths match: any: - resources: kinds: - Pod namespaces: - <目标命名空间> validate: message: "仅允许使用预定义的hostPath路径" pattern: spec: volumes: - name: "*" hostPath: path: "/your/allowed/path" # 替换为允许的hostPath路径 type: DirectoryOrCreate # 可选,指定路径类型
方案3:临时降级到Privileged级别(不推荐)
如果场景对安全限制要求极低,可将目标命名空间的Pod Security级别改为privileged,该级别允许所有权限包括hostPath,但会完全失去Baseline的安全防护:
kubectl label namespace <目标命名空间> pod-security.kubernetes.io/enforce=privileged
注意事项:
- 优先使用方案1的精细豁免,最小化权限放宽范围;
- 豁免仅应用于确实需要hostPath的命名空间,避免全局豁免;
- 确保Kubernetes版本在1.23及以上(Pod Security Admission正式GA版本),不同版本的标签字段可能略有差异。
内容的提问来源于stack exchange,提问作者Jonathan Muralles
相关产品推荐
相关产品推荐

