Implante o aplicativo Guestbook no cluster do Tanzu Kubernetes para explorar a política de segurança de pod para contas de serviço e a implantação e a criação de serviços.

A implantação do aplicativo Guestbook é uma maneira comum de explorar o Kubernetes. Se você implantar todos os arquivos YAML do Guestbook em um cluster Tanzu Kubernetes provisionado pelo Tanzu Kubernetes Grid Service, o pod do aplicativo não será criado com êxito. A seguinte mensagem de erro aparece quando você executa o comando kubectl describe pod:

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

O aplicativo Guestbook está usando os recursos deployment e replicaset para implantar contêineres privilegiados no namespace padrão. Como o PodSecurityPolicy Controller está habilitado para clusters Tanzu Kubernetes, quando qualquer usuário do cluster tenta criar o pod do aplicativo Guestbook, as contas de serviço para esses controladores são verificadas em relação à PodSecurityPolicy. Se um PSP apropriado não estiver vinculado a essas contas de serviço, o aplicativo não será implantado.

Por padrão, os administradores do Tanzu Kubernetes podem criar pods com privilégios diretamente em qualquer namespace usando sua conta de usuário. No entanto, o aplicativo Guestbook implanta contêineres privilegiados usando contas de serviço. Um administrador de cluster pode criar implantações, StatefulSets e DaemonSet no namespace kube-system. No entanto, o aplicativo Guestbook implanta esses recursos no namespace padrão. Além disso, os usuários não administrativos não podem criar pods com ou sem privilégios sem o PSP e as associações adequadas.

Uma solução é criar associações com o PSP privilegiado padrão para permitir que o aplicativo Guestbook seja implantado. A PodSecurityPolicy privilegiada permite a execução de pods como raiz e contêineres privilegiados para contas vinculadas. Você pode criar uma ClusterRoleBinding que aplica o vmware-system-privileged em todo o cluster, mas isso pode violar o princípio do menor privilégio, concedendo mais permissões do que o necessário. Uma abordagem melhor é criar um RoleBinding que permita que as contas de serviço do sistema usem a PodSecurityPolicy privilegiada no namespace padrão. Para obter mais informações, consulte Exemplo de associações de função para a política de segurança do pod.

Pré-requisitos

Procedimento

  1. Faça login no cluster Tanzu Kubernetes. Consulte o Conectar-se a um Tanzu Kubernetes cluster como um vCenter Single Sign-On usuário.
  2. Crie o namespace do Guestbook.
    kubectl create namespace guestbook
    Verifique:
    kubectl get ns
  3. Crie controle de acesso baseado em função usando o PSP privilegiado padrão.
    kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
    Observação: Se for necessária uma segurança mais rígida, aplique uma RoleBinding no namespace do Guestbook. Consulte Exemplo de associações de função para a política de segurança do pod
  4. Verifique a classe de armazenamento ou crie uma.
    Para verificar uma classe de armazenamento existente:
    kubectl get storageclass
    Para criar uma classe de armazenamento, consulte Tanzu Kubernetes Exemplo de classe de armazenamento.
  5. Crie as declarações de volume persistente (PVCs) que usam a classe de armazenamento.
  6. Crie os arquivos YAML do Guestbook.
  7. Implante o aplicativo Guestbook em seu namespace.
    kubectl apply -f . --namespace guestbook
  8. Verifique a criação dos recursos do 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. Acesse a página do livro de convidados usando o endereço External-IP do balanceador de carga service/guestbook-frontend, que neste exemplo é 10.19.15.99.
    Você vê a interface da web do Guestbook e pode inserir valores no banco de dados do Guestbook. Se você reiniciar o aplicativo, os dados serão persistentes.