Déployez l'application Guestbook sur votre cluster Tanzu Kubernetes pour explorer la stratégie de sécurité de l'espace pour les comptes de service, ainsi que le déploiement et la création de services.

Le déploiement de l'application Guestbook est un moyen courant d'explorer Kubernetes. Si vous déployez tous les fichiers YAML Guestbook dans un cluster Tanzu Kubernetes provisionné par Service Tanzu Kubernetes Grid, l'espace d'applications n'est pas créé. Le message d'erreur suivant s'affiche lorsque vous exécutez la commande kubectl describe pod :

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

L'application Guestbook utilise à la fois les ressources deployment et replicaset pour déployer des conteneurs privilégiés dans l'espace de noms par défaut. Étant donné que le contrôleur PodSecurityPolicy est activé pour les clusters Tanzu Kubernetes, lorsqu'un utilisateur de cluster tente de créer l'espace d'application Guestbook, les comptes de service de ces contrôleurs sont comparés à la stratégie PodSecurityPolicy. Si un PSP approprié n'est pas lié à ces comptes de service, l'application n'est pas déployée.

Par défaut, les administrateurs Tanzu Kubernetes peuvent créer des espaces privilégiés directement dans n'importe quel espace de noms à l'aide de leur compte d'utilisateur. Toutefois, l'application Guestbook déploie des conteneurs privilégiés à l'aide de comptes de service. Un administrateur de cluster peut créer des ressources Deployments, StatefulSets et DaemonSet dans l'espace de noms kube-system. Toutefois, l'application Guestbook déploie ces ressources dans l'espace de noms par défaut. En outre, les utilisateurs non-administrateurs ne peuvent pas créer des espaces privilégiés ou sans privilèges, sans la PSP et les liaisons appropriées.

Une solution consiste à créer des liaisons vers la PSP privilégiée par défaut pour permettre le déploiement de l'application Guestbook. La stratégie PodSecurityPolicy privilégiée autorise les espaces d'exécution en tant qu'utilisateur racine et les conteneurs privilégiés pour les comptes liés. Vous pouvez créer une liaison ClusterRoleBinding qui applique vmware-system-privileged à l'échelle du cluster, mais cela peut violer le principe du moindre privilège en accordant plus d'autorisations que nécessaire. Une meilleure approche consiste à créer une liaison RoleBinding qui permet aux comptes de service système d'utiliser la stratégie PodSecurityPolicy privilégiée dans l'espace de noms par défaut. Pour plus d'informations, consultez Exemples de liaisons de rôle pour la stratégie de sécurité de l'espace.

Conditions préalables

Procédure

  1. Connectez-vous au cluster Tanzu Kubernetes. Reportez-vous à la section Se connecter à un cluster Tanzu Kubernetes en tant qu'utilisateur vCenter Single Sign-On.
  2. Créez l'espace de noms Guestbook.
    kubectl create namespace guestbook
    Vérifiez :
    kubectl get ns
  3. Créez un contrôle d'accès basé sur les rôles à l'aide de la PSP privilégiée par défaut.
    kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
    Note : Si une sécurité renforcée est requise, appliquez une liaison RoleBinding sur l'espace de noms Guestbook. Reportez-vous à la section Exemples de liaisons de rôle pour la stratégie de sécurité de l'espace.
  4. Vérifiez la classe de stockage ou créez-en une.
    Pour vérifier une classe de stockage existante :
    kubectl get storageclass
    Pour créer une classe de stockage, consultez Exemple de classe de stockage Tanzu Kubernetes.
  5. Créez les réclamations de volume persistant (PVC) qui utilisent la classe de stockage.
    Utilisez les fichiers YAML suivants : Pour créer les réclamations de volume persistant, reportez-vous à la section Exemples de réclamation de volume persistant Tanzu Kubernetes.
  6. Créez les fichiers Guestbook YAML.
  7. Déployez l'application Guestbook dans son espace de noms.
    kubectl apply -f . --namespace guestbook
  8. Vérifiez la création des ressources Guestbook.
    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. Accédez à la page Web Guestbook à l'aide de l'adresse External-IP de l'équilibrage de charge service/guestbook-frontend, qui est 10.19.15.99 dans cet exemple.
    Vous voyez l'interface Web de Guestbook et vous pouvez entrer des valeurs dans la base de données Guestbook. Si vous redémarrez l'application, les données sont persistantes.