Tanzu Kubernetes Grid 服务 会置备已启用 PodSecurityPolicy 准入控制器的 Tanzu Kubernetes 集群。这意味着部署工作负载需要 Pod 安全策略。集群管理员可以将 Pod 从其用户帐户部署到任何命名空间以及从服务帐户部署到 kube-system 命名空间。对于所有其他用例,您必须明确绑定到 PodSecurityPolicy 对象。集群包括您可以绑定的默认 Pod 安全策略,您也可以创建自己的安全策略。

关于 Kubernetes Pod 安全策略

Kubernetes Pod 安全策略 (PSP) 是控制 Pod 安全性的集群级别资源。通过使用 PSP,能够控制可以部署的 Pod 类型以及可以部署这些 Pod 的帐户类型。

PodSecurityPolicy 资源定义了一组条件,Pod 必须满足这些条件才能进行部署。如果不满足这些条件,则无法部署 Pod。单个 PodSecurityPolicy 必须验证整个 Pod。Pod 不能在一个策略中包含部分规则,同时又在另一个策略中包含部分规则。

可以通过多种方法在 Kubernetes 中使用 Pod 安全策略。典型的方法是使用基于角色的访问控制 (RBAC) 对象。ClusterRole 和 ClusterRoleBinding 适用于集群范围;Role 和 RoleBinding 适用于特定的命名空间。如果使用 RoleBinding,该绑定仅允许 Pod 在与绑定相同的命名空间中运行。

创建 Kubernetes Pod 有两种方法:直接创建或间接创建。可以通过使用用户帐户部署 Pod 规范来直接创建 Pod。可以通过定义某种高级别资源(如 Deployment 或 DaemonSet)来间接创建 Pod。在这种情况下,服务帐户将创建底层 Pod。

要有效使用 PSP,必须同时考虑这两个 Pod 创建工作流。如果用户直接创建 Pod,则绑定到用户帐户的 PSP 将控制操作。如果用户通过服务帐户创建 Pod,则 PSP 必须绑定到用于创建 Pod 的服务帐户。如果在 Pod 规范中未指定服务帐户,则将使用命名空间的默认服务帐户。

有关详细信息,请参见 Kubernetes 文档中的Pod 安全策略RBAC 服务帐户

Tanzu Kubernetes 集群的默认 PodSecurityPolicy

下表列出并介绍了 Tanzu Kubernetes 集群的特权和受限默认 Pod 安全策略,以及与每个策略关联的默认 ClusterRole。
表 1. 具有关联 ClusterRole 的默认 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

Tanzu Kubernetes 集群没有默认绑定

Tanzu Kubernetes Grid 服务 不会为 Tanzu Kubernetes 集群提供默认的 RoleBinding 和 ClusterRoleBinding。

获得 vSphere 命名空间编辑权限的 vCenter Single Sign-On 用户将分配有在该命名空间中部署的任何 Tanzu Kubernetes 集群的 cluster-admin 角色。经过身份验证的集群管理员可以隐式使用 vmware-system-privileged PSP。尽管在技术上并不是 ClusterRoleBinding,但具有相同的效果。

集群管理员必须定义任何绑定,以允许或限制用户可以部署到集群的 Pod 类型。如果使用 RoleBinding,该绑定仅允许 Pod 在与绑定相同的命名空间中运行。这可以与系统组配对,以向命名空间中运行的所有 Pod 授予访问权限。向集群进行身份验证的非管理员用户将分配有 authenticated 角色,由此可以绑定到默认的 PSP。请参见向开发人员授予 Tanzu Kubernetes 集群访问权限

默认 PodSecurityPolicy 对 Tanzu Kubernetes 集群的影响

对于任何 Tanzu Kubernetes 集群,都将执行以下行为:
  • 集群管理员可以使用其用户帐户直接在任何命名空间中创建特权 Pod。
  • 集群管理员可以在 kube-system 命名空间中创建 Deployment、StatefulSet 和 DaemonSet(每个都创建特权 Pod)。如果要使用不同的命名空间,请参见Tanzu Kubernetes Guestbook 教程
  • 集群管理员可以创建自己的 PSP(除了两个默认 PSP 之外),并将这些 PSP 绑定到任何用户。如果定义自己的 PSP,请参见 Kubernetes 文档中的 策略顺序
  • 在集群管理员将 PSP 绑定到经过身份验证的用户,任何经过身份验证的用户都无法创建特权或非特权 Pod。请参见Tanzu Kubernetes Guestbook 教程