Mutation Custom Resources
Для мутационных хуков используется настройка reinvocationPolicy: IfNeeded
в MutatingWebhookConfiguration. Подробнее в документации Kubernetes.
Представляют собой набор настраиваемых политик модификации ресурсов Kubernets в момент их создания.
AssignMetadata
Позволяет изменять секцию 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
Позволяет добавлять и удалять элементы из списка, например из списка аргументов для запуска контейнера.
Новые значения добавляются в конец списка.
Пример удаления аргумента --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
Позволяет вносить изменения в параметр 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" ]