Пишем политику для kyverno

0
(0)

Есть такой интересный инструмент для безопасности k8s, который умеет всякое и называется kyverno.

Тут подробнее.

Сегодня рассмотрим одну из возможностей мутирования манифестов пода, а именно мутирование imagePullPolicy.

Рассматриваемый кейс — предположим, что у нам нужно мутировать imagePullPolicy: Always всегда в политику IfNotPresent, дабы не пулить каждый раз образы и избежать ошибки и человеческого фактора в ревью манифестов, но при этом, если мы используем тег latest, мы наоборот меняем политику на Always.

ClusterPolicy для kyverno будет выглядить примерно вот так:

YAML
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  annotations:
    policies.kyverno.io/category: Mutate imagePullPolicy for pod
    policies.kyverno.io/description: Set imagePullPolicy IfNotPresent always exepct if image tag latest
    policies.kyverno.io/severity: low
    policies.kyverno.io/subject: Pod
    policies.kyverno.io/title: Mutate imagePullPolicy
  name: mutateimagepullpolicy
spec:
  background: true
  rules:
    - match:
        any:
          - resources:
              kinds:
                - Pod
      mutate:
        patchStrategicMerge:
          spec:
            initContainers:
              - (imagePullPolicy): Always
                imagePullPolicy: IfNotPresent
            containers:
              - (imagePullPolicy): Always
                imagePullPolicy: IfNotPresent
      name: imagepullpolicy-ifnotpresent
      preconditions:
        all:
          - key: '{{ request.operation }}'
            operator: In
            value:
              - CREATE
              - UPDATE
    - match:
        any:
          - resources:
              kinds:
                - Pod
      mutate:
        patchStrategicMerge:
          spec:
            initContainers:
              - (image): '*:latest'
                imagePullPolicy:  Always
            containers:
              - (image): '*:latest'
                imagePullPolicy: Always
      name: imagepullpolicy-always
      preconditions:
        all:
          - key: '{{ request.operation }}'
            operator: In
            value:
              - CREATE
              - UPDATE
  validationFailureAction: Audit

Здесь в рамках одной ClusterPolicy используется несколько политик. Такой манифест скажется kyverno применять политики последовательно, к примеру применив одну политку, если она станет противоречить другой, то мутация сработает еще раз.

Тем самым при операциях UPDATE, CREATE на любом namespace, kyverno проверить initContainers и containers в поде и мутирует их imagePullPolicy если это потребуется.

Насколько статья полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Оставить комментарий