將 Guestbook 應用程式部署至 Tanzu Kubernetes 叢集,以深入瞭解服務帳戶的網繭安全性原則以及部署和服務建立。
部署 Guestbook 應用程式是探索 Kubernetes 的一般方式。如果您將所有 Guestbook YAML 檔案部署到由 Tanzu Kubernetes Grid 服務 佈建的 Tanzu Kubernetes 叢集,則不會成功建立應用程式網繭。執行 kubectl describe pod
命令時,會顯示下列錯誤訊息:
“Error: container has runAsNonRoot and image will run as root”
Guestbook 應用程式正在使用 deployment
和 replicaset
資源在預設命名空間中部署有權限的容器。由於已針對 Tanzu Kubernetes 叢集啟用 PodSecurityPolicy 控制器,當任何叢集使用者嘗試建立 Guestbook 應用程式網繭時,會對照 PodSecurityPolicy 檢查這些控制器的服務帳戶。如果未將適當的 PSP 繫結到這些服務帳戶,則不會部署該應用程式。
依預設,Tanzu Kubernetes 管理員可以使用其使用者帳戶直接在任何命名空間中建立有權限的網繭。但是,Guestbook 應用程式會使用服務帳戶來部署有權限的容器。叢集管理員可以在 kube-system
命名空間中建立 Deployment、StatefulSet 和 DaemonSet。但是,Guestbook 應用程式會在預設命名空間中部署這些資源。此外,在沒有適當 PSP 和繫結的情況下,非管理使用者根本無法建立有權限或無權限的網繭。
一個解決方案是建立與有權限的預設 PSP 的繫結,以允許部署 Guestbook 應用程式。對於繫結帳戶,有權限的 PodSecurityPolicy 允許以 root 身分執行的網繭和有權限的容器。您可以建立在叢集範圍內套用 vmware-system-privileged
的 ClusterRoleBinding,但這樣做可能會授與比實際所需更多的權限,從而違反最低權限原則。更好的方法是建立允許系統服務帳戶在預設命名空間中使用有權限的 PodSecurityPolicy 的 RoleBinding。如需詳細資訊,請參閱 網繭安全性原則的角色繫結範例。
必要條件
- Kubernetes 說明文件中的 Guestbook 應用程式教學課程
- 將網繭安全性原則與 Tanzu Kubernetes 叢集搭配使用
- 網繭安全性原則的角色繫結範例