I’ve been grappling with vSphere with Tanzu for the past week or so and while I haven’t completely nailed how things operate end to end in this new world, i’ve been able to get to a point beyond the common “kubectl get nodes” which is where plenty of people kicking the tyres get to… and then stop. There also isn’t a lot of straight forward content out there on how to quickly fix issues that come up after the deployment of a Tanzu Kubernetes Grid instance into a fresh namespace. There are kubernetes security and kubernetes storage constructs to deal with and for those not familiar with or new to Kubernetes… it can drive you mad!

Eu tenho lutado com o vSphere with Tanzu na última semana ou então e embora eu não tenha entendido completamente como as coisas funcionam de ponta a ponta neste novo mundo, fui capaz de chegar a um ponto além do comum “kubectl get nós ”que é onde muitas pessoas chutando os pneus vão … e então param. Também não há muito conteúdo direto sobre como corrigir rapidamente os problemas que surgem após a implantação de uma instância do Tanzu Kubernetes Grid em um novo namespace. Existem construções de segurança e armazenamento do Kubernetes para lidar e para aqueles que não estão familiarizados ou são novos no Kubernetes … isso pode deixar você louco!

O problema:

Um dos primeiros problemas que encontrei foi ao tentar implantar pods ou soluções fora do namespace padrão criado como parte da instalação do TKG. Há um monte de coisas para ler aqui em termos de como o Tanzu Kubernetes funciona junto com namespaces internos e como as políticas de segurança de pod são aproveitadas junto com os papéis de cluster e vinculações de papéis que estão associados à política de segurança de pod padrão. As ligações podem ser definidas no nível padrão usando PSPs predefinidos ou podem ser aplicadas no nível do namespace usando PSPs existentes ou personalizados.

Sobre
as políticas de segurança do pod do Kubernetes As políticas de segurança do pod do Kubernetes (PSPs) são recursos no nível do cluster que controlam a segurança dos pods. O uso de PSPs oferece controle sobre os tipos de pods que podem ser implantados e os tipos de contas que podem implantá-los. Um recurso PodSecurityPolicy define um conjunto de condições que um pod deve satisfazer para ser implantado. Se as condições não forem atendidas, o pod não poderá ser implantado. Um único PodSecurityPolicy deve validar um pod em sua totalidade. Um pod não pode ter algumas de suas regras em uma política e outras em outra.

O erro:

Ao procurar implantar soluções ou PODs individuais diretamente da linha de comando kubectl ou usando Helm Charts em um namespace, os objetos eram criados, mas eu estava vendo PODs em um estado pendente e olhando para os eventos dos namespaces estava vendo entradas de eventos como visto abaixo.

Basicamente, o usuário não tem direitos no cluster para implantações privilegiadas. Existem algumas maneiras de consertar isso … você pode tentar implantar no namespace padrão, mas se quiser manter as implantações separadas usando namespaces, você precisa configurar e anexar algumas políticas. Há claramente uma razão para que esses PSPs estejam em vigor dentro do cluster do Kubernetes em uma implantação do Tanzu. O usuário autenticado obtém direitos de edição ou visualização controlados no nível de namespace do vSphere, mas dentro do cluster TKG também há um conjunto de políticas que precisam ser consideradas para fazer as coisas.

O conserto: 

A correção a seguir é basicamente como conceder ALLOW ANY ANY em um firewall (embora qualquer dano possível seja autocontido dentro da implantação específica do TKG) e para aqueles que desejam mergulhar um pouco mais nas implantações do Kubernetes, esta é a maneira rápida de criar um novo PSP e começar a implantar aplicativos em contêineres.

Observação : estou documentando essa correção como uma solução alternativa para fins de teste. Este artigopode ajudá-lo a configurar as coisas de uma maneira mais rígida, do jeito VMware Kubernetes Tanzu. Você pode aplicar um ClusterRoleBinding que aplica “vmware-system-privileged” ao usuário conectado.

Crie e aplique uma nova Política de Segurança de Pod (PSP)

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: kubeapps-psp
spec:
privileged: true
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
volumes:
*
view raw
justwork-psp.yaml
hosted with ❤ by GitHub

Crie e aplique uma nova função de cluster vinculada ao novo PSP

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubeapps-clusterrole
rules:
apiGroups:
policy
resources:
podsecuritypolicies
verbs:
use
resourceNames:
kubeapps-psp

Vincule a função de cluster a uma conta de serviço associada a um namespace

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubeapps-clusterrole
namespace: kubeapps
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kubeapps-clusterrole
subjects:
apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:serviceaccounts
kind: ServiceAccount # Omit apiGroup
name: default
namespace: kubeapps

Use kubectl para aplicar os novos papéis e associações.

No meu exemplo acima, onde eu estava observando os eventos, assim que apliquei o novo PSP, Cluster Role e RoleBinding, as tarefas pendentes / com falha foram concluídas.

Desse ponto em diante, qualquer nova implantação direta ou via Helm não teve problemas.

Referências:

https://docs.vmware.com/en/VMware-vSphere/7.0/vmware-vsphere-with-tanzu/GUID-152BE7D2-E227-4DAA-B527-557B564D9718.html

https://cloud.google.com/kubernetes-engine/docs/how-to/pod-security-policies

https://core.vmware.com/resource/vsphere-tanzu-quick-start-guide

pod s implantação de kubernetes política de segurança de kubernetes pod