ValidatingAdmissionPolicyBinding
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingAdmissionPolicyBinding
ValidatingAdmissionPolicyBinding связывает ValidatingAdmissionPolicy с параметризованными ресурсами. ValidatingAdmissionPolicyBinding и параметризованные CRD вместе определяют, как администраторы кластера настраивают политики для кластеров.
Для каждого запроса на утверждение каждая привязка приведет к тому, что её политика будет оцениваться N раз, где N равно 1 для политик/привязок, не использующих параметры, в противном случае N — это количество параметров, выбранных привязкой.
Выражения CEL политики должны иметь вычисленную стоимость CEL ниже максимального бюджета CEL. Каждая оценка политики получает независимый бюджет стоимости CEL. Добавление/удаление политик, привязок или параметров не может повлиять на то, находится ли заданная (политика, привязка, параметр) комбинация в рамках собственного бюджета CEL.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
-
metadata (ObjectMeta)
Стандартные метаданные объекта; Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.
-
spec (ValidatingAdmissionPolicyBindingSpec)
Спецификация желаемого поведения ValidatingAdmissionPolicyBinding.
ValidatingAdmissionPolicyBindingSpec — это спецификация ValidatingAdmissionPolicyBinding.
-
spec.matchResources (MatchResources)
MatchResources объявляет, какие ресурсы соответствуют этой привязке и будут проверены ею. Обратите внимание, что это пересекается с matchConstraints политики, поэтому запросы, которые соответствуют политике, могут быть выбраны этой привязкой. Если это не задано, все ресурсы, соответствующие политике, проверяются этой привязкой. Когда resourceRules не заданы, они не ограничивают соответствие ресурсов. Если ресурс соответствует другим полям этого объекта, он будет проверен. Обратите внимание, что это отличается от ValidatingAdmissionPolicy matchConstraints, где resourceRules обязательны.
MatchResources определяет, нужно ли запускать политику контроля доступа к объекту на основе соответствия критериям сопоставления. Правила исключения имеют приоритет над правилами включения (если ресурс соответствует обоим, он исключается)
-
spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)
Атомарно: будет заменено во время слияния
ExcludeResourceRules описывает, какие операции с какими ресурсами/подресурсами ValidatingAdmissionPolicy не должны учитывать. Правила исключения имеют приоритет над правилами включения (если ресурс соответствует обоим, он исключается)
NamedRuleWithOperations — это кортеж из операций и ресурсов с ResourceNames.
-
spec.matchResources.excludeResourceRules.apiGroups ([]string)
Атомарно: будет заменено во время слияния
APIGroups — это группы API, к которым относятся ресурсы. '' — все группы. Если '' присутствует, длина среза должна быть равна одному. Требуется.
-
spec.matchResources.excludeResourceRules.apiVersions ([]string)
Атомарно: будет заменено во время слияния
APIVersions — это версии API, к которым относятся ресурсы. '' — все версии. Если '' присутствует, длина среза должна быть равна одному. Требуется.
-
spec.matchResources.excludeResourceRules.operations ([]string)
Атомарно: будет заменено во время слияния
Operations — это операции, которые интересуют механизм контроля доступа — CREATE, UPDATE, DELETE, CONNECT или * для всех этих операций и любых будущих операций контроля доступа, которые будут добавлены. Если '*' присутствует, длина среза должна быть равна одному. Требуется.
-
spec.matchResources.excludeResourceRules.resourceNames ([]string)
Атомарно: будет заменено во время слияния
ResourceNames — это необязательный белый список имён, к которым применяется правило. Пустой набор означает, что всё разрешено.
-
spec.matchResources.excludeResourceRules.resources ([]string)
Атомарно: будет заменено во время слияния
Resources — это список ресурсов, к которым применяется это правило.
Например: 'pods' означает pods. 'pods/log' означает подресурс журнала pods. '' означает все ресурсы, но не подресурсы. 'pods/' означает все подресурсы pods. '*/scale' означает все подресурсы масштабирования. '*/*' означает все ресурсы и их подресурсы.
Если присутствует символ подстановки, правило валидации гарантирует, что ресурсы не перекрывают друг друга.
В зависимости от содержащего объекта, подресурсы могут быть недоступны. Требуется.
-
spec.matchResources.excludeResourceRules.scope (string)
scope определяет область действия этого правила. Допустимые значения — "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что ограничений по области действия нет. Подресурсы соответствуют области действия своего родительского ресурса. По умолчанию — "*".
-
-
spec.matchResources.matchPolicy (string)
matchPolicy определяет, как используется список «MatchResources» для сопоставления входящих запросов. Допустимые значения — "Exact" или "Equivalent".
Exact: сопоставить запрос только в том случае, если он точно соответствует указанному правилу. Например, если развертывания можно изменить с помощью apps/v1, apps/v1beta1 и extensions/v1beta1, но «rules» включали только
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запрос к apps/v1beta1 или extensions/v1beta1 не будет отправлен в ValidatingAdmissionPolicy.Equivalent: сопоставить запрос, если он изменяет ресурс, указанный в правилах, даже через другую группу API или версию. Например, если развертывания можно изменить с помощью apps/v1, apps/v1beta1 и extensions/v1beta1, и «rules» включали только
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запрос к apps/v1beta1 или extensions/v1beta1 будет преобразован в apps/v1 и отправлен в ValidatingAdmissionPolicy.
По умолчанию — "Equivalent"
-
spec.matchResources.namespaceSelector (LabelSelector)
NamespaceSelector определяет, нужно ли запускать политику контроля доступа к объекту на основе того, соответствует ли пространство имен для этого объекта селектору. Если сам объект является пространством имён, соответствие выполняется по меткам объекта.metadata.labels. Если объект является другим ресурсом кластера, политика никогда не пропускается.
Например, чтобы запустить веб-хук для любых объектов, пространство имён которых не связано с «runlevel» «0» или «1», вы зададите селектор следующим образом: «namespaceSelector»: { «matchExpressions»: [ { «key»: «runlevel», «operator»: «NotIn», «values»: [ «0», «1» ] } ] }
Если вместо этого вы хотите запустить политику только для любых объектов, пространство имён которых связано со «environment» «prod» или «staging», вы зададите селектор следующим образом: «namespaceSelector»: { «matchExpressions»: [ { «key»: «environment», «operator»: «In», «values»: [ «prod», «staging» ] } ] }
См. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ для получения дополнительных примеров селекторов меток.
По умолчанию — пустой LabelSelector, который соответствует всему.
-
spec.matchResources.objectSelector (LabelSelector)
ObjectSelector определяет, нужно ли запускать проверку на основе наличия у объекта соответствующих меток. objectSelector оценивается по отношению как к oldObject, так и к newObject, которые будут отправлены на проверку cel, и считается, что он соответствует, если соответствует хотя бы один из объектов. Объект null (oldObject в случае создания или newObject в случае удаления) или объект, у которого не может быть меток (например, DeploymentRollback или PodProxyOptions), не считается соответствующим. Используйте селектор объекта только в том случае, если веб-хук является опциональным, так как конечные пользователи могут пропустить веб-хук проверки доступа, установив метки. По умолчанию — пустой LabelSelector, который соответствует всему.
-
spec.matchResources.resourceRules ([]NamedRuleWithOperations)
Атомарно: будет заменено во время слияния
ResourceRules описывает, какие операции с какими ресурсами/подресурсами соответствует ValidatingAdmissionPolicy. Политика учитывает операцию, если она соответствует любому правилу.
NamedRuleWithOperations — это кортеж из операций и ресурсов с ResourceNames.
-
spec.matchResources.resourceRules.apiGroups ([]string)
Атомарно: будет заменено во время слияния
APIGroups — это группы API, к которым относятся ресурсы. '' — все группы. Если '' присутствует, длина среза должна быть равна одному. Требуется.
-
spec.matchResources.resourceRules.apiVersions ([]string)
Атомарно: будет заменено во время слияния
APIVersions — это версии API, к которым относятся ресурсы. '' — все версии. Если '' присутствует, длина среза должна быть равна одному. Требуется.
-
spec.matchResources.resourceRules.operations ([]string)
Атомарно: будет заменено во время слияния
Operations — это операции, которые интересуют механизм контроля доступа — CREATE, UPDATE, DELETE, CONNECT или * для всех этих операций и любых будущих операций контроля доступа, которые будут добавлены. Если '*' присутствует, длина среза должна быть равна одному. Требуется.
-
spec.matchResources.resourceRules.resourceNames ([]string)
Атомарно: будет заменено во время слияния
ResourceNames — это необязательный белый список имён, к которым применяется правило. Пустой набор означает, что всё разрешено.
-
spec.matchResources.resourceRules.resources ([]string)
Атомарно: будет заменено во время слияния
Resources — это список ресурсов, к которым применяется это правило.
Например: 'pods' означает pods. 'pods/log' означает подресурс журнала pods. '' означает все ресурсы, но не подресурсы. 'pods/' означает все подресурсы pods. '*/scale' означает все подресурсы масштабирования. '*/*' означает все ресурсы и их подресурсы.
Если присутствует символ подстановки, правило валидации гарантирует, что ресурсы не перекрывают друг друга.
В зависимости от содержащего объекта, подресурсы могут быть недоступны. Требуется.
-
spec.matchResources.resourceRules.scope (string)
scope определяет область действия этого правила. Допустимые значения — "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что ограничений по области действия нет. Подресурсы соответствуют области действия своего родительского ресурса. По умолчанию — "*".
-
-
-
-
spec.paramRef (ParamRef)
paramRef указывает на ресурс параметра, используемый для настройки политики контроля доступа. Он должен указывать на ресурс типа, указанного в ParamKind связанной политики ValidatingAdmissionPolicy. Если политика определяет ParamKind, а ресурс, на который ссылается ParamRef, не существует, это связывание считается неправильно настроенным, и применяется политика FailurePolicy политики ValidatingAdmissionPolicy. Если политика не определяет ParamKind, то это поле игнорируется, и правила оцениваются без параметра.
ParamRef описывает, как найти параметры, которые будут использоваться в качестве входных данных для выражений правил, применяемых связыванием политики.
-
spec.paramRef.name (строка)
name — имя ссылаемого ресурса.
Должен быть установлен один из
nameилиselector, ноnameиselectorявляются взаимоисключающими свойствами. Если одно установлено, другое должно быть не установлено.Один параметр, используемый для всех запросов на доступ, может быть настроен, установив поле
name, оставивselectorпустым и установив namespace, еслиparamKindотносится к пространству имён. -
spec.paramRef.namespace (строка)
namespace — пространство имён ссылаемого ресурса. Позволяет ограничить поиск параметров определённым пространством имён. Применяется как к
name, так и кselectorполям.Параметр на уровне пространства имён может быть использован путём указания
paramKindв политике, относящейся к пространству имён, и оставлением этого поля пустым.Если
paramKindимеет область действия кластера, это поле ДОЛЖНО быть не установлено. Установка этого поля приводит к ошибке конфигурации.Если
paramKindимеет область действия пространства имён, пространство имён объекта, оцениваемого на соответствие для доступа, будет использоваться, если это поле не установлено. Обратите внимание, что если оно оставлено пустым, связывание не должно соответствовать никаким ресурсам кластерного уровня, что приведёт к ошибке.
-
spec.paramRef.parameterNotFoundAction (строка)
parameterNotFoundActionконтролирует поведение связывания, когда ресурс существует, а имя или селектор действительны, но не найдено ни одного параметра, соответствующего связыванию. Если значение установлено вAllow, то отсутствие сопоставленных параметров будет рассматриваться как успешная валидация связыванием. Если установлено вDeny, то несопоставленные параметры не будут подлежатьfailurePolicyполитики.Допустимые значения —
AllowилиDenyОбязательное поле.
-
spec.paramRef.selector (LabelSelector)
selector может использоваться для сопоставления нескольких объектов param на основе их меток. Укажите selector: {} для сопоставления всех ресурсов ParamKind.
Если найдено несколько параметров, они все оцениваются с помощью выражений политики, и результаты объединяются с помощью логической операции И.
Должен быть установлен один из
nameилиselector, ноnameиselectorявляются взаимоисключающими свойствами. Если одно установлено, другое должно быть не установлено.
-
-
spec.policyName (строка)
PolicyName ссылается на имя ValidatingAdmissionPolicy, к которому ValidatingAdmissionPolicyBinding привязано. Если ссылаемый ресурс не существует, это связывание считается недействительным и будет проигнорировано. Обязательное поле.
-
spec.validationActions ([]string)
При слиянии сохраняются уникальные значения
validationActions определяет, как выполняются валидации сопоставленной политики ValidatingAdmissionPolicy. Если валидация оценивается как ложь, она всегда выполняется в соответствии с этими действиями.
Ошибки, определённые политикой FailurePolicy ValidatingAdmissionPolicy, выполняются в соответствии с этими действиями только в том случае, если FailurePolicy установлена в Fail, в противном случае ошибки игнорируются. Это включает ошибки компиляции, ошибки выполнения и неправильную конфигурацию политики.
validationActions объявлены как набор значений действий. Порядок не имеет значения. validationActions не может содержать дубликатов одного и того же действия.
Поддерживаемые значения действий:
"Deny" указывает, что ошибка валидации приводит к отказу запроса.
"Warn" указывает, что ошибка валидации сообщается клиенту запроса в заголовках HTTP Warning с кодом предупреждения 299. Предупреждения могут отправляться как для разрешённых, так и для запрещённых ответов на вход.
"Audit" указывает, что ошибка валидации включена в опубликованное событие аудита для запроса. Событие аудита будет содержать аннотацию аудита
validation.policy.admission.k8s.io/validation_failureсо значением, содержащим подробности ошибок валидации, отформатированные как JSON-список объектов, каждый из которых имеет следующие поля: - message: Строка сообщения об ошибке валидации - policy: Имя ресурса ValidatingAdmissionPolicy - binding: Имя ресурса ValidatingAdmissionPolicyBinding - expressionIndex: Индекс ошибочной валидации в ValidatingAdmissionPolicy - validationActions: Принятые действия принуждения для ошибки валидации Пример аннотации аудита:"validation.policy.admission.k8s.io/validation_failure": "[{"message": "Invalid value", {"policy": "policy.example.com", {"binding": "policybinding.example.com", {"expressionIndex": "1", {"validationActions": ["Audit"]}]"Клиенты должны ожидать обработки дополнительных значений, игнорируя любые нераспознанные значения.
"Deny" и "Warn" не могут использоваться вместе, так как такое сочетание ненужно дублирует ошибку валидации как в теле ответа API, так и в заголовках HTTP-предупреждений.
Обязательное поле.
-
ValidatingAdmissionPolicy
ValidatingAdmissionPolicy описывает определение политики проверки доступа, которая принимает или отклоняет объект без его изменения.
-
apiVersion (строка)
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
kind (строка)
Kind — это строковое значение, представляющее REST-ресурс, который представляет этот объект. Серверы могут вывести это из конечной точки, к которой клиент отправляет запросы. Не может быть обновлено. В формате CamelCase. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
metadata (ObjectMeta)
Стандартные метаданные объекта; Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.
-
spec (ValidatingAdmissionPolicySpec)
Описание желаемого поведения ValidatingAdmissionPolicy.
ValidatingAdmissionPolicySpec — описание желаемого поведения AdmissionPolicy.
-
spec.auditAnnotations ([]AuditAnnotation)
Атомарно: будет заменено во время слияния
auditAnnotations содержит выражения CEL, используемые для создания аннотаций аудита для события аудита API-запроса. validations и auditAnnotations не могут быть пустыми одновременно; требуется хотя бы одно из validations или auditAnnotations.
AuditAnnotation описывает, как создать аннотацию аудита для API-запроса.
-
spec.auditAnnotations.key (строка), обязательно
key указывает ключ аннотации аудита. Ключи аннотаций аудита ValidatingAdmissionPolicy должны быть уникальными. Ключ должен быть квалифицированным именем ([A-Za-z0-9][-A-Za-z0-9_.]*) длиной не более 63 байт.
Ключ объединяется с именем ресурса ValidatingAdmissionPolicy для создания ключа аннотации аудита: "{имя ValidatingAdmissionPolicy}/{ключ}".
Если веб-хук приема использует то же имя ресурса, что и этот ValidatingAdmissionPolicy, и тот же ключ аннотации аудита, ключ аннотации будет идентичным. В этом случае первая аннотация, записанная с ключом, будет включена в событие аудита, а все последующие аннотации с тем же ключом будут отброшены.
Необходимо.
-
spec.auditAnnotations.valueExpression (строка), обязательно
valueExpression представляет выражение, которое оценивается CEL для получения значения аннотации аудита. Выражение должно быть равно либо строке, либо null. Если выражение оценивается как строка, аннотация аудита включается со строковым значением. Если выражение оценивается как null или пустая строка, аннотация аудита будет опущена. valueExpression может иметь длину не более 5 КБ. Если результат valueExpression превышает 10 КБ, он будет усечен до 10 КБ.
Если несколько ресурсов ValidatingAdmissionPolicyBinding соответствуют запросу API, то valueExpression будет оцениваться для каждого такого Binding. Все уникальные значения, созданные valueExpressions, будут объединены в одну строку через запятую.
Необходимо.
-
-
spec.failurePolicy (строка)
failurePolicy определяет, как обрабатывать ошибки для политики приема. Ошибки могут возникать из-за ошибок разбора выражений CEL, ошибок проверки типов, ошибок выполнения и неверных или неправильно сконфигурированных определений или привязок политики.
Политика недействительна, если spec.paramKind ссылается на несуществующий Kind. Привязка недействительна, если spec.paramRef.name ссылается на несуществующий ресурс.
failurePolicy не определяет, как обрабатываются проверки, оцениваемые как ложные.
Когда failurePolicy установлено в Fail, ValidatingAdmissionPolicyBinding validationActions определяют, как обеспечиваются ошибки.
Допустимые значения — Ignore или Fail. По умолчанию — Fail.
-
spec.matchConditions ([]MatchCondition)
Стратегия патча: слияние по ключу
nameМассив: уникальные значения по ключу name будут сохранены во время слияния
MatchConditions — это список условий, которые должны быть выполнены для проверки запроса. MatchConditions фильтруют запросы, которые уже были сопоставлены правилами, namespaceSelector и objectSelector. Пустой список matchConditions соответствует всем запросам. Разрешается максимум 64 условия matchConditions.
Если предоставляется объект параметра, к нему можно получить доступ через обработчик
paramsаналогично выражениям проверки.Точная логика сопоставления (в порядке):
- Если ЛЮБОЕ условие matchCondition оценивается как FALSE, политика пропускается.
- Если ВСЕ условия matchConditions оцениваются как TRUE, политика оценивается.
- Если какое-либо условие matchCondition оценивается как ошибка (но ни одно не является FALSE):
- Если failurePolicy=Fail, запрос отклоняется
- Если failurePolicy=Ignore, политика пропускается
MatchCondition представляет условие, которое должно быть выполнено для отправки запроса на веб-хук.
-
spec.matchConditions.expression (строка), обязательно
Expression представляет выражение, которое будет оцениваться CEL. Должно быть равно bool. Выражения CEL имеют доступ к содержимому AdmissionRequest и Authorizer, организованные в переменные CEL:
'object' — Объект из входящего запроса. Значение равно null для запросов DELETE. 'oldObject' — Существующий объект. Значение равно null для запросов CREATE. 'request' — Атрибуты запроса приема(/pkg/apis/admission/types.go#AdmissionRequest). 'authorizer' — Авторизатор CEL. Может использоваться для выполнения проверок авторизации для принципала (пользователя или учетной записи сервиса) запроса. См. https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' — CEL ResourceCheck, построенный из 'authorizer' и сконфигурированный с ресурсом запроса. Документация по CEL: https://kubernetes.io/docs/reference/using-api/cel/
Необходимо.
-
spec.matchConditions.name (строка), обязательно
Name — идентификатор этого условия сопоставления, используемый для стратегического слияния MatchConditions, а также для предоставления идентификатора для целей ведения журнала. Хорошее имя должно быть описательным для связанного выражения. Имя должно быть квалифицированным именем, состоящим из буквенно-цифровых символов, '-', '' или '.', и должно начинаться и заканчиваться буквенно-цифровым символом (например, 'MyName', или 'my.name', или '123-abc', используемый для проверки регулярный выражение '([A-Za-z0-9][-A-Za-z0-9.]*)?[A-Za-z0-9]') с необязательным префиксом доменной зоны DNS и '/' (например, 'example.com/MyName')
Необходимо.
-
-
spec.matchConstraints (MatchResources)
MatchConstraints определяет, какие ресурсы эта политика предназначена для проверки. Политика AdmissionPolicy обращает внимание на запрос, если он соответствует всем ограничениям. Однако, чтобы предотвратить попадание кластеров в неустойчивое состояние, из которого невозможно восстановиться через API, ValidatingAdmissionPolicy не может соответствовать ValidatingAdmissionPolicy и ValidatingAdmissionPolicyBinding. Требуется.
MatchResources определяет, нужно ли запускать политику контроля допуска к объекту на основе соответствия критериям. Правила исключения имеют приоритет над правилами включения (если ресурс соответствует обоим, он исключается)
-
spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)
Атомарно: будет заменено при слиянии
ExcludeResourceRules описывает, какие операции над какими ресурсами/подресурсами ValidatingAdmissionPolicy не должна учитывать. Правила исключения имеют приоритет над правилами включения (если ресурс соответствует обоим, он исключается)
NamedRuleWithOperations — это кортеж из Operations и Resources с ResourceNames.
-
spec.matchConstraints.excludeResourceRules.apiGroups ([]string)
Атомарно: будет заменено при слиянии
APIGroups — это группы API, к которым принадлежат ресурсы. '' — все группы. Если присутствует '', длина среза должна быть равна единице. Требуется.
-
spec.matchConstraints.excludeResourceRules.apiVersions ([]string)
Атомарно: будет заменено при слиянии
APIVersions — это версии API, к которым принадлежат ресурсы. '' — все версии. Если присутствует '', длина среза должна быть равна единице. Требуется.
-
spec.matchConstraints.excludeResourceRules.operations ([]string)
Атомарно: будет заменено при слиянии
Operations — это операции, которые интересуют модуль вставки — CREATE, UPDATE, DELETE, CONNECT или * для всех этих операций и любых будущих операций вставки, которые будут добавлены. Если присутствует '*', длина среза должна быть равна единице. Требуется.
-
spec.matchConstraints.excludeResourceRules.resourceNames ([]string)
Атомарно: будет заменено при слиянии
ResourceNames — это необязательный белый список имён, к которым применяется правило. Пустой набор означает, что всё разрешено.
-
spec.matchConstraints.excludeResourceRules.resources ([]string)
Атомарно: будет заменено при слиянии
Resources — это список ресурсов, к которым применяется данное правило.
Например: 'pods' означает pods. 'pods/log' означает подресурс журнала pods. '' означает все ресурсы, но не подресурсы. 'pods/' означает все подресурсы pods. '/scale' означает все подресурсы масштабирования. '/*' означает все ресурсы и их подресурсы.
Если присутствует символ подстановки, правило валидации будет гарантировать, что ресурсы не перекрывают друг друга.
В зависимости от окружающего объекта, подресурсы могут быть недоступны. Требуется.
-
spec.matchConstraints.excludeResourceRules.scope (string)
scope определяет область действия данного правила. Допустимые значения — "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что ограничений по области действия нет. Подресурсы соответствуют области действия своего родительского ресурса. Значение по умолчанию — "*".
-
-
spec.matchConstraints.matchPolicy (string)
matchPolicy определяет, как используется список "MatchResources" для сопоставления входящих запросов. Допустимые значения — "Exact" или "Equivalent".
Exact: запрос сопоставляется только в том случае, если он точно соответствует указанному правилу. Например, если deployments могут быть изменены через apps/v1, apps/v1beta1 и extensions/v1beta1, но "rules" содержали только
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запрос к apps/v1beta1 или extensions/v1beta1 не будет отправлен в ValidatingAdmissionPolicy.Equivalent: запрос сопоставляется, если он изменяет ресурс, указанный в правилах, даже через другую группу API или версию. Например, если deployments могут быть изменены через apps/v1, apps/v1beta1 и extensions/v1beta1, а "rules" содержали только
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запрос к apps/v1beta1 или extensions/v1beta1 будет преобразован в apps/v1 и отправлен в ValidatingAdmissionPolicy.
Значение по умолчанию — "Equivalent"
-
spec.matchConstraints.namespaceSelector (LabelSelector)
NamespaceSelector определяет, нужно ли запускать политику контроля допуска к объекту на основе соответствия пространства имен объекта селектору. Если сам объект является пространством имен, сопоставление выполняется с метками объекта.metadata.labels. Если объект является другим ресурсом уровня кластера, политика никогда не пропускается.
Например, чтобы запустить веб-хук для любых объектов, пространство имен которых не связано с "runlevel" "0" или "1"; вы зададите селектор следующим образом: "namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
Если вместо этого вы хотите запустить политику только для объектов, пространство имен которых связано с "environment" "prod" или "staging"; вы зададите селектор следующим образом: "namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
См. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ для получения дополнительных примеров селекторов меток.
Значение по умолчанию — пустой LabelSelector, который соответствует всему.
-
spec.matchConstraints.objectSelector (LabelSelector)
ObjectSelector определяет, следует ли запускать валидацию на основе соответствия меткам объекта. objectSelector оценивается по отношению к both oldObject и newObject, которые будут отправлены для валидации cel, и считается, что он соответствует, если какой-либо из объектов соответствует селектору. Нулевой объект (oldObject в случае создания или newObject в случае удаления) или объект, который не может иметь метки (например, DeploymentRollback или PodProxyOptions), не считается соответствующим. Используйте селектор объекта только в том случае, если веб-хук является необязательным, поскольку конечные пользователи могут пропустить веб-хук вставки, установив метки. Значение по умолчанию — пустой LabelSelector, который соответствует всему.
-
spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)
Атомарно: будет заменено при слиянии
ResourceRules описывает, какие операции над какими ресурсами/подресурсами соответствуют ValidatingAdmissionPolicy. Политика обращает внимание на операцию, если она соответствует любому правилу.
NamedRuleWithOperations — это кортеж из Operations и Resources с ResourceNames.
-
spec.matchConstraints.resourceRules.apiGroups ([]string)
Атомарно: будет заменено при слиянии
APIGroups — это группы API, к которым принадлежат ресурсы. '' — все группы. Если присутствует '', длина среза должна быть равна единице. Требуется.
-
spec.matchConstraints.resourceRules.apiVersions ([]string)
Атомарно: будет заменено при слиянии
APIVersions — это версии API, к которым принадлежат ресурсы. '' — все версии. Если присутствует '', длина среза должна быть равна единице. Требуется.
-
spec.matchConstraints.resourceRules.operations ([]string)
Атомарно: будет заменено при слиянии
Operations — это операции, которые интересуют модуль вставки — CREATE, UPDATE, DELETE, CONNECT или * для всех этих операций и любых будущих операций вставки, которые будут добавлены. Если присутствует '*', длина среза должна быть равна единице. Требуется.
-
spec.matchConstraints.resourceRules.resourceNames ([]string)
Атомарно: будет заменено при слиянии
ResourceNames — это необязательный белый список имён, к которым применяется правило. Пустой набор означает, что всё разрешено.
-
spec.matchConstraints.resourceRules.resources ([]string)
Атомарно: будет заменено при слиянии
Resources — это список ресурсов, к которым применяется данное правило.
Например: 'pods' означает pods. 'pods/log' означает подресурс журнала pods. '' означает все ресурсы, но не подресурсы. 'pods/' означает все подресурсы pods. '/scale' означает все подресурсы масштабирования. '/*' означает все ресурсы и их подресурсы.
Если присутствует символ подстановки, правило валидации будет гарантировать, что ресурсы не перекрывают друг друга.
В зависимости от окружающего объекта, подресурсы могут быть недоступны. Требуется.
-
spec.matchConstraints.resourceRules.scope (string)
scope определяет область действия данного правила. Допустимые значения — "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что ограничений по области действия нет. Подресурсы соответствуют области действия своего родительского ресурса. Значение по умолчанию — "*".
-
-
-
spec.paramKind (ParamKind)
ParamKind определяет тип ресурсов, используемых для параметризации этой политики. Если отсутствует, для этой политики нет параметров, и переменная param CEL не будет предоставлена выражениям валидации. Если ParamKind относится к несуществующему типу, это определение политики настроено неправильно, и применяется политика FailurePolicy. Если paramKind указан, но paramRef не задан в ValidatingAdmissionPolicyBinding, переменная params будет null.
ParamKind — это кортеж из Group Kind и Version.
-
spec.paramKind.apiVersion (string)
APIVersion — это группа API-версий, к которой принадлежат ресурсы. В формате "group/version". Требуется.
-
spec.paramKind.kind (string)
Kind — это тип API-ресурса, к которому принадлежат ресурсы. Требуется.
-
-
-
spec.validations ([]Validation)
Атомарно: будет заменено во время слияния
Валидации содержат выражения CEL, которые используются для применения валидации. Валидации и аннотации аудита не могут быть одновременно пустыми; требуется минимум одна валидация или одна аннотация аудита.
Валидация задает выражение CEL, используемое для применения валидации.
-
spec.validations.expression (string), required
Выражение представляет собой выражение, которое будет вычислено CEL. см.: https://github.com/google/cel-spec Выражения CEL имеют доступ к содержимому запроса/ответа API, организованному в переменные CEL, а также к некоторым другим полезным переменным:
- 'object' - Объект из входящего запроса. Значение равно null для запросов DELETE. - 'oldObject' - Существующий объект. Значение равно null для запросов CREATE. - 'request' - Атрибуты запроса API(ссылка). - 'params' - Ресурс параметров, на который ссылается привязка политики, которая оценивается. Заполняется только в том случае, если политика имеет ParamKind. - 'namespaceObject' - Объект пространства имён, к которому принадлежит входящий объект. Значение равно null для ресурсов, охватывающих кластер. - 'variables' - Карта составленных переменных, от имени до его лениво вычисленного значения. Например, переменная с именем "foo" может быть обращена как "variables.foo".
- 'authorizer' - Автор CEL. Может использоваться для выполнения проверок авторизации для принципала (пользователя или учетной записи службы) запроса. См. https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
- 'authorizer.requestResource' - Ресурсный чек CEL, построенный из 'authorizer' и настроенный на ресурс запроса.
apiVersion,kind,metadata.nameиmetadata.generateNameвсегда доступны из корня объекта. Никакие другие метаданные не доступны.Доступны только имена свойств в формате
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*. Доступные имена свойств экранируются в соответствии со следующими правилами при доступе в выражении: - '' экранируется в 'подчеркивания' - '.' экранируется в 'точка' - '-' экранируется в 'дефис' - '/' экранируется в 'слеш' - Имена свойств, которые точно совпадают с ключевым словом CEL, экранируются в '{keyword}__'. Ключевые слова: "true", "false", "null", "in", "as", "break", "const", "continue", "else", "for", "function", "if", "import", "let", "loop", "package", "namespace", "return". Примеры:- Выражение, обращение к свойству с именем "namespace": {"Expression": "object.namespace > 0"}
- Выражение, обращение к свойству с именем "x-prop": {"Expression": "object.x__dash__prop > 0"}
- Выражение, обращение к свойству с именем "redact__d": {"Expression": "object.redact__underscores__d > 0"}
Равенство массивов с типом списка 'set' или 'map' игнорирует порядок элементов, т.е. [1, 2] == [2, 1]. Конкатенация массивов с x-kubernetes-list-type использует семантику типа списка:
- 'set':
X + Yвыполняет объединение, где позиции массива всех элементов вXсохраняются, а непересекающиеся элементы вYдобавляются, сохраняя их частичный порядок. - 'map':
X + Yвыполняет слияние, где позиции массива всех ключей вXсохраняются, но значения перезаписываются значениями вYпри пересечении наборов ключейXиY. Элементы вYс непересекающимися ключами добавляются, сохраняя их частичный порядок. Обязательно.
-
spec.validations.message (string)
Сообщение представляет собой сообщение, отображаемое при ошибке валидации. Сообщение обязательно, если выражение содержит перевод строки. Сообщение не должно содержать перевода строки. Если не задано, сообщение — "ошибка правила: {Правило}". Например: "должно быть URL с хостом, соответствующим spec.host". Если выражение содержит переводы строк. Сообщение обязательно. Сообщение не должно содержать перевода строки. Если не задано, сообщение — "ошибка выражения: {Выражение}".
-
spec.validations.messageExpression (string)
messageExpression объявляет выражение CEL, которое вычисляется в сообщение об ошибке валидации, возвращаемое при ошибке правила. Поскольку messageExpression используется в качестве сообщения об ошибке, оно должно вычисляться в строку. Если message и messageExpression присутствуют в валидации, то messageExpression будет использоваться при ошибке валидации. Если messageExpression приводит к ошибке выполнения, ошибка выполнения регистрируется, а сообщение об ошибке валидации генерируется так, как если бы поле messageExpression не было задано. Если messageExpression вычисляется в пустую строку, строку только с пробелами или строку, содержащую переводы строк, то сообщение об ошибке валидации также генерируется так, как если бы поле messageExpression не было задано, и тот факт, что messageExpression произвел пустую строку/строку только с пробелами/строку с переводами строк, будет зарегистрирован. messageExpression имеет доступ ко всем тем же переменным, что и
expression, за исключением 'authorizer' и 'authorizer.requestResource'. Пример: "object.x должен быть меньше max ("+string(params.max)+")" -
spec.validations.reason (string)
Reason представляет собой описание, понятное машине, причины ошибки валидации. Если это первая валидация в списке, которая завершилась ошибкой, эта причина, а также соответствующий код HTTP-ответа используются в HTTP-ответе клиенту. В настоящее время поддерживаются следующие причины: "Unauthorized", "Forbidden", "Invalid", "RequestEntityTooLarge". Если не задано, в ответе клиенту используется StatusReasonInvalid.
-
-
spec.variables ([]Variable)
Стратегия патчинга: слияние по ключу
nameКарта: уникальные значения по ключу name будут сохранены во время слияния
Переменные содержат определения переменных, которые могут использоваться в составе других выражений. Каждая переменная определяется как именованное выражение CEL. Переменные, определённые здесь, будут доступны по
variablesв других выражениях политики, кроме MatchConditions, поскольку MatchConditions оцениваются до остальной части политики.Выражение переменной может ссылаться на другие переменные, определённые ранее в списке, но не на те, что после. Таким образом, переменные должны быть отсортированы по порядку первого появления и быть ациклическими.
Переменная — это определение переменной, используемой для составления. Переменная определяется как именованное выражение.
-
spec.variables.expression (string), required
Выражение — это выражение, которое будет вычислено в качестве значения переменной. Выражение CEL имеет доступ к тем же идентификаторам, что и выражения CEL в Validation.
-
spec.variables.name (string), required
Имя — это имя переменной. Имя должно быть допустимым идентификатором CEL и уникальным среди всех переменных. К переменной можно обратиться в других выражениях через
variablesНапример, если имя — "foo", переменная будет доступна какvariables.foo
-
-
-
status (ValidatingAdmissionPolicyStatus)
Состояние ValidatingAdmissionPolicy, включая предупреждения, которые полезны для определения того, действует ли политика так, как ожидается. Заполняется системой. Только для чтения.
ValidatingAdmissionPolicyStatus представляет состояние политики валидации допуска.
-
status.conditions ([]Condition)
Карта: уникальные значения по ключу type будут сохранены во время слияния
Условие представляет собой последние доступные наблюдения за текущим состоянием политики.
Condition содержит подробности для одного аспекта текущего состояния этого ресурса API.
-
status.conditions.lastTransitionTime (Time), required
lastTransitionTime — это последнее время перехода условия из одного состояния в другое. Это должно быть время, когда изменилось базовое условие. Если это неизвестно, допустимо использовать время изменения поля API.
Time — это оболочка вокруг time.Time, которая поддерживает правильную сериализацию в YAML и JSON. Оболочки предоставлены для многих из фабричных методов, которые предлагает пакет времени.
-
status.conditions.message (string), required
message — это удобочитаемое сообщение, указывающее детали перехода. Оно может быть пустой строкой.
-
status.conditions.reason (string), required
reason содержит программно-понятный идентификатор, указывающий причину последнего перехода состояния. Продуценты определенных типов условий могут определить ожидаемые значения и их смысл для этого поля, а также то, считаются ли значения гарантированным API. Значение должно быть строкой с использованием CamelCase. Это поле не может быть пустым.
-
status.conditions.status (string), required
Состояние условия, одно из True, False, Unknown.
-
status.conditions.type (string), required
Тип условия в CamelCase или foo.example.com/CamelCase.
-
status.conditions.observedGeneration (int64)
observedGeneration представляет собой .metadata.generation, на основе которой было установлено условие. Например, если .metadata.generation в настоящее время равно 12, но .status.conditions[x].observedGeneration равно 9, условие устарело по отношению к текущему состоянию экземпляра.
-
-
status.observedGeneration (int64)
Генерирование, наблюдаемое контроллером.
-
status.typeChecking (TypeChecking)
Результаты проверки типов для каждого выражения. Наличие этого поля указывает на завершение проверки типов.
TypeChecking содержит результаты проверки типов выражений в ValidatingAdmissionPolicy
-
status.typeChecking.expressionWarnings ([]ExpressionWarning)
Атомарно: будет заменено во время слияния
Предупреждения проверки типов для каждого выражения.
ExpressionWarning — это предупреждающая информация, которая нацелена на конкретное выражение.
-
status.typeChecking.expressionWarnings.fieldRef (string), required
Путь к полю, которое ссылается на выражение. Например, ссылка на выражение первого элемента валидаций — "spec.validations[0].expression"
-
status.typeChecking.expressionWarnings.warning (string), required
Содержание информации о проверке типов в удобочитаемой форме. Каждая строка предупреждения содержит тип, против которого проверялось выражение, за которым следует ошибка проверки типа из компилятора.
-
-
-
Список привязок политики валидации допуска
ValidatingAdmissionPolicyBindingList — это список ValidatingAdmissionPolicyBinding.
-
Элементы ([]ValidatingAdmissionPolicyBinding), обязательный
Список PolicyBinding.
-
apiVersion (строка)
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
kind (строка)
Kind — строковое значение, представляющее REST-ресурс, который представляет этот объект. Серверы могут вывести это из конечной точки, к которой клиент отправляет запросы. Не может быть обновлено. В формате CamelCase. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
metadata (ListMeta)
Стандартные метаданные списка. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
© 2024 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2024 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/policy-resources/validating-admission-policy-binding-v1/