Mutation Custom Resources

Для мутационных хуков используется настройка reinvocationPolicy: IfNeeded в MutatingWebhookConfiguration. Подробнее в документации Kubernetes.

Reference

Представляют собой набор настраиваемых политик модификации ресурсов Kubernets в момент их создания.

AssignMetadata

Reference

Позволяет изменять секцию Metadata ресурса.
На данный момент сервисом Gatekeeper разрешено только добавление объектов lables и annotations. Изменение существующих объектов не предусмотрено.

Пример добавления label owner со значением admin во всех пространствах имен:

1apiVersion: mutations.gatekeeper.sh/v1
2kind: AssignMetadata
3metadata:
4  name: demo-annotation-owner
5spec:
6  match:
7    scope: Namespaced
8  location: "metadata.labels.owner"
9  parameters:
10    assign:
11      value: "admin"

Assign

Позволяет изменять поля, за пределом секции Metadata.

Пример установки imagePullPolicy для всех контейнеров на Always во всех пространствах имен, кроме system:

1apiVersion: mutations.gatekeeper.sh/v1
2kind: Assign
3metadata:
4  name: demo-image-pull-policy
5spec:
6  applyTo:
7  - groups: [""]
8    kinds: ["Pod"]
9    versions: ["v1"]
10  match:
11    scope: Namespaced
12    kinds:
13    - apiGroups: ["*"]
14      kinds: ["Pod"]
15    excludedNamespaces: ["system"]
16  location: "spec.containers[name:*].imagePullPolicy"
17  parameters:
18    assign:
19      value: Always

ModifySet

Reference

Позволяет добавлять и удалять элементы из списка, например из списка аргументов для запуска контейнера.
Новые значения добавляются в конец списка.

Пример удаления аргумента --alsologtostderr из всех контейнеров в поде:

1apiVersion: mutations.gatekeeper.sh/v1
2kind: ModifySet
3metadata:
4  name: remove-err-logging
5spec:
6  applyTo:
7  - groups: [""]
8    kinds: ["Pod"]
9    versions: ["v1"]
10  location: "spec.containers[name: *].args"
11  parameters:
12    operation: prune
13    values:
14      fromList:
15        - --alsologtostderr

AssignImage

Reference

Позволяет вносить изменения в параметр image ресурса.

Пример изменения параметра image на значение my.registry.io/repo/app@sha256:abcde67890123456789abc345678901a:

1apiVersion: mutations.gatekeeper.sh/v1alpha1
2kind: AssignImage
3metadata:
4  name: assign-container-image
5spec:
6  applyTo:
7  - groups: [ "" ]
8    kinds: [ "Pod" ]
9    versions: [ "v1" ]
10  location: "spec.containers[name:*].image"
11  parameters:
12    assignDomain: "my.registry.io"
13    assignPath: "repo/app"
14    assignTag: "@sha256:abcde67890123456789abc345678901a"
15  match:
16    source: "All"
17    scope: Namespaced
18    kinds:
19    - apiGroups: [ "*" ]
20      kinds: [ "Pod" ]