主管 上的 TKG 使用 Pod 安全策略准入控制器来支持 Pod 安全,默认情况下,已为使用 TKR v1.24 及更低版本的 Tanzu Kubernetes 集群启用该控制器。
必备条件:TKR 1.24 及更低版本
本主题的内容适用于 主管 上置备了 TKR v1.24 及更低版本的 TKG 集群。默认情况下,这些 Tanzu Kubernetes 版本 启用 Pod 安全策略准入控制器。
Pod 安全策略准入控制器的继承者是 Pod 安全准入控制器。主管 上置备了 TKR v1.25 及更高版本的 TKG 集群启用 Pod 安全准入控制器。请参见为 TKR 1.25 及更高版本配置 PSA。
Pod 安全策略准入控制器
Kubernetes Pod 安全策略 (PSP) 是控制 Pod 安全性的集群级别资源。通过使用 PSP,能够控制可以部署的 Pod 类型以及可以部署这些 Pod 的帐户类型。
PodSecurityPolicy 资源定义了一组条件,Pod 必须满足这些条件才能进行部署。如果不满足这些条件,则无法部署 Pod。单个 PodSecurityPolicy 必须验证整个 Pod。Pod 不能在一个策略中包含部分规则,同时又在另一个策略中包含部分规则。有关详细信息,请参见 Kubernetes 文档中的 Pod 安全策略和 RBAC。
可以通过多种方法在 Kubernetes 中使用 Pod 安全策略。典型的方法是使用基于角色的访问控制 (RBAC) 对象。ClusterRole 和 ClusterRoleBinding 适用于集群范围;Role 和 RoleBinding 适用于特定的命名空间。如果使用 RoleBinding,该绑定仅允许 Pod 在与绑定相同的命名空间中运行。有关信息,请参见 Kubernetes 文档中的 RBAC。
创建 Kubernetes Pod 有两种方法:直接创建或间接创建。可以通过使用用户帐户部署 Pod 规范来直接创建 Pod。可以通过定义某种高级别资源(如 Deployment 或 DaemonSet)来间接创建 Pod。在这种情况下,服务帐户将创建底层 Pod。有关详细信息,请参见 Kubernetes 文档中的服务帐户。
要有效使用 PSP,必须同时考虑这两个 Pod 创建工作流:直接和间接。如果用户直接创建 Pod,则绑定到用户帐户的 PSP 将控制操作。如果用户通过服务帐户创建 Pod,则 PSP 必须绑定到用于创建 Pod 的服务帐户。如果在 Pod 规范中未指定服务帐户,则将使用命名空间的默认服务帐户。
TKG 集群的默认 PodSecurityPolicy
默认 PSP | 权限 | 描述 | 关联的默认 ClusterRole |
---|---|---|---|
vmware-system-privileged |
以任何用户身份运行 | 可允许 PSP。相当于在未启用 PSP 准入控制器的情况下运行集群。 | psp:vmware-system-privileged 可以使用此 PSP |
vmware-system-restricted |
必须以非 root 用户身份运行 | 限制性 PSP。不允许对 Pod 容器进行特权访问,阻止可能升级到 root,并且需要使用多个安全机制。 | psp:vmware-system-restricted 可以使用此 PSP |
TKG 集群的 Role 和 ClusterRole 绑定
主管 上的 TKG 不会为 TKG 集群提供默认的 RoleBinding 和 ClusterRoleBinding。本文档提供了可使用的示例。请参见将默认 Pod 安全策略应用于 TKG Service 集群。
获得 vSphere 命名空间 上编辑权限的 vCenter Single Sign-On 用户将分配有在该命名空间中部署的任何 Tanzu Kubernetes 集群的 cluster-admin 角色。经过身份验证的集群管理员可以隐式使用 vmware-system-privileged
PSP。尽管在技术上并不是 ClusterRoleBinding,但具有相同的效果。
集群管理员必须定义任何绑定,以允许或限制用户可以部署到集群的 Pod 类型。如果使用 RoleBinding,该绑定仅允许 Pod 在与绑定相同的命名空间中运行。这可以与系统组配对,以向命名空间中运行的所有 Pod 授予访问权限。向集群进行身份验证的非管理员用户将分配有 authenticated
角色,由此可以绑定到默认的 PSP。
- 集群管理员可以使用其用户帐户直接在任何命名空间中创建特权 Pod。
- 集群管理员可以在 kube-system 命名空间中创建 Deployment、StatefulSet 和 DaemonSet(每个都创建特权 Pod)。如果要使用不同的 Kubernetes 命名空间,请为其创建 RoleBinding 或 ClusterRoleBinding。
- 集群管理员可以创建自己的 PSP(除了两个默认 PSP 之外),并将这些 PSP 绑定到任何用户。如果定义自己的 PSP,请参见 Kubernetes 文档中的 策略顺序。
- 在集群管理员将 PSP 绑定到经过身份验证的用户,任何经过身份验证的用户都无法创建特权或非特权 Pod。
有关绑定示例,请参见 将默认 Pod 安全策略应用于 TKG Service 集群。