kyverno

O objectivo dese artigo e a criação de um policy do tipo Mutation no kyverno. Esse artigo é uma continuação do primeiro artigo onde falei como instalar o kyverno e criei uma policy do tipo validation no kyverno. Para ver o primeiro artigo basta clicar nesse link.

Pré Requisitos

Para conseguir criar uma policy do tipo Mutation no kyverno você necessitará dos seguintes pré requisitos:

  • Ter um cluster kubernetes
  • Ter o kubectl instalado
  • Ter o kyverno ja instalado no seu cluster

Para a instalação do kyverno você também pode consultar o primeiro artigo que falei sobre o kyverno.

Testando uma policy do tipo Mutation

Para testar uma policy do tipo mutation no kyverno vamos criar uma clusterpolicy que força a aplicação da label environment: develop conforme abaixo:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: add-labels
spec:
  rules:
  - name: add-labels
    match:
      any:
      - resources:
          kinds:
          - Deployment
    mutate:
      patchStrategicMerge:
        metadata:
          labels:
            environment: develop
        spec:
          template:
            metadata:
              labels:
                environment: develop
  validationFailureAction: Enforce

Para aplicar a clusterpolicy criar um arquivo chamado add-labels.yaml com o conteúdo acima e executar o comando abaixo:

kubectl apply -f add-labels.yaml

Para validar a criação da cluster policy executar o comando abaixo:

kubectl get clusterpolicy

Agora vamos criar um deployment sem a label environment: develop conforme abaixo:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: app
  name: app
  namespace: app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
        owner: jason
    spec:
      containers:
      - image: nginx
        name: nginx

Para aplicar o deployment criar um arquivo chamado nginx.yaml e executar o comando abaixo:

kubectl apply -f nginx.yaml

Para visualizar se a label foi aplicada você pode executar os comando abaixos:

kubectl get deploy -o jsonpath='{.items[0].metadata.labels}' -n app

kubectl get deploy -o jsonpath='{.items[0].spec.template.metadata.labels}' -n app

Deve retornar as labels conforme abaixo:

{"app":"app","environment":"develop"}

{"app":"app","environment":"develop","owner":"jason"}

Conclusão

O objectivo desse artigo foi demonstrar a utilizacao de uma policy mutation no kyverno. Existem outras policies que podem ser criadas consultando a documentação do kyverno através desse link.