Spec-Zone.ru › Kubernetes 1.28

ValidatingAdmissionPolicy v1beta1

ValidatingAdmissionPolicy описывает определение политики валидации допуска, которая принимает или отклоняет объект без его изменения.

apiVersion: admissionregistration.k8s.io/v1beta1

import "k8s.io/api/admissionregistration/v1beta1"

ValidatingAdmissionPolicy

ValidatingAdmissionPolicy описывает определение политики валидации допуска, которая принимает или отклоняет объект без его изменения.

  • apiVersion: admissionregistration.k8s.io/v1beta1

  • 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 относится к несуществующему 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 обработку так же, как и к выражениям валидации.

      Точный алгоритм сопоставления (по порядку):

      1. Если ЛЮБОЕ matchCondition оценивается как FALSE, политика пропускается.
      2. Если ВСЕ matchConditions оцениваются как TRUE, политика оценивается.
      3. Если какое-либо matchCondition оценивается как ошибка (но ни одно не является FALSE):
        • Если failurePolicy=Fail, отклоните запрос
        • Если failurePolicy=Ignore, политика пропускается

      MatchCondition представляет собой условие, которое должно быть выполнено для отправки запроса на веб-хук.

      • 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', используемый для валидации регулярное выражение — '([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 не могут быть одновременно пустыми; требуется минимум одна Валидация или AuditAnnotation.

      Валидация определяет выражение CEL, используемое для применения валидации.

      • spec.validations.expression (строка), обязательно

        Выражение представляет выражение, которое будет вычислено 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, экранируются в '{ключевое слово}__'. Ключевые слова: "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 представляет собой удобочитаемое описание того, почему произошла ошибка валидации. Если это первая валидация в списке, которая не прошла, то это сообщение, а также соответствующий код HTTP-ответа используются в HTTP-ответе клиенту. В настоящее время поддерживаются причины: "Unauthorized", "Forbidden", "Invalid", "RequestEntityTooLarge". Если не задано, используется StatusReasonInvalid в ответе клиенту.

    • spec.variables ([]Variable)

      Стратегия патчинга: слияние по ключу name

      Карта: уникальные значения по ключу name будут сохранены во время слияния

      Переменные содержат определения переменных, которые могут быть использованы в композиции других выражений. Каждая переменная определяется как именованное выражение CEL. Переменные, определённые здесь, будут доступны под variables в других выражениях политики, за исключением MatchConditions, так как MatchConditions вычисляются до остальной части политики.

      Выражение переменной может ссылаться на другие переменные, определенные ранее в списке, но не на те, которые расположены после. Таким образом, переменные должны быть отсортированы по порядку первого появления и быть ацикличными.

      Переменная — это определение переменной, используемой для композиции. Переменная определяется как именованное выражение.

      • spec.variables.expression (строка), обязательно

        Выражение — это выражение, которое будет вычислено как значение переменной. Выражение CEL имеет доступ к тем же идентификаторам, что и выражения CEL в Validation.

      • spec.variables.name (строка), обязательно

        Имя — это имя переменной. Имя должно быть допустимым идентификатором CEL и уникальным среди всех переменных. Переменная может быть обращена в других выражениях через variables. Например, если имя — "foo", переменная будет доступна как variables.foo.

  • status (ValidatingAdmissionPolicyStatus)

    Состояние ValidatingAdmissionPolicy, включая предупреждения, которые полезны для определения, ведет ли себя политика ожидаемым образом. Заполняется системой. Только для чтения.

    ValidatingAdmissionPolicyStatus представляет состояние политики валидации доступа.

    • status.conditions ([]Condition)

      Карта: уникальные значения по ключу type будут сохранены во время слияния

      Условия представляют собой последние доступные наблюдения текущего состояния политики.

      Condition содержит подробности для одного аспекта текущего состояния данного ресурса API.

      • status.conditions.lastTransitionTime (Time), обязательно

        lastTransitionTime — это последнее время перехода условия из одного состояния в другое. Это должно быть время, когда базовое условие изменилось. Если это неизвестно, можно использовать время изменения поля API.

        Time — это оболочка вокруг time.Time, которая поддерживает правильную сериализацию в YAML и JSON. Оболочки предоставляются для многих фабричных методов пакета time.

      • 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 (строка), обязательно

          Путь к полю, которое ссылается на выражение. Например, ссылка на выражение первого элемента валидаций — "spec.validations[0].expression"

        • status.typeChecking.expressionWarnings.warning (строка), обязательно

          Содержание информации о проверке типов в удобочитаемой форме. Каждая строка предупреждения содержит тип, к которому проверяется выражение, за которым следует ошибка проверки типа из компилятора.

  • status.observedGeneration (int64)

    Сгенерированное состояние, наблюдаемое контроллером.

  • status.typeChecking (TypeChecking)

    Результаты проверки типов для каждого выражения. Наличие этого поля указывает на завершение проверки типов.

    TypeChecking содержит результаты проверки типов выражений в ValidatingAdmissionPolicy

  • СписокValidatingAdmissionPolicy

    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 и параметризованные CRD вместе определяют, как администраторы кластера настраивают политики для кластеров.

    Для заданного запроса допуска каждая привязка приведет к оценке его политики N раз, где N равно 1 для политик/привязок, которые не используют параметры, в противном случае N равно числу параметров, выбранных привязкой.

    Выражения CEL политики должны иметь вычисленную стоимость CEL ниже максимального бюджета CEL. Каждой оценке политики предоставляется независимый бюджет стоимости CEL. Добавление/удаление политик, привязок или параметров не может повлиять на то, находится ли данная комбинация (политика, привязка, параметр) в пределах своего бюджета CEL.

    • 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 это не ограничивает соответствие ресурсам. Если ресурс соответствует другим полям этого объекта, он будет проверен. Обратите внимание, что это отличается от 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' означает подресурс log pods. '*' означает все ресурсы, но не подресурсы. 'pods/*' означает все подресурсы pods. '* /scale' означает все подресурсы scale. '*/*' означает все ресурсы и их подресурсы.

            Если присутствует символ подстановки, правило проверки ресурсов будет гарантировать, что ресурсы не пересекаются друг с другом.

            В зависимости от содержащего объекта подресурсы могут быть недоступны. Требуется.

          • spec.matchResources.excludeResourceRules.scope (строка)

            scope указывает область действия этого правила. Допустимые значения: "Cluster", "Namespaced" и "*". "Cluster" означает, что этому правилу будут соответствовать только ресурсы уровня кластера. Объекты API пространства имен являются ресурсами уровня кластера. "Namespaced" означает, что этому правилу будут соответствовать только ресурсы пространства имен. "*" означает, что нет ограничений по области действия. Подресурсы соответствуют области действия своего родительского ресурса. По умолчанию — "*".

        • spec.matchResources.matchPolicy (строка)

          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 определяет, следует ли запускать политику контроля доступа к объекту на основе того, соответствует ли пространство имен для этого объекта селектору. Если сам объект является пространством имен, сопоставление выполняется по 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 оценивается для both старого объекта и нового объекта, которые будут отправлены для проверки cel, и считается, что он соответствует, если любой из объектов соответствует селектору. Нулевой объект (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' означает подресурс log pods. '*' означает все ресурсы, но не подресурсы. 'pods/*' означает все подресурсы pods. '* /scale' означает все подресурсы scale. '*/*' означает все ресурсы и их подресурсы.

            Если присутствует символ подстановки, правило проверки ресурсов будет гарантировать, что ресурсы не пересекаются друг с другом.

            В зависимости от содержащего объекта подресурсы могут быть недоступны. Требуется.

          • spec.matchResources.resourceRules.scope (строка)

            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 имеет область действия namespace.

        • spec.paramRef.namespace (строка)

          namespace — это пространство имен ссылаемого ресурса. Позволяет ограничить поиск параметров определённым пространством имён. Применимо к полям name и selector.

          Параметр на уровне пространства имен может быть использован путём указания paramKind с областью действия namespace в политике и оставления этого поля пустым.

          • Если paramKind имеет область действия кластера, это поле ДОЛЖНО быть не установлено. Установка этого поля приводит к ошибке конфигурации.

          • Если paramKind имеет область действия пространства имён, пространство имён объекта, оцениваемого на предмет допуска, будет использоваться, когда это поле не установлено. Обратите внимание, что если это поле оставлено пустым, привязка не должна соответствовать ресурсам с областью действия кластера, что приведёт к ошибке.

        • spec.paramRef.parameterNotFoundAction (строка)

          parameterNotFoundAction управляет поведением привязки, когда ресурс существует, а имя или селектор допустимы, но нет параметров, соответствующих привязке. Если значение установлено в Allow, то несоответствующие параметры будут считаться успешной валидацией привязкой. Если установлено в Deny, то несоответствующие параметры не будут подвергнуты действию failurePolicy политики.

          Допустимые значения — Allow или Deny.

          Обязательно

        • spec.paramRef.selector (LabelSelector)

          selector может использоваться для сопоставления нескольких объектов параметра на основе их меток. Установка selector: {} сопоставит все ресурсы ParamKind.

          Если найдено несколько параметров, все они оцениваются с помощью выражений политики, а результаты объединяются по логике И.

          Должно быть установлено одно из name или selector, но name и selector являются взаимоисключающими свойствами. Если одно из них установлено, другое должно быть не установлено.

      • spec.policyName (строка)

        PolicyName ссылается на имя ValidatingAdmissionPolicy, к которому привязана ValidatingAdmissionPolicyBinding. Если ссылаемый ресурс не существует, эта привязка считается недопустимой и будет проигнорирована. Обязательно.

      • spec.validationActions ([]строка)

        При слиянии сохраняются уникальные значения

        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.

        Обязательно.

    © 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
    Copyright © 2022 The Linux Foundation ®. All rights reserved.
    https://v1-28.docs.kubernetes.io/docs/reference/kubernetes-api/extend-resources/validating-admission-policy-v1beta1/

    Spec-Zone.ru

    Настройки Оффлайн Что нового Помощь О нас
    Spec-Zone .ru
    спецификации, руководства, описания, API