可以将 Guestbook 应用程序部署到 Tanzu Kubernetes 集群,以了解服务帐户以及部署和服务创建的 pod 安全策略。
部署 Guestbook 应用程序是探索 Kubernetes 的一种常用方法。如果将所有 Guestbook YAML 文件部署到 Tanzu Kubernetes Grid 服务 置备的一个 Tanzu Kubernetes 集群,将无法成功创建应用程序 pod。运行 kubectl describe pod
命令时,将显示以下错误消息:
“Error: container has runAsNonRoot and image will run as root”
Guestbook 应用程序使用 deployment
和 replicaset
资源在默认命名空间中部署特权容器。由于已为 Tanzu Kubernetes 集群启用 PodSecurityPolicy 控制器,因此当任何集群用户尝试创建 Guestbook 应用程序 pod 时,都将根据 PodSecurityPolicy 检查这些控制器的服务帐户。如果适当的 PSP 未绑定到这些服务帐户,则不会部署该应用程序。
默认情况下,Tanzu Kubernetes 管理员可以使用其用户帐户直接在任何命名空间中创建特权 pod。但是,Guestbook 应用程序使用服务帐户部署特权容器。集群管理员可以在 kube-system
命名空间中创建 Deployment、StatefulSet 和 DaemonSet。但是,Guestbook 应用程序会在默认命名空间中部署这些资源。此外,如果没有适当的 PSP 和绑定,非管理用户根本无法创建特权 pod 或非特权 pod。
一种解决方案是创建默认特权 PSP 的绑定,以允许部署 Guestbook 应用程序。对于绑定帐户,特权 PodSecurityPolicy 允许以 root 用户身份运行的 pod 和特权容器。可以创建适用于 vmware-system-privileged
集群范围的 ClusterRoleBinding,但这样做可能会违反最小特权原则,因为授予的权限多于所需权限。更好的方法是创建 RoleBinding,以允许系统服务帐户在默认命名空间中使用特权 PodSecurityPolicy。有关详细信息,请参见Pod 安全策略的角色绑定示例。
前提条件
- Kubernetes 文档中的 Guestbook 应用程序教程
- 对 Tanzu Kubernetes 集群使用 POD 安全策略
- Pod 安全策略的角色绑定示例