ValidatingAdmissionPolicy v1alpha1
apiVersion: admissionregistration.k8s.io/v1alpha1
import "k8s.io/api/admissionregistration/v1alpha1"
ValidatingAdmissionPolicy
ValidatingAdmissionPolicy описывает определение политики валидации доступа, которая принимает или отклоняет объект без его изменения.
-
apiVersion: admissionregistration.k8s.io/v1alpha1
-
kind: ValidatingAdmissionPolicy
-
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 (string), required
key задаёт ключ аннотации аудита. Ключи аннотаций аудита ValidatingAdmissionPolicy должны быть уникальными. Ключ должен быть квалифицированным именем ([A-Za-z0-9][-A-Za-z0-9_.]*) длиной не более 63 байтов.
Ключ комбинируется с именем ресурса ValidatingAdmissionPolicy для создания ключа аннотации аудита: "{имя ValidatingAdmissionPolicy}/{ключ}".
Если вебхук допускает использование того же имени ресурса, что и этот ValidatingAdmissionPolicy, и того же ключа аннотации аудита, ключ аннотации будет идентичным. В этом случае первая аннотация, написанная с помощью ключа, будет включена в событие аудита, а все последующие аннотации с тем же ключом будут проигнорированы.
Обязательно.
-
spec.auditAnnotations.valueExpression (string), required
valueExpression представляет выражение, которое оценивается с помощью CEL для получения значения аннотации аудита. Выражение должно оцениваться в строковое или null значение. Если выражение оценивается в строку, аннотация аудита включается со строковым значением. Если выражение оценивается в null или пустую строку, аннотация аудита будет опущена. valueExpression может быть не длиннее 5 килобайт. Если результат valueExpression превышает 10 килобайт, он будет усечён до 10 килобайт.
Если несколько ресурсов ValidatingAdmissionPolicyBinding соответствуют запросу API, то valueExpression будет оцениваться для каждой связи. Все уникальные значения, созданные valueExpressions, будут объединены в список, разделённый запятыми.
Обязательно.
-
-
spec.failurePolicy (string)
failurePolicy определяет, как обрабатывать ошибки для политики допуска. Ошибки могут возникать из-за ошибок парсинга выражений CEL, ошибок проверки типов, ошибок выполнения, а также неверных или неправильно настроенных определений политики или связей.
Политика считается недействительной, если spec.paramKind относится к несуществующему типу. Связь считается недействительной, если spec.paramRef.name относится к несуществующему ресурсу.
failurePolicy не определяет, как обрабатываются проверки, которые оцениваются в false.
Если failurePolicy установлено в Fail, действия проверки ValidatingAdmissionPolicyBinding определяют, как обрабатывать ошибки.
Допустимые значения — Ignore или Fail. По умолчанию — Fail.
-
spec.matchConditions ([]MatchCondition)
Стратегия патча: слияние по ключу
nameКарта: уникальные значения по ключу name будут сохранены во время слияния
MatchConditions — список условий, которые должны быть выполнены для валидации запроса. Match conditions отфильтровывают запросы, которые уже были сопоставлены правилами, namespaceSelector и objectSelector. Пустой список matchConditions соответствует всем запросам. Максимальное количество match conditions — 64.
Если предоставлен объект параметра, к нему можно получить доступ через
paramsобработчик таким же образом, как к выражениям валидации.Точная логика сопоставления (в порядке):
- Если ЛЮБОЕ matchCondition оценивается как FALSE, политика пропускается.
- Если ВСЕ matchConditions оцениваются как TRUE, политика оценивается.
- Если какое-либо matchCondition оценивается как ошибка (но ни одно не является FALSE):
- Если failurePolicy=Fail, отклоните запрос
- Если failurePolicy=Ignore, политика пропускается
-
spec.matchConditions.expression (string), required
Expression представляет выражение, которое будет оцениваться с помощью CEL. Должно оцениваться как bool. Выражения CEL имеют доступ к содержимому AdmissionRequest и Authorizer, организованному в переменные CEL:
'object' — Объект из входящего запроса. Значение равно null для запросов DELETE. 'oldObject' — Существующий объект. Значение равно null для запросов CREATE. 'request' — Атрибуты запроса допуска ('/pkg/apis/admission/types.go#AdmissionRequest'). 'authorizer' — CEL Authorizer. Может использоваться для выполнения проверок авторизации для принципала (пользователя или сервисного аккаунта) запроса. См. 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 (string), required
Name — идентификатор для этого условия соответствия, используемый для стратегического слияния MatchConditions, а также для предоставления идентификатора для целей ведения журнала. Хорошее имя должно точно описывать связанное выражение. Имя должно быть квалифицированным именем, состоящим из буквенно-цифровых символов, '-', '' или '.', и должно начинаться и заканчиваться буквенно-цифровым символом (например, 'MyName', или 'my.name', или '123-abc', используемый для проверки regex '([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 — это кортеж из операций и ресурсов с именами ресурсов.
-
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' означает подресурс log для pods. '' означает все ресурсы, но не подресурсы. 'pods/' означает все подресурсы pods. '*/scale' означает все подресурсы scale. '*/*' означает все ресурсы и их подресурсы.
Если присутствует символ подстановки, правило валидации будет гарантировать, что ресурсы не перекрываются друг с другом.
В зависимости от содержащего объекта, подресурсы могут быть не разрешены. Обязательно.
-
spec.matchConstraints.excludeResourceRules.scope (string)
scope указывает область действия этого правила. Допустимые значения: "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что нет ограничений на область действия. Подресурсы соответствуют области действия своего родительского ресурса. По умолчанию "*".
-
-
spec.matchConstraints.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.matchConstraints.namespaceSelector (LabelSelector)
NamespaceSelector определяет, нужно ли запускать политику контроля доступа к объекту на основе того, соответствует ли пространство имён для этого объекта селектору. Если сам объект является пространством имён, сопоставление выполняется по меткам объекта object.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 оценивается для как для oldObject, так и для newObject, которые будут отправлены в CEL-валидацию, и считается, что он соответствует, если соответствует хотя бы один из объектов. Объект null (oldObject в случае создания или newObject в случае удаления) или объект, который не может иметь метки (например, DeploymentRollback или PodProxyOptions), не считается соответствующим. Используйте селектор объекта только в том случае, если веб-хук является опциональным, потому что конечные пользователи могут пропустить адмиссионный веб-хук, установив метки. По умолчанию пустой LabelSelector, который соответствует всему.
-
spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)
Атомарно: будет заменено во время слияния
ResourceRules описывает, какие операции над какими ресурсами/подресурсами соответствуют ValidatingAdmissionPolicy. Политика учитывает операцию, если она соответствует любому правилу.
NamedRuleWithOperations — это кортеж из операций и ресурсов с именами ресурсов.
-
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' означает подресурс log для pods. '' означает все ресурсы, но не подресурсы. 'pods/' означает все подресурсы pods. '*/scale' означает все подресурсы scale. '*/*' означает все ресурсы и их подресурсы.
Если присутствует символ подстановки, правило валидации будет гарантировать, что ресурсы не перекрываются друг с другом.
В зависимости от содержащего объекта, подресурсы могут быть не разрешены. Обязательно.
-
spec.matchConstraints.resourceRules.scope (string)
scope указывает область действия этого правила. Допустимые значения: "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что нет ограничений на область действия. Подресурсы соответствуют области действия своего родительского ресурса. По умолчанию "*".
-
-
-
spec.paramKind (ParamKind)
ParamKind указывает тип ресурсов, используемых для параметризации этой политики. Если отсутствует, параметры для этой политики отсутствуют, и переменная CEL param не будет предоставлена выражениям валидации. Если ParamKind ссылается на несуществующий тип, это определение политики неправильно настроено, и применяется политика FailurePolicy. Если paramKind указан, но paramRef не задан в ValidatingAdmissionPolicyBinding, переменная params будет null.
ParamKind — это кортеж из группы, типа и версии.
-
spec.paramKind.apiVersion (string)
APIVersion — это группа API-версия, к которой относятся ресурсы. В формате "group/version". Обязательно.
-
spec.paramKind.kind (string)
Kind — это тип API-ресурсов. Обязательно.
-
-
-
spec.validations ([]Validation)
Атомарно: будет заменено во время слияния
Валидации содержат выражения CEL, используемые для применения валидации. Валидации и AuditAnnotations не могут быть обе пусты; требуется минимум одна из Validations или AuditAnnotations.
Валидация определяет выражение CEL, используемое для применения валидации.
-
spec.validations.expression (строка), обязательно
Выражение представляет выражение, которое будет вычислено CEL. См.: https://github.com/google/cel-spec Выражения CEL имеют доступ к содержимому запроса/ответа API, организованному в переменные CEL, а также к некоторым другим полезным переменным:
- 'object' - Объект из входящего запроса. Значение равно null для запросов DELETE. - 'oldObject' - Существующий объект. Значение равно null для запросов CREATE. - 'request' - Атрибуты запроса API(ссылка). - 'params' - Ресурс параметра, на который ссылается связывание политики, которое оценивается. Заполняется только если политика имеет ParamKind. - 'authorizer' - CEL Authorizer. Может использоваться для выполнения проверок авторизации для принципала (пользователя или сервисного аккаунта) запроса. См. https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
- 'authorizer.requestResource' - CEL ResourceCheck, построенный из 'authorizer' и сконфигурированный с ресурсом запроса.
apiVersion,kind,metadata.nameиmetadata.generateNameвсегда доступны из корня объекта. Другие свойства метаданных недоступны.Доступны только имена свойств вида
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*. Доступные имена свойств экранируются в соответствии со следующими правилами при доступе в выражении: - '' экранируется в 'underscores' - '.' экранируется в 'dot' - '-' экранируется в 'dash' - '/' экранируется в 'slash' - Имена свойств, которые точно совпадают с зарезервированным ключевым словом 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 (строка)
Сообщение представляет собой сообщение, отображаемое при ошибке валидации. Сообщение обязательно, если выражение содержит переводы строк. Сообщение не должно содержать переводов строк. Если не задано, сообщение — "ошибка правила: {Правило}". Например: "должен быть URL с хостом, соответствующим spec.host" Если выражение содержит переводы строк. Сообщение обязательно. Сообщение не должно содержать переводов строк. Если не задано, сообщение — "ошибка выражения: {Выражение}".
-
spec.validations.messageExpression (строка)
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 (строка)
Reason представляет собой удобочитаемое описание причины ошибки валидации. Если это первая валидация в списке, которая завершилась ошибкой, это reason, а также соответствующий HTTP-код ответа используются в HTTP-ответе клиенту. В настоящее время поддерживаются причины: "Unauthorized", "Forbidden", "Invalid", "RequestEntityTooLarge". Если не задано, в ответе клиенту используется StatusReasonInvalid.
-
-
status (ValidatingAdmissionPolicyStatus)
Статус ValidatingAdmissionPolicy, включая предупреждения, полезные для определения, ведет ли себя политика так, как ожидалось. Заполняется системой. Только для чтения.
ValidatingAdmissionPolicyStatus представляет собой статус ValidatingAdmissionPolicy.
-
status.conditions ([]Condition)
Карта: уникальные значения по типу ключа будут сохранены во время слияния
Условие представляет собой последние доступные наблюдения текущего состояния политики.
Condition содержит данные для одного аспекта текущего состояния этого ресурса API.
-
status.conditions.lastTransitionTime (Time), обязательно
lastTransitionTime — это последнее время, когда условие перешло из одного состояния в другое. Это должно быть время, когда изменилось базовое условие. Если это неизвестно, допустимо использовать время, когда изменилось поле API.
Time — это оболочка вокруг time.Time, которая поддерживает правильное кодирование в YAML и JSON. Оболочки предоставляются для многих фабричных методов, которые предлагает пакет времени.
-
status.conditions.message (строка), обязательно
message — это удобочитаемое сообщение, указывающее подробности о переходе. Это может быть пустая строка.
-
status.conditions.reason (строка), обязательно
reason содержит программно определяемый идентификатор, указывающий причину последнего перехода состояния. Продуценты конкретных типов условий могут определять ожидаемые значения и их значения для этого поля и того, считаются ли они гарантированным API. Значение должно быть строкой в CamelCase. Это поле не должно быть пустым.
-
status.conditions.status (строка), обязательно
состояние условия, одно из True, False, Unknown.
-
status.conditions.type (строка), обязательно
тип условия в 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 (строка), обязательно
Путь к полю, ссылающемуся на выражение. Например, ссылка на выражение первого элемента validations — "spec.validations[0].expression"
-
status.typeChecking.expressionWarnings.warning (строка), обязательно
Содержимое информации о проверке типов в удобочитаемой форме. Каждая строка предупреждения содержит тип, против которого проверяется выражение, за которым следует ошибка проверки типа из компилятора.
-
-
-
-
-
status (ValidatingAdmissionPolicyStatus)
Статус ValidatingAdmissionPolicy, включая предупреждения, полезные для определения, ведет ли себя политика так, как ожидалось. Заполняется системой. Только для чтения.
ValidatingAdmissionPolicyStatus представляет собой статус ValidatingAdmissionPolicy.
ValidatingAdmissionPolicyList
ValidatingAdmissionPolicyList — это список ValidatingAdmissionPolicy.
-
apiVersion (строка)
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
items ([]ValidatingAdmissionPolicy)
Список ValidatingAdmissionPolicy.
-
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
ValidatingAdmissionPolicyBinding
ValidatingAdmissionPolicyBinding связывает ValidatingAdmissionPolicy с параметризованными ресурсами. ValidatingAdmissionPolicyBinding и параметризованные CRD вместе определяют, как администраторы кластера настраивают политики для кластеров.
-
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 (ValidatingAdmissionPolicyBindingSpec)
Описание желаемого поведения привязки ValidatingAdmissionPolicyBinding.
ValidatingAdmissionPolicyBindingSpec — это описание привязки ValidatingAdmissionPolicyBinding.
-
spec.matchResources (MatchResources)
MatchResources определяет, какие ресурсы соответствуют этой привязке и будут проверены ею. Обратите внимание, что это пересекается с matchConstraints политики, поэтому только запросы, соответствующие политике, могут быть выбраны для проверки. Если это не задано, все ресурсы, соответствующие политике, проверяются этой привязкой. Когда resourceRules не заданы, это не ограничивает соответствие ресурсов. Если ресурс соответствует другим полям этого объекта, он будет проверен. Обратите внимание, что это отличается от matchConstraints ValidatingAdmissionPolicy, где 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' означает все подресурсы scale. '*/*' означает все ресурсы и их подресурсы.
Если дикий символ присутствует, правило проверки ресурсов будет гарантировать, что ресурсы не пересекаются друг с другом.
В зависимости от содержащего объекта, подресурсы могут быть недоступны. Обязательное поле.
-
spec.matchResources.excludeResourceRules.scope (string)
scope указывает область действия этого правила. Допустимые значения — "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что ограничений по области действия нет. Подресурсы соответствуют области действия своего родительского ресурса. По умолчанию — "*".
-
-
spec.matchResources.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.matchResources.namespaceSelector (LabelSelector)
NamespaceSelector определяет, следует ли запускать политику контроля доступа к объекту на основе того, соответствует ли пространство имён для этого объекта селектору. Если сам объект является пространством имён, сопоставление выполняется на метках объекта object.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, и считается соответствующим, если хотя бы один из объектов соответствует селектору. Нулевой объект (oldObject в случае создания или newObject в случае удаления) или объект, который не может иметь метки (например, DeploymentRollback или PodProxyOptions), не считается соответствующим. Используйте селектор объекта только в том случае, если веб-хук является opt-in, поскольку конечные пользователи могут пропустить веб-хук проверки доступа, установив метки. По умолчанию — пустой 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' означает все подресурсы scale. '*/*' означает все ресурсы и их подресурсы.
Если дикий символ присутствует, правило проверки ресурсов будет гарантировать, что ресурсы не пересекаются друг с другом.
В зависимости от содержащего объекта, подресурсы могут быть недоступны. Обязательное поле.
-
spec.matchResources.resourceRules.scope (string)
scope указывает область действия этого правила. Допустимые значения — "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что ограничений по области действия нет. Подресурсы соответствуют области действия своего родительского ресурса. По умолчанию — "*".
-
-
-
spec.paramRef (ParamRef)
ParamRef указывает параметр ресурса, используемый для конфигурации политики контроля доступа. Он должен указывать на ресурс типа, указанного в ParamKind привязанной ValidatingAdmissionPolicy. Если политика указывает ParamKind, а ресурс, на который ссылается ParamRef, не существует, эта привязка считается неправильно настроенной, и применяется FailurePolicy ValidatingAdmissionPolicy.
ParamRef ссылается на параметр ресурса
-
spec.paramRef.name (string)
Имя ссылаемого ресурса.
-
spec.paramRef.namespace (string)
Пространство имён ссылаемого ресурса. Должно быть пустым для ресурсов уровня кластера.
-
-
spec.policyName (string)
PolicyName ссылается на имя ValidatingAdmissionPolicy, к которому привязана ValidatingAdmissionPolicyBinding. Если ссылаемый ресурс не существует, эта привязка считается недействительной и будет проигнорирована. Обязательное поле.
-
-
spec.validationActions ([]string)
Установка: уникальные значения будут сохранены при слиянии
validationActions определяет, как применяются проверки ValidatingAdmissionPolicy, на которую ссылаются. Если проверка возвращает false, она всегда применяется в соответствии с этими действиями.
Ошибки, определенные политикой 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-предупреждений.
Обязательное поле.
-
© 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2022 The Linux Foundation ®. All rights reserved.
https://v1-27.docs.kubernetes.io/docs/reference/kubernetes-api/extend-resources/validating-admission-policy-v1alpha1/