Implemente la aplicación del libro de visitas en el clúster de Tanzu Kubernetes a fin de explorar la directiva de seguridad de pods para las cuentas de servicio, así como la implementación y la creación de servicios.

La implementación de la aplicación del libro de visitas es un método común para explorar Kubernetes. Si implementa todos los archivos YAML del libro de visitas en un clúster de Tanzu Kubernetes que servicio Tanzu Kubernetes Grid aprovisiona, el pod de la aplicación no se creará correctamente. Aparecerá el siguiente mensaje de error cuando ejecute el comando kubectl describe pod:

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

La aplicación del libro de visitas utiliza los recursos deployment y replicaset para implementar contenedores con privilegios en el espacio de nombres predeterminado. Debido a que la controladora de PodSecurityPolicy está habilitada para los clústeres de Tanzu Kubernetes, cuando un usuario de clúster intenta crear el pod de la aplicación del libro de visitas, las cuentas de servicio de estas controladoras se comprueban con PodSecurityPolicy. Si una PSP adecuada no está enlazada a estas cuentas de servicio, la aplicación no se implementa.

De forma predeterminada, los administradores de Tanzu Kubernetes pueden crear pods con privilegios directamente en cualquier espacio de nombres mediante las cuentas de usuario. Sin embargo, la aplicación del libro de visitas implementa contenedores con privilegios mediante cuentas de servicio. Un administrador de clústeres puede crear los recursos Deployment, StatefulSet y DaemonSet en el espacio de nombres kube-system. Sin embargo, la aplicación del libro de visitas implementa estos recursos en el espacio de nombres predeterminado. Asimismo, los usuarios no administrativos no pueden crear pods con o sin privilegios sin los enlaces ni las PSP adecuados.

Una solución consiste en crear enlaces a la PSP con privilegios predeterminada para permitir la implementación de la aplicación del libro de visitas. La instancia de PodSecurityPolicy con privilegios permite pods que se ejecutan como raíz y contenedores con privilegios para cuentas enlazadas. Puede crear un objeto ClusterRoleBinding que aplique vmware-system-privileged en todo el clúster. No obstante, esto podría infringir el principio de privilegio mínimo, ya que otorga más permisos de los que se necesita. Un enfoque más apropiado consiste en crear un objeto RoleBinding que permita a las cuentas de servicio del sistema utilizar la instancia de PodSecurityPolicy con privilegios en el espacio de nombres predeterminado. Para obtener más información, consulte Ejemplo de enlaces de funciones para la directiva de seguridad de pods.

Requisitos previos

Procedimiento

  1. Inicie sesión en el clúster de Tanzu Kubernetes. Consulte Conectarse a un clúster de Tanzu Kubernetes como usuario de vCenter Single Sign-On.
  2. Cree el espacio de nombres del libro de visitas.
    kubectl create namespace guestbook
    Compruebe lo siguiente:
    kubectl get ns
  3. Cree un control de acceso basado en funciones mediante la instancia de PSP con privilegios predeterminada.
    kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
    Nota: Si se requiere una seguridad más estricta, aplique un objeto RoleBinding en el espacio de nombres del libro de visitas. Consulte Ejemplo de enlaces de funciones para la directiva de seguridad de pods.
  4. Compruebe la clase de almacenamiento o cree una.
    Para comprobar una clase de almacenamiento existente:
    kubectl get storageclass
    Para crear una clase de almacenamiento, consulte Ejemplo de clase de almacenamiento de Tanzu Kubernetes.
  5. Cree las notificaciones de volumen persistente (persistent volume claims, PVC) que usan la clase de almacenamiento.
  6. Cree los archivos YAML del libro de visitas.
  7. Implemente la aplicación del libro de visitas en su espacio de nombres.
    kubectl apply -f . --namespace guestbook
  8. Compruebe la creación de los recursos del libro de visitas.
    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. Acceda a la página web del libro de visitas mediante la dirección External-IP del equilibrador de carga de service/guestbook-frontend que, en este ejemplo, es 10.19.15.99.
    Puede ver la interfaz web del libro de visitas y puede introducir valores en la base de datos de dicho libro. Si reinicia la aplicación, los datos se conservan.