Policies com Kyverno
O que é o Kyverno?
O Kyverno é uma ferramenta que permite criar políticas de validação e mutação de recursos no Kubernetes. Com ele, é possível definir regras para garantir que os recursos criados estejam de acordo com as políticas de segurança e conformidade da organização. Além disso, o Kyverno pode ser utilizado para criar recursos de forma automática, como por exemplo, uma NetworkPolicy para cada Namespace criado.
É possível configurar o Kyverno de duas formas: Enforcing e Audit. No modo Enforcing, as políticas são aplicadas de forma obrigatória, ou seja, os recursos que não estiverem de acordo com as políticas definidas serão bloqueados. Já no modo Audit, as políticas são aplicadas de forma passiva, ou seja, os recursos que não estiverem de acordo com as políticas definidas serão apenas registrados, sem bloqueio.
Instalando o Kyverno
Vamos utilizar o Helm para instalar o Kyverno no nosso cluster. Primeiro, adicione o repositório do Kyverno:
Agora, instale o Kyverno:
Criando uma ClusterPolicy Validate
Uma Validate Policy é utilizada para validar se os recursos criados no cluster estão de acordo com as políticas definidas.
Vamos criar uma ClusterPolicy que valida se os recursos criados possuem a definição de limites de recursos. Crie o arquivo require-resource-limits.yaml
:
Agora, aplique a ClusterPolicy no cluster:
Se tentarmos criar um Pod sem definir limites de recursos, o Kyverno irá bloquear a criação do recursos.
Criando uma Policy Mutate
Com uma Mutate Policy, é possível alterar os recursos criados no cluster de acordo com as políticas definidas.
Vamos criar uma Policy que adiciona o label projeto: pick
em todos os Namespaces criados. Crie o arquivo add-label-namespaces.yaml
:
Agora, aplique a ClusterPolicy no cluster:
Ao criar um Namespace, o Kyverno irá adicionar o label projeto: pick
automaticamente.
Criando uma Policy Generate
Com uma Generate Policy, é possível criar recursos de forma automática no cluster de acordo com as políticas definidas. Vamos fazer um exemplo de uma Generate Policy que cria um ConfigMap
para cada Namespace
criado.
Crie o arquivo create-configmap-ns.yaml
:
Criando uma Policy de Proibição
Com uma Policy de Proibição, é possível bloquear a criação de recursos no cluster de acordo com as políticas definidas. Vamos fazer um exemplo de uma Policy de Proibição que bloqueia a criação de Pods que estejam rodando como root.
Crie o arquivo block-root-pods.yaml
:
Criando uma Policy para permitir apenas imagens de um registry específico
Podemos criar uma Policy para permitir apenas imagens de um registry específico. Vamos fazer um exemplo de uma Policy que permite apenas imagens do registry cgr.dev/chainguard
.
Crie o arquivo allow-only-chainguard-images.yaml
:
Utilizando o Exclude
Podemos utilizar o exclude
para excluir recursos que não devem ser validados pela Policy. Vamos fazer um exemplo de uma Policy que permite apenas imagens do registry cgr.dev/chainguard
, mas exclui o Namespace no-chainguard
.