跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes Pod安全策略
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Kubernetes Pod安全策略 = '''Pod安全策略(Pod Security Policies, PSP)'''是Kubernetes中用于控制Pod创建和运行的安全机制,通过定义一组规则来限制Pod的行为,从而增强集群的安全性。PSP可以防止用户运行特权容器、限制主机命名空间的使用、控制文件系统访问等。在Kubernetes 1.21版本后,PSP已被弃用,并逐步被[[Pod Security Admission]]取代,但在许多现有集群中仍广泛使用。 == 基本概念 == Pod安全策略是一种集群级别的资源,定义了Pod必须满足的条件才能被调度到节点上。管理员可以创建多个PSP,并通过RBAC(基于角色的访问控制)将其分配给不同的用户或服务账户。 === 核心功能 === * '''特权模式限制''':禁止或允许容器以特权模式运行。 * '''主机命名空间隔离''':限制Pod访问主机网络、PID或IPC命名空间。 * '''文件系统限制''':控制卷挂载、只读根文件系统等。 * '''用户和组ID控制''':指定容器运行时的用户和组ID范围。 * '''能力(Capabilities)管理''':限制容器可以使用的Linux内核能力。 == 配置示例 == 以下是一个典型的Pod安全策略定义,限制Pod不能以特权模式运行,并强制使用只读根文件系统: <syntaxhighlight lang="yaml"> apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: restricted-psp spec: privileged: false allowPrivilegeEscalation: false requiredDropCapabilities: - ALL volumes: - 'configMap' - 'emptyDir' - 'secret' hostNetwork: false hostIPC: false hostPID: false runAsUser: rule: 'MustRunAsNonRoot' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'MustRunAs' ranges: - min: 1 max: 65535 fsGroup: rule: 'MustRunAs' ranges: - min: 1 max: 65535 readOnlyRootFilesystem: true </syntaxhighlight> === 策略绑定 === 创建PSP后,需要通过ClusterRole和ClusterRoleBinding将其绑定到用户或组: <syntaxhighlight lang="yaml"> apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: psp-restricted rules: - apiGroups: ['policy'] resources: ['podsecuritypolicies'] verbs: ['use'] resourceNames: - restricted-psp apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: psp-restricted-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: psp-restricted subjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:authenticated </syntaxhighlight> == 实际应用案例 == === 场景:防止特权容器 === 在开发环境中,团队可能无意中部署了需要特权模式的Pod,这会带来安全风险。通过以下PSP可以阻止此类部署: <syntaxhighlight lang="yaml"> apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: no-privilege spec: privileged: false allowPrivilegeEscalation: false </syntaxhighlight> 当用户尝试创建特权Pod时,将收到错误: <syntaxhighlight lang="bash"> Error creating: pods "privileged-pod" is forbidden: unable to validate against any pod security policy: [spec.containers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed] </syntaxhighlight> === 场景:限制主机网络访问 === 以下PSP阻止Pod使用主机网络,防止网络隔离被绕过: <syntaxhighlight lang="yaml"> apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: no-host-network spec: hostNetwork: false hostPorts: - min: 1 max: 65535 </syntaxhighlight> == 迁移到Pod Security Admission == 由于PSP已被弃用,Kubernetes推荐使用Pod Security Admission(PSA)作为替代。PSA通过准入控制器实现,支持三种模式: * '''enforce''':拒绝不符合策略的Pod * '''audit''':允许Pod创建但记录警告 * '''warn''':向用户显示警告但允许创建 示例PSA配置: <syntaxhighlight lang="yaml"> apiVersion: apiserver.config.k8s.io/v1 kind: AdmissionConfiguration plugins: - name: PodSecurity configuration: apiVersion: pod-security.admission.config.k8s.io/v1beta1 kind: PodSecurityConfiguration defaults: enforce: "restricted" enforce-version: "latest" exemptions: usernames: [] runtimeClasses: [] namespaces: ["kube-system"] </syntaxhighlight> == 最佳实践 == 1. 从最严格的策略开始,逐步放宽限制 2. 为不同团队或命名空间分配不同的PSP 3. 定期审计PSP使用情况 4. 计划迁移到Pod Security Admission 5. 结合网络策略(NetworkPolicy)实现深度防御 == 限制与注意事项 == * PSP需要启用PodSecurityPolicy准入控制器 * 策略冲突时,Pod创建会被拒绝 * 某些功能(如特定卷类型)可能需要放宽策略 * PSP不影响已经运行的Pod == 参见 == * [[Kubernetes RBAC]] * [[Kubernetes网络策略]] * [[Pod Security Admission]] 通过合理配置Pod安全策略,可以显著提高Kubernetes集群的安全性,防止容器逃逸、权限提升等攻击。尽管PSP已被弃用,但其设计理念仍值得学习,并应用于新的安全机制中。 [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes安全]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)