Stellen Sie die Guestbook-Anwendung in Ihrem Tanzu Kubernetes-Cluster bereit, um die Pod-Sicherheitsrichtlinie für Dienstkonten sowie die Bereitstellung und Diensterstellung zu untersuchen.

Das Bereitstellen der Guestbook-Anwendung ist eine gebräuchliche Methode zum Erkunden von Kubernetes. Falls Sie alle Guestbook-YAML-Dateien für einen vom Tanzu Kubernetes Grid-Dienst zur Verfügung gestellten Tanzu Kubernetes-Cluster bereitstellen, wird der Anwendungs-Pod nicht erfolgreich erstellt. Wenn Sie den Befehl kubectl describe pod ausführen, wird sinngemäß folgende Fehlermeldung angezeigt:

“Error: container has runAsNonRoot and image will run as root”

Die Guestbook-Anwendung verwendet sowohl deployment- als auch replicaset-Ressourcen zum Bereitstellen von privilegierten Containern im Standard-Namespace. Da der PodSecurityPolicy-Controller für Tanzu Kubernetes-Cluster aktiviert ist, werden die Dienstkonten für diese Controller anhand der PodSecurityPolicy überprüft, wenn ein Clusterbenutzer versucht, einen Guestbook-Anwendungs-Pod zu erstellen. Wenn keine geeignete PSP an diese Dienstkonten gebunden ist, wird die Anwendung nicht bereitgestellt.

Standardmäßig können Tanzu Kubernetes-Administratoren mit ihren Benutzerkonten privilegierte Pods direkt in einem beliebigen Namespace erstellen. Die Guestbook-Anwendung stellt jedoch privilegierte Container mithilfe von Dienstkonten bereit. Ein Clusteradministrator kann Bereitstellungen, StatefulSets und ein DaemonSet im kube-system-Namespace erstellen. Die Guestbook-Anwendung stellt diese Ressourcen im Standard-Namespace bereit. Darüber hinaus können Benutzer, die keine Administratoren sind, ohne die korrekte PSP und korrekte Bindungen keine privilegierten oder nicht privilegierten Pods erstellen.

Eine Lösung besteht darin, Bindungen zur privilegierten Standard-PSP zu erstellen, um die Bereitstellung der Guestbook-Anwendung zu ermöglichen. Die privilegierte PodSecurityPolicy lässt als „root“ ausgeführte Pods und privilegierte Container für gebundene Konten zu. Sie können ein ClusterRoleBinding erstellen, das vmware-system-privileged clusterweit anwendet. Dies könnte jedoch zu einem Verstoß gegen das Prinzip des „geringsten Rechts“ verstoßen, indem mehr Berechtigungen erteilt werden als erforderlich. Der bessere Ansatz besteht darin, ein RoleBinding zu erstellen, mit dem die Systemdienstkonten die privilegierte PodSecurityPolicy-Ressource im Standard-Namespace verwenden können. Weitere Informationen finden Sie unter Beispiel für Rollenbindungen für die Pod-Sicherheitsrichtlinie.

Voraussetzungen

Prozedur

  1. Melden Sie sich beim Tanzu Kubernetes-Cluster an. Weitere Informationen hierzu finden Sie unter Herstellen einer Verbindung mit einem Tanzu Kubernetes-Cluster als vCenter Single Sign-On-Benutzer.
  2. Erstellen Sie den Guestbook-Namespace.
    kubectl create namespace guestbook
    Überprüfen Sie:
    kubectl get ns
  3. Erstellen Sie rollenbasierte Zugriffssteuerung mithilfe des standardmäßig privilegierten PSP.
    kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
    Hinweis: Wenn eine strengere Sicherheit erforderlich ist, wenden Sie ein RoleBinding auf den Guestbook-Namespace an. Siehe Beispiel für Rollenbindungen für die Pod-Sicherheitsrichtlinie.
  4. Überprüfen Sie die Speicherklasse oder erstellen Sie eine.
    So überprüfen Sie eine vorhandene Speicherklasse:
    kubectl get storageclass
    Informationen zum Erstellen einer Speicherklasse finden Sie unter Beispiel für Tanzu Kubernetes-Speicherklassen.
  5. Erstellen Sie die dauerhaften Volume-Beanspruchungen (Persistent Volume Claims, PVCs), die die Speicherklasse verwenden.
    Verwenden Sie die folgenden YAML-Dateien: Informationen zum Erstellen der PVCs finden Sie unter Beispiele für die Beanspruchung eines dauerhaften Tanzu Kubernetes-Volumes.
  6. Erstellen Sie die Guestbook-YAML-Dateien.
  7. Stellen Sie die Guestbook-Anwendung in ihrem Namespace bereit.
    kubectl apply -f . --namespace guestbook
  8. Überprüfen Sie die Erstellung der Guestbook-Ressourcen.
    kubectl get all -n guestbook
    NAME                                                 READY   STATUS              RESTARTS   AGE
    pod/guestbook-frontend-deployment-56fc5b6b47-cd58r   1/1     Running             0          65s
    pod/guestbook-frontend-deployment-56fc5b6b47-fh6dp   1/1     Running             0          65s
    pod/guestbook-frontend-deployment-56fc5b6b47-hgd2b   1/1     Running             0          65s
    pod/redis-follower-deployment-6fc9cf5759-99fgw       1/1     Running             0          65s
    pod/redis-follower-deployment-6fc9cf5759-rhxf7       1/1     Running             0          65s
    pod/redis-leader-deployment-7d89bbdbcf-flt4q         1/1     Running             0          65s
    
    NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGE
    service/guestbook-frontend           LoadBalancer   10.10.89.59      10.19.15.99     80:31513/TCP   65s
    service/redis-follower               ClusterIP      10.111.163.189   <none>          6379/TCP       65s
    service/redis-leader                 ClusterIP      10.111.70.189    <none>          6379/TCP       65s
    
    NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/guestbook-frontend-deployment   3/3     3            3           65s
    deployment.apps/redis-follower-deployment       1/2     2            1           65s
    deployment.apps/redis-leader-deployment         1/1     1            1           65s
    
    NAME                                                       DESIRED   CURRENT   READY   AGE
    replicaset.apps/guestbook-frontend-deployment-56fc5b6b47   3         3         3       65s
    replicaset.apps/redis-follower-deployment-6fc9cf5759       2         2         1       65s
    replicaset.apps/redis-leader-deployment-7d89bbdbcf         1         1         1       65s
  9. Rufen Sie die Guestbook-Webseite mit der External-IP-Adresse des service/guestbook-frontend-Lastausgleichsdiensts auf, in diesem Beispiel die 10.19.15.99.
    Sie sehen die Guestbook-Webschnittstelle und können Werte in die Guestbook-Datenbank eingeben. Wenn Sie die Anwendung neu starten, werden die Daten beibehalten.