Перед началом использования ограничений нужно создать шаблон политики (ConstraintTemplate). Шаблон политики позволяет администраторам настроить поведение политик как аргументы у функций. Библиотека уже настроенных ограничений и шаблонов ограничений доступна по ссылке.
Ниже приведен пример шаблона политик, который требует наличие указанных меток:
1apiVersion: templates.gatekeeper.sh/v1beta1
2kind: ConstraintTemplate
3metadata:
4 name: k8srequiredlabels
5spec:
6 crd:
7 spec:
8 names:
9 kind: K8sRequiredLabels
10 validation:
11 openAPIV3Schema:
12 properties:
13 labels:
14 type: array
15 items: string
16 targets:
17 - target: admission.k8s.gatekeeper.sh
18 rego: |
19 package k8srequiredlabels
20
21 violation[{"msg": msg, "details": {"missing_labels": missing}}] {
22 provided := {label | input.review.object.metadata.labels[label]}
23 required := {label | label := input.parameters.labels[_]}
24 missing := required - provided
25 count(missing) > 0
26 msg := sprintf("you must provide labels: %v", [missing])
27 }
Чтобы установить шаблон ограничений, выполните команду:
Посмотреть существующие в кластере шаблоны можно по команде:
Для просмотра детальной информации по определенному шаблону ограничений выполните команду:
Ограничения (constraints) используются для применения
. Нижеприведенное ограничение использует
и требует указание метки (label) gatekeeper для всех пространств имен (namespace).
1apiVersion: constraints.gatekeeper.sh/v1beta1
2kind: K8sRequiredLabels
3metadata:
4 name: ns-must-have-gk
5spec:
6 match:
7 kinds:
8 - apiGroups: [""]
9 kinds: ["Namespace"]
10 parameters:
11 labels: ["gatekeeper"]
Вы можете установить ограничения с помощью команды:
Чтобы посмотреть существующие ограничения в кластере, выполните команду:
Для просмотра детальной информации по определенному ограничению выполните следующую команду:
Поле
указывает границы применения ограничений к объектам. Поддерживаются следующие поля:
принимает лист объектов с полями
и
. В них перечислены группы/виды объектов, к которым будет применяться ограничение. Если указано несколько объектов групп/видов, чтобы ресурс находился в области применения, требуется только одно совпадение.
определяет, совпадают ли ресурсы с областью кластера и/или с пространством имен. Используются
(по умолчанию),
,
.
— список имен. Если указано, то ограничения применяются только к ресурсам в указанных пространствах имен. Поддерживаются префиксы имен. Например,
соответствует
и
.
— список имен namespaces. Если указано, то ограничения применяются только к ресурсам, не относящимся к этим пространствам имен. Поддерживаются префиксы имен. Например,
соответствует
и
.
— is the combination of two optional fields:
и
. Эти два поля предоставляют разные методы выбора или исключения объектов Kubernetes на основе ключей и значений меток, включенных в метаданные объекта.
является селектором меток для пространства имен, содержащего объект, или самого объекта, если объект является пространством имен.
— имя объекта.
описывает назначение ограничения. На него можно ссылаться как на
в исходном коде Rego ConstraintTemplate. Gatekeeper заполняет
значениями, переданными в поле
в файле Constraint.
Пример:
rego: |
package k8srequiredlabels
violation[{"msg": msg, "details": {"missing_labels": missing}}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[_]}
missing := required - provided
count(missing) > 0
msg := sprintf("you must provide labels: %v", [missing])
}
Схема для входных параметров Constraint определяется в файле ConstraintTemplate. Сервер API отклонит Constraint с некорректным полем параметров, если типы данных не совпадают.
Пример:
# Apply the Constraint with incorrect parameters schema
$ cat << EOF | kubectl apply -f -
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: ns-must-have-gk
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Namespace"]
parameters:
# Note that "labels" is now an array item, rather than an object
- labels: ["gatekeeper"]
EOF
The K8sRequiredLabels "ns-must-have-gk" is invalid: spec.parameters: Invalid value: "array": spec.parameters in body must be of type object: "array"
Поле
определяет действие для обработки нарушений Constraint. По умолчанию, для
установлено значение
, поскольку поведение по умолчанию — отклонять запросы на допуск с любым нарушением. Другие поддерживаемые значения включают пробный запуск (
) и предупреждение(
).
Опишите вашу задачу, и мы поможем вам ее решить