Spec-Zone.ru › Kubernetes

Политика проверки допуска

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

apiVersion: admissionregistration.k8s.io/v1

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

Политика проверки допуска

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

  • apiVersion: admissionregistration.k8s.io/v1

  • kind: Политика проверки допуска

  • metadata (ObjectMeta)

    Стандартные метаданные объекта; Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.

  • spec (ValidatingAdmissionPolicySpec)

    Спецификация желаемого поведения политики проверки допуска.

    ValidatingAdmissionPolicySpec — это спецификация желаемого поведения политики допуска.

    • spec.auditAnnotations ([]AuditAnnotation)

      Атомарно: будет заменено во время слияния

      auditAnnotations содержит выражения CEL, используемые для создания аннотаций аудита для события аудита запроса API. Валидации и auditAnnotations не могут быть одновременно пустыми; необходима хотя бы одна из валидаций или auditAnnotations.

      AuditAnnotation описывает, как создать аннотацию аудита для запроса API.

      • spec.auditAnnotations.key (string), обязательно

        key задаёт ключ аннотации аудита. Ключи аннотаций аудита политики проверки допуска должны быть уникальными. Ключ должен быть квалифицированным именем ([A-Za-z0-9][-A-Za-z0-9_.]*) длиной не более 63 байтов.

        Ключ комбинируется с именем ресурса политики проверки допуска для создания ключа аннотации аудита: "{имя политики проверки допуска}/{ключ}".

        Если веб-хук допуска использует то же имя ресурса, что и эта политика проверки допуска, и тот же ключ аннотации аудита, ключ аннотации будет идентичным. В этом случае первая аннотация, записанная с ключом, будет включена в событие аудита, а все последующие аннотации с тем же ключом будут отброшены.

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

      • spec.auditAnnotations.valueExpression (string), обязательно

        valueExpression представляет выражение, которое оценивается CEL для создания значения аннотации аудита. Выражение должно быть либо строкой, либо нулевым значением. Если выражение оценивается как строка, аннотация аудита включается со строковым значением. Если выражение оценивается как 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 — это список условий, которые должны быть выполнены для валидации запроса. Условия соответствия фильтруют запросы, которые уже были сопоставлены по правилам, селектору пространства имён и селектору объекта. Пустой список matchConditions соответствует всем запросам. Допускается не более 64 условий соответствия.

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

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

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

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

      • spec.matchConditions.expression (string), обязательно

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

        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 — это кортеж операций и ресурсов с 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' означает все подресурсы 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, и считается совпадением, если соответствует хотя бы один из объектов. Нулевой объект (oldObject в случае создания или newObject в случае удаления) или объект, не имеющий меток (например, DeploymentRollback или PodProxyOptions), не считается совпадением. Используйте селектор объекта только в том случае, если веб-хук является опциональным, так как конечные пользователи могут пропустить веб-хук приема, установив метки. По умолчанию пустой LabelSelector, который соответствует всему.

      • spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)

        Атомарно: будет заменено при слиянии

        ResourceRules описывает, какие операции с какими ресурсами/подресурсами соответствует ValidatingAdmissionPolicy. Политик обращает внимание на операцию, если она соответствует любому правилу.

        NamedRuleWithOperations — это кортеж операций и ресурсов с 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' означает все подресурсы 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 — это кортеж группы, типа и версии.

      • spec.paramKind.apiVersion (string)

        APIVersion — это группа и версия API, к которым относятся ресурсы. В формате "group/version". Обязательно.

      • spec.paramKind.kind (string)

        Kind — это тип API, к которому относятся ресурсы. Обязательно.

    • spec.validations ([]Validation)

      Atomic: будет заменено при слиянии

      Валидации содержат выражения 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

      Map: уникальные значения по ключу 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)

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

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

      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)

        Atomic: будет заменено при слиянии

        Предупреждения проверки типов для каждого выражения.

        ExpressionWarning - это предупреждающая информация, которая ориентирована на конкретное выражение.

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

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

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

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

СписокValidatingAdmissionPolicy

ValidatingAdmissionPolicyList - это список ValidatingAdmissionPolicy.

  • items ([]ValidatingAdmissionPolicy), required

    Список ValidatingAdmissionPolicy.

  • apiVersion (string)

    APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознаваемые схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

  • kind (string)

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

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

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

  • apiVersion (string)

    APIVersion определяет версию схемы этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

  • kind (string)

    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 — это набор операций и ресурсов с именами ресурсов.

        • 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 (string)

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

      • spec.matchResources.matchPolicy (string)

        matchPolicy определяет, как список "MatchResources" используется для сопоставления входящих запросов. Допустимые значения — "Exact" или "Equivalent".

        • Exact: сопоставить запрос только если он точно соответствует указанному правилу. Например, если развертывания можно изменить через apps/v1, apps/v1beta1 и extensions/v1beta1, но "правила" включали только apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запрос к apps/v1beta1 или extensions/v1beta1 не будет отправлен в ValidatingAdmissionPolicy.

        • Equivalent: сопоставить запрос, если он изменяет ресурс, указанный в правилах, даже через другую группу API или версию. Например, если развертывания можно изменить через apps/v1, apps/v1beta1 и extensions/v1beta1, и "правила" включали только 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), не считается совпадающим. Используйте селектор объекта только если веб-хук является дополнительным, поскольку конечные пользователи могут пропустить веб-хук доступа, установив метки. По умолчанию используется пустой LabelSelector, который соответствует всему.

      • spec.matchResources.resourceRules ([]NamedRuleWithOperations)

        Атомарно: будет заменено во время слияния

        ResourceRules описывает, какие операции над какими ресурсами/подресурсами соответствуют ValidatingAdmissionPolicy. Политика учитывает операцию, если она соответствует любому правилу.

        NamedRuleWithOperations — это набор операций и ресурсов с именами ресурсов.

        • 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 (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 является namespace-scoped.

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

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

        Параметр на основе пространства имён может быть использован, указав namespace-scoped paramKind в политике и оставив это поле пустым.

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

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

      • 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-предупреждений.

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

© 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-v1/

Spec-Zone.ru

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