这篇文章已超过一年。较旧的文章可能包含过时内容。请检查页面信息自发布以来是否已失效。

Kubernetes v1.25: Pod 安全准入控制器进入稳定版

Kubernetes v1.25 的发布标志着 Kubernetes 开箱即用的 Pod 安全控制达到一个重要的里程碑:Pod Security Admission (PSA) 已升至稳定版,而 Pod Security Policy (PSP) 已被移除。PSP 在 Kubernetes v1.21 中被弃用,在 Kubernetes v1.25 及更高版本中不再起作用。

Pod Security admission controller 取代了 PodSecurityPolicy,通过简单地为命名空间添加标签,可以更容易地强制执行预定义的Pod 安全标准。Pod 安全标准由 K8s 社区维护,这意味着每当引入新的影响安全的 Kubernetes 功能时,您都会自动获得更新的安全策略。

自 Beta 版本以来有哪些新变化?

Pod Security Admission 自 Kubernetes v1.23 的 Beta 版本以来变化不大。重点一直在改进用户体验,同时继续保持高品质标准。

改进的违规消息

我们改进了违规消息,以便您获得更少的重复消息。例如,当 Baseline 和 Restricted 策略检查同一能力时,您不会再收到以下消息

pods "admin-pod" is forbidden: violates PodSecurity "restricted:latest": non-default capabilities (container "admin" must not include "SYS_ADMIN" in securityContext.capabilities.add), unrestricted capabilities (container "admin" must not include "SYS_ADMIN" in securityContext.capabilities.add)

您会收到此消息

pods "admin-pod" is forbidden: violates PodSecurity "restricted:latest": unrestricted capabilities (container "admin" must not include "SYS_ADMIN" in securityContext.capabilities.add)

改进的命名空间警告

当您修改命名空间上的 enforce Pod Security 标签时,Pod Security admission controller 会检查所有现有 Pod 是否违规,并在发现不合规时发出警告。现在,对于具有相同违规的 Pod,这些警告已进行聚合,这使得包含许多副本的大型命名空间更容易管理。例如

Warning: frontend-h23gf2: allowPrivilegeEscalation != false
Warning: myjob-g342hj (and 6 other pods): host namespaces, allowPrivilegeEscalation != false Warning: backend-j23h42 (and 1 other pod): non-default capabilities, unrestricted capabilities

此外,当您为已配置为豁免的命名空间应用非特权标签时,您现在会收到一个警告,提醒您这一事实

Warning: namespace 'kube-system' is exempt from Pod Security, and the policy (enforce=baseline:latest) will be ignored

Pod 安全标准的变更

Pod Security admission 所强制执行的Pod 安全标准已更新,支持新的 Pod OS 字段。在 v1.25 及更高版本中,如果您使用 Restricted 策略,当您明确将 Pod 的 .spec.os.name 字段设置为 windows 时,将不再需要以下 Linux 特定限制:

  • Seccomp - Pod 和容器安全上下文的 seccompProfile.type 字段
  • 特权升级 - 容器安全上下文的 allowPrivilegeEscalation 字段
  • Capabilities - 要求在容器的 capabilities 字段中丢弃所有 (ALL) capabilities

在 Kubernetes v1.23 及更早版本中,kubelet 不会强制执行 Pod OS 字段。如果您的集群包含运行 v1.23 或更早版本 kubelet 的节点,您应明确将Restricted 策略固定到 v1.25 之前的版本。

从 PodSecurityPolicy 迁移到 Pod Security admission controller

有关从 PodSecurityPolicy 迁移到 Pod Security admission controller 的说明以及选择迁移策略的帮助,请参阅迁移指南。我们还在开发一个名为 pspmigrator 的工具来自动化部分迁移过程。

我们将在即将到来的 KubeCon 2022 北美会议演讲 从 Pod Security Policy 迁移中更详细地讨论 PSP 迁移。使用KubeCon 北美日程表了解更多信息。