DEV Community

Wander
Wander

Posted on • Edited on

Validação dinâmica K8s

Símbolo do kubernetes representado por um timão azul
 

Neste artigo vou abordar um componente do kubernetes que precisei entender sua função para avaliar sua real necessidade para uma determinada situação, o objeto em questão é o ValidatingWebhookConfiguration.

O ValidatingWebhookConfiguration é um dos componentes utilizados para acionar validações aos objetos que estão sendo criados, deletados ou atualizados em um cluster Kubernetes. Isso é possível pois este componente realiza chamadas a um serviço que validará por exemplo, se um pod atende ou não a determinadas regras para poder ingressar ou não no cluster.

QUANDO USAR?
Vamos supor que você não quer que sejam criados pods sem a label "ambiente: teste" no seu cluster. Para conseguir validar se este pod atende ou não a sua necessidade e permitir que ele seja criado, você criará um serviço de validação que será acionado por um ValidatingWebhookConfiguration.

Para entender melhor, vamos analisar o manifesto abaixo que especifica a criação de um ValidatingWebhookConfiguration:

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: pod-validator
webhooks:
  - name: pod.validator.teste.io
    clientConfig:
      service:
        name: pod-validator
        namespace: default
        path: "/validate"
    rules:
      - apiGroups:
          - ""
        apiVersions:
          - "v1"
        operations:
          - CREATE
          - UPDATE
        resources:
          - pods
    failurePolicy: Fail
Enter fullscreen mode Exit fullscreen mode

name é o nome que damos ao webhook.
clientConfig especifica o serviço que fornecerá a validação. Nesse caso o nome do service é pod-validator e está no namespace default, suponhamos que este aponte para um pod que executa um script python, esse script irá conter a lógica de validação, como por exemplo, verificar se o POD que está sendo criado possui a label "ambiente: teste".
rules aqui você descreve a 'quem' essa política se aplica, no caso do exemplo, essa validação será acionada sempre que houver um evento do tipo CREATE e UPDATE para recursos do tipo POD cujo apiVersion seja v1.
failurePolicy o valor Fail faz com que a criação do pod falhe caso a validação feita pelo nosso script python não retorne com sucesso.
 

O desenho abaixo explica de forma bem macro o fluxo quando o ValidatingWebhookConfiguration está presente:

Fluxo de criação de um pod com o componente ValidatingWebhookConfiguration


PONTOS IMPORTANTES:

  • Você pode validar qualquer tipo de componente do kubernetes, não só PODs, se você especificar "*" no campo resources por exemplo, o serviço será chamado para qualquer tipo de recurso que estiver sendo criado ou atualizado no cluster.
  • Você pode restringir a validação aos recursos que estejam sendo criados em apigroups específicos, para isso, basta especificar na lista de apiGroups do manifesto os grupos no qual deseja realizar a validação, por exemplo o grupo gateway.networking.k8s.io.

RESUMO
O ValidatingWebhookConfiguration é um componente importante para que possamos controlar as operações de CREATE, UPDATE, DELETE e CONNECT de recursos em um cluster, chamando serviços que validam determinadas configurações que precisam ou não estar presentes nos recursos para que sejam 'aceitos'. É possível fazer ajustes precisos para se alcançar qualquer tipo de política de validação.


REFERÊNCIAS:


Valeu e até a próxima! :)

Top comments (0)