ValidatingAdmissionPolicyBinding
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingAdmissionPolicyBinding
ValidatingAdmissionPolicyBinding 将 ValidatingAdmissionPolicy 与参数化资源绑定。ValidatingAdmissionPolicyBinding 和参数 CRD 一起定义了集群管理员如何为集群配置策略。
对于给定的准入请求,每个绑定都会导致其策略被评估 N 次,其中 N 是不使用参数的策略/绑定的次数,否则 N 是绑定所选参数的数量。
策略的 CEL 表达式的计算 CEL 成本必须低于最大 CEL 预算。策略的每次评估都将获得独立的 CEL 成本预算。添加/删除策略、绑定或参数不会影响给定(策略、绑定、参数)组合是否在其自己的 CEL 预算内。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata (ObjectMeta)
标准对象元数据;更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
spec (ValidatingAdmissionPolicyBindingSpec)
ValidatingAdmissionPolicyBinding 的期望行为的规范。
ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规范。
spec.matchResources (MatchResources)
MatchResources 声明了哪些资源匹配此绑定,并将由其进行验证。请注意,这会与策略的 matchConstraints 相交,因此只有被策略匹配的请求才能被此绑定选中。如果此项未设置,则策略匹配的所有资源都将由此绑定进行验证。当 resourceRules 未设置时,它不会约束资源匹配。如果资源被此对象的其他字段匹配,它将被验证。请注意,这与 ValidatingAdmissionPolicy 的 matchConstraints 不同,后者要求 resourceRules。
MatchResources 根据对象是否满足匹配条件来决定是否对该对象运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)。
spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)
原子性:在合并期间将被替换
ExcludeResourceRules 描述 ValidatingAdmissionPolicy 不应关心哪些资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)
NamedRuleWithOperations 是带有 ResourceNames 的 Operations 和 Resources 的元组。
spec.matchResources.excludeResourceRules.apiGroups ([]string)
原子性:在合并期间将被替换
APIGroups 是资源所属的 API 组。'' 表示所有组。如果存在 '',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.apiVersions ([]string)
原子性:在合并期间将被替换
APIVersions 是资源所属的 API 版本。'' 表示所有版本。如果存在 '',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.operations ([]string)
原子性:在合并期间将被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.resourceNames ([]string)
原子性:在合并期间将被替换
ResourceNames 是规则适用的可选名称白名单。空集表示允许所有内容。
spec.matchResources.excludeResourceRules.resources ([]string)
原子性:在合并期间将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 指代 pod。'pods/log' 指代 pod 的 log 子资源。'' 指代所有资源,但不包括子资源。'pods/' 指代 pod 的所有子资源。'/scale' 指代所有 scale 子资源。'/*' 指代所有资源及其子资源。
如果存在通配符,则验证规则将确保资源彼此不重叠。
根据包围对象,可能不允许子资源。必需。
spec.matchResources.excludeResourceRules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"(集群)、"Namespaced"(命名空间)和 ""(所有)。"Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源会匹配此规则。"" 表示没有范围限制。子资源匹配其父资源的范围。默认值为 "*"。
spec.matchResources.matchPolicy (string)
matchPolicy 定义如何使用 "MatchResources" 列表来匹配传入请求。允许的值为 "Exact" 或 "Equivalent"。
Exact: 仅当请求精确匹配指定规则时才匹配。例如,如果部署可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 进行修改,而 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,那么对 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送到 ValidatingAdmissionPolicy。Equivalent: 如果修改了规则中列出的资源,即使是通过其他 API 组或版本,也会匹配请求。例如,如果部署可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 进行修改,而 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,那么对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 发送到 ValidatingAdmissionPolicy。
默认为 "Equivalent"
spec.matchResources.namespaceSelector (LabelSelector)
NamespaceSelector 决定是否根据该对象所属的命名空间是否匹配选择器来运行准入控制策略。如果对象本身是命名空间,则匹配在 object.metadata.labels 上执行。如果对象是其他集群范围的资源,它将永远不会跳过策略。
例如,要在任何不与 "runlevel" 的 "0" 或 "1" 关联的对象上运行 webhook,您将设置选择器如下:"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
如果相反,您只想在任何与 "environment" 的 "prod" 或 "staging" 关联的对象上运行策略,您将设置选择器如下:"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
有关标签选择器的更多示例,请参阅 https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/。
默认为空 LabelSelector,它匹配所有内容。
spec.matchResources.objectSelector (LabelSelector)
ObjectSelector 决定是否根据对象是否具有匹配的标签来运行验证。objectSelector 将针对发送到 cel 验证的 oldObject 和 newObject 进行评估,如果任一对象匹配选择器,则视为匹配。空对象(创建时的 oldObject,或删除时的 newObject)或不能有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 webhook 是选择加入(opt-in)时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 webhook。默认为空的 LabelSelector,匹配所有内容。
spec.matchResources.resourceRules ([]NamedRuleWithOperations)
原子性:在合并期间将被替换
ResourceRules 描述 ValidatingAdmissionPolicy 匹配哪些资源/子资源上的哪些操作。如果操作匹配任何规则,则策略会关心该操作。
NamedRuleWithOperations 是带有 ResourceNames 的 Operations 和 Resources 的元组。
spec.matchResources.resourceRules.apiGroups ([]string)
原子性:在合并期间将被替换
APIGroups 是资源所属的 API 组。'' 表示所有组。如果存在 '',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.apiVersions ([]string)
原子性:在合并期间将被替换
APIVersions 是资源所属的 API 版本。'' 表示所有版本。如果存在 '',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.operations ([]string)
原子性:在合并期间将被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.resourceNames ([]string)
原子性:在合并期间将被替换
ResourceNames 是规则适用的可选名称白名单。空集表示允许所有内容。
spec.matchResources.resourceRules.resources ([]string)
原子性:在合并期间将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 指代 pod。'pods/log' 指代 pod 的 log 子资源。'' 指代所有资源,但不包括子资源。'pods/' 指代 pod 的所有子资源。'/scale' 指代所有 scale 子资源。'/*' 指代所有资源及其子资源。
如果存在通配符,则验证规则将确保资源彼此不重叠。
根据包围对象,可能不允许子资源。必需。
spec.matchResources.resourceRules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"(集群)、"Namespaced"(命名空间)和 ""(所有)。"Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源会匹配此规则。"" 表示没有范围限制。子资源匹配其父资源的范围。默认值为 "*"。
spec.paramRef (ParamRef)
paramRef 指定用于配置准入控制策略的参数资源。它应该指向绑定到的 ValidatingAdmissionPolicy 的 ParamKind 中指定的资源类型。如果策略指定了 ParamKind,并且 ParamRef 引用的资源不存在,则此绑定被视为配置错误,并且将应用 ValidatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,则忽略此字段,并且在没有参数的情况下评估规则。
ParamRef 描述如何定位要用作策略绑定应用规则表达式输入的参数。
spec.paramRef.name (string)
name 是被引用资源的名称。
name
或selector
之一必须设置,但name
和selector
是互斥属性。如果一个设置,另一个必须取消设置。可以通过设置
name
字段,将selector
留空,并在paramKind
为命名空间范围时设置命名空间来为所有准入请求配置单个参数。spec.paramRef.namespace (string)
namespace 是引用资源的命名空间。允许将参数搜索限制在特定命名空间。适用于
name
和selector
字段。可以通过在策略中指定命名空间范围的
paramKind
并将此字段留空来使用每个命名空间参数。如果
paramKind
是集群范围的,则此字段必须未设置。设置此字段会导致配置错误。如果
paramKind
是命名空间作用域的,并且此字段留空,则在评估准入对象时将使用该对象的命名空间。请注意,如果留空,绑定不得匹配任何集群范围的资源,否则将导致错误。
spec.paramRef.parameterNotFoundAction (string)
parameterNotFoundAction
控制绑定在资源存在、名称或选择器有效但没有参数匹配绑定时的行为。如果值设置为Allow
,则未匹配的参数将被视为绑定成功验证。如果设置为Deny
,则未匹配的参数将受到策略failurePolicy
的约束。允许的值为
Allow
或Deny
必需
spec.paramRef.selector (LabelSelector)
selector 可用于根据其标签匹配多个参数对象。提供 selector: {} 以匹配 ParamKind 的所有资源。
如果找到多个参数,它们都将使用策略表达式进行评估,结果将进行 AND 运算。
name
或selector
之一必须设置,但name
和selector
是互斥属性。如果一个设置,另一个必须取消设置。
spec.policyName (string)
PolicyName 引用 ValidatingAdmissionPolicyBinding 所绑定的 ValidatingAdmissionPolicy 名称。如果引用的资源不存在,则此绑定被视为无效并将被忽略。必需。
spec.validationActions ([]string)
Set: 合并时将保留唯一值
validationActions 声明引用的 ValidatingAdmissionPolicy 的 Validations 如何执行。如果验证评估为 false,则始终根据这些操作执行。
ValidatingAdmissionPolicy 的 FailurePolicy 定义的失败仅在 FailurePolicy 设置为 Fail 时根据这些操作执行,否则失败将被忽略。这包括编译错误、运行时错误和策略的配置错误。
validationActions 被声明为一组操作值。顺序无关紧要。validationActions 可能不包含相同的操作的重复项。
支持的操作值如下:
"Deny" 指定验证失败将导致请求被拒绝。
"Warn" 指定验证失败将报告给请求客户端的 HTTP Warning 标头,警告代码为 299。警告可以同时用于允许或拒绝的准入响应。
"Audit" 指定验证失败将包含在请求的已发布审计事件中。审计事件将包含一个
validation.policy.admission.k8s.io/validation_failure
审计注解,其值包含验证失败的详细信息,格式为 JSON 对象列表,每个对象具有以下字段:- message: 验证失败消息字符串- policy: ValidatingAdmissionPolicy 的资源名称- binding: ValidatingAdmissionPolicyBinding 的资源名称- expressionIndex: ValidatingAdmissionPolicy 中失败验证的索引- validationActions: 为验证失败而采取的执行操作 示例审计注解:"validation.policy.admission.k8s.io/validation_failure": "[{\"message\": \"Invalid value\", {\"policy\": \"policy.example.com\", {\"binding\": \"policybinding.example.com\", {\"expressionIndex\": \"1\", {\"validationActions\": [\"Audit\"]}]"
客户端应预期通过忽略任何不识别的值来处理其他值。
"Deny" 和 "Warn" 不能一起使用,因为这种组合不必要地重复了 API 响应体和 HTTP 警告标头中的验证失败。
必需。
ValidatingAdmissionPolicy
ValidatingAdmissionPolicy 描述了准入验证策略的定义,该策略接受或拒绝对象而不对其进行更改。
apiVersion (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 (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 name}/{key}"。
如果准入 webhook 使用与此 ValidatingAdmissionPolicy 相同的资源名称和相同的审计注解键,则注解键将相同。在这种情况下,第一个带有该键的注解将被包含在审计事件中,所有后续带有相同键的注解将被丢弃。
必需。
spec.auditAnnotations.valueExpression (string), required
valueExpression 代表由 CEL 评估以生成审计注解值的表达式。该表达式必须评估为字符串或 null 值。如果表达式评估为字符串,则审计注解将包含字符串值。如果表达式评估为 null 或空字符串,则将省略审计注解。valueExpression 的长度不能超过 5kb。如果 valueExpression 的结果长度超过 10kb,则会被截断为 10kb。
如果多个 ValidatingAdmissionPolicyBinding 资源匹配 API 请求,则将为每个绑定评估 valueExpression。通过 valueExpressions 生成的所有唯一值将以逗号分隔的列表连接。
必需。
spec.failurePolicy (string)
failurePolicy 定义了如何处理准入策略的失败。失败可能来自 CEL 表达式解析错误、类型检查错误、运行时错误以及无效或配置错误的策略定义或绑定。
如果 spec.paramKind 引用了不存在的 Kind,则策略无效。如果 spec.paramRef.name 引用了不存在的资源,则绑定无效。
failurePolicy 不定义如何处理评估为 false 的验证。
当 failurePolicy 设置为 Fail 时,ValidatingAdmissionPolicyBinding 的 validationActions 定义了如何执行失败。
允许的值为 Ignore 或 Fail。默认为 Fail。
spec.matchConditions ([]MatchCondition)
补丁策略:在键
name
上合并映射:合并时将保留键名上的唯一值
MatchConditions 是请求匹配此规则(在规则、namespaceSelector 和 objectSelector 已匹配后)必须满足的条件列表。一个空的 matchConditions 列表匹配所有请求。最多允许 64 个 match conditions。
如果提供了参数对象,可以通过
params
句柄以与验证表达式相同的方式访问它。确切的匹配逻辑是(按顺序)
- 如果任何 matchCondition 评估为 FALSE,则跳过策略。
- 如果所有 matchConditions 评估为 TRUE,则评估策略。
- 如果任何 matchCondition 评估为错误(但没有一个为 FALSE)
- 如果 failurePolicy=Fail,则拒绝请求
- 如果 failurePolicy=Ignore,则跳过策略
MatchCondition 表示 Webhook 必须满足才能发送请求的条件。
spec.matchConditions.expression (string),必需
Expression 表示将由 CEL 评估的表达式。必须评估为布尔值。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,这些内容组织成 CEL 变量
'object' - 来自入站请求的对象。对于 DELETE 请求,值为 null。'oldObject' - 现有的对象。对于 CREATE 请求,值为 null。'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.ac.cn/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 指定此策略旨在验证哪些资源。如果请求匹配所有 Constraint,则 AdmissionPolicy 会关心该请求。但是,为了防止集群陷入无法通过 API 恢复的不稳定状态,ValidatingAdmissionPolicy 不能匹配 ValidatingAdmissionPolicy 和 ValidatingAdmissionPolicyBinding。必需。
MatchResources 根据对象是否满足匹配条件来决定是否对该对象运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)。
spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)
原子性:在合并期间将被替换
ExcludeResourceRules 描述 ValidatingAdmissionPolicy 不应关心哪些资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)
NamedRuleWithOperations 是带有 ResourceNames 的 Operations 和 Resources 的元组。
spec.matchConstraints.excludeResourceRules.apiGroups ([]string)
原子性:在合并期间将被替换
APIGroups 是资源所属的 API 组。'' 表示所有组。如果存在 '',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.apiVersions ([]string)
原子性:在合并期间将被替换
APIVersions 是资源所属的 API 版本。'' 表示所有版本。如果存在 '',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.operations ([]string)
原子性:在合并期间将被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.resourceNames ([]string)
原子性:在合并期间将被替换
ResourceNames 是规则适用的可选名称白名单。空集表示允许所有内容。
spec.matchConstraints.excludeResourceRules.resources ([]string)
原子性:在合并期间将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 指代 pod。'pods/log' 指代 pod 的 log 子资源。'' 指代所有资源,但不包括子资源。'pods/' 指代 pod 的所有子资源。'/scale' 指代所有 scale 子资源。'/*' 指代所有资源及其子资源。
如果存在通配符,则验证规则将确保资源彼此不重叠。
根据包围对象,可能不允许子资源。必需。
spec.matchConstraints.excludeResourceRules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"(集群)、"Namespaced"(命名空间)和 ""(所有)。"Cluster" 表示只有集群范围的资源会匹配此规则。Namespace 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" 关联的对象上运行 webhook,您将设置选择器如下:"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
如果相反,您只想在任何与 "environment" 的 "prod" 或 "staging" 关联的对象上运行策略,您将设置选择器如下:"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
有关标签选择器的更多示例,请参阅 https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/。
默认为空 LabelSelector,它匹配所有内容。
spec.matchConstraints.objectSelector (LabelSelector)
ObjectSelector 决定是否根据对象是否具有匹配的标签来运行验证。objectSelector 将针对发送到 cel 验证的 oldObject 和 newObject 进行评估,如果任一对象匹配选择器,则视为匹配。空对象(创建时的 oldObject,或删除时的 newObject)或不能有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 webhook 是选择加入(opt-in)时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 webhook。默认为空的 LabelSelector,匹配所有内容。
spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)
原子性:在合并期间将被替换
ResourceRules 描述 ValidatingAdmissionPolicy 匹配哪些资源/子资源上的哪些操作。如果操作匹配任何规则,则策略会关心该操作。
NamedRuleWithOperations 是带有 ResourceNames 的 Operations 和 Resources 的元组。
spec.matchConstraints.resourceRules.apiGroups ([]string)
原子性:在合并期间将被替换
APIGroups 是资源所属的 API 组。'' 表示所有组。如果存在 '',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.apiVersions ([]string)
原子性:在合并期间将被替换
APIVersions 是资源所属的 API 版本。'' 表示所有版本。如果存在 '',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.operations ([]string)
原子性:在合并期间将被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.resourceNames ([]string)
原子性:在合并期间将被替换
ResourceNames 是规则适用的可选名称白名单。空集表示允许所有内容。
spec.matchConstraints.resourceRules.resources ([]string)
原子性:在合并期间将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 指代 pod。'pods/log' 指代 pod 的 log 子资源。'' 指代所有资源,但不包括子资源。'pods/' 指代 pod 的所有子资源。'/scale' 指代所有 scale 子资源。'/*' 指代所有资源及其子资源。
如果存在通配符,则验证规则将确保资源彼此不重叠。
根据包围对象,可能不允许子资源。必需。
spec.matchConstraints.resourceRules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"(集群)、"Namespaced"(命名空间)和 ""(所有)。"Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源会匹配此规则。"" 表示没有范围限制。子资源匹配其父资源的范围。默认值为 "*"。
spec.paramKind (ParamKind)
ParamKind 指定用于参数化此策略的资源种类。如果缺失,则此策略没有参数,并且 param CEL 变量不会提供给验证表达式。如果 ParamKind 引用了不存在的 Kind,则此策略定义配置错误,并应用 FailurePolicy。如果指定了 paramKind,但在 ValidatingAdmissionPolicyBinding 中未设置 paramRef,则 params 变量将为 null。
spec.paramKind.apiVersion (string)
APIVersion 是资源所属的 API 组版本。格式为 "group/version"。必需。
spec.paramKind.kind (string)
Kind 是资源所属的 API 类型。必需。
spec.validations ([]Validation)
原子性:在合并期间将被替换
Validations 包含用于应用验证的 CEL 表达式。Validations 和 AuditAnnotations 不能都为空;至少需要一个 Validations 或 AuditAnnotations。
spec.validations.expression (string), required
Expression 代表将由 CEL 评估的表达式。参考:https://github.com/google/cel-spec CEL 表达式可以访问 API 请求/响应的内容,这些内容被组织成 CEL 变量以及一些其他有用的变量。
- 'object' - 来自入站请求的对象。对于 DELETE 请求,值为 null。- 'oldObject' - 现有的对象。对于 CREATE 请求,值为 null。- 'request' - API 请求的属性(参考)。- 'params' - 策略绑定正在评估的参数资源。仅当策略具有 ParamKind 时才填充。- 'namespaceObject' - 入站对象所属的命名空间对象。对于集群范围的资源,值为 null。- 'variables' - 复合变量的映射,从其名称到其惰性评估的值。例如,名为 'foo' 的变量可以访问为 'variables.foo'。
- 'authorizer' - 一个 CEL Authorizer。可能用于对请求的主体(用户或服务帐户)执行授权检查。请参阅 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
- 'authorizer.requestResource' - 从 'authorizer' 构造并使用请求资源配置的 CEL ResourceCheck。
apiVersion
、kind
、metadata.name
和metadata.generateName
始终可从对象的根访问。其他元数据属性均不可访问。只有形式为
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的属性名称才是可访问的。可访问的属性名称在表达式中访问时会根据以下规则进行转义:- '' 转义为 'underscores**'- '.' 转义为 'dot'- '-' 转义为 'dash'- '/' 转义为 'slash'- 完全匹配 CEL 保留关键字的属性名称将转义为 '{keyword}__'. 关键字是:"true", "false", "null", "in", "as", "break", "const", "continue", "else", "for", "function", "if", "import", "let", "loop", "package", "namespace", "return". 示例- 访问名为 "namespace" 的属性的表达式:{"Expression": "object.namespace > 0"}
- 访问名为 "x-prop" 的属性的表达式:{"Expression": "object.x__dash__prop > 0"}
- 访问名为 "redact__d" 的属性的表达式:{"Expression": "object.redact__underscores__d > 0"}
具有 'set' 或 'map' 列表类型的数组的相等性会忽略元素顺序,即 [1, 2] == [2, 1]。具有 x-kubernetes-list-type 的数组的连接使用列表类型的语义
- 'set':
X + Y
执行并集操作,其中X
中所有元素的数组位置被保留,并且Y
中不相交的元素被附加,保留其部分顺序。 - 'map':
X + Y
执行合并,其中X
的所有键的数组位置都将保留,但当X
和Y
的键集相交时,值将被Y
中的值覆盖。键不相交的Y
中的元素将被追加,并保留其部分顺序。必需。
spec.validations.message (string)
Message 表示验证失败时显示的错误消息。如果 Expression 包含换行符,则 Message 是必需的。Message 不能包含换行符。如果未设置,则 Message 为 "failed rule: {Rule}"。例如:"必须是一个主机匹配 spec.host 的 URL"。如果 Expression 包含换行符,Message 是必需的。Message 不能包含换行符。如果未设置,则 Message 为 "failed Expression: {Expression}"。
spec.validations.messageExpression (string)
messageExpression 声明了一个 CEL 表达式,该表达式在规则失败时评估为返回的验证失败消息。由于 messageExpression 用作失败消息,因此它必须评估为字符串。如果 validation 中同时存在 message 和 messageExpression,则验证失败时将使用 messageExpression。如果 messageExpression 导致运行时错误,则运行时错误将被记录,并且验证失败消息将按 messageExpression 字段未设置的方式生成。如果 messageExpression 评估为空字符串、仅包含空格的字符串或包含换行符的字符串,则验证失败消息也将按 messageExpression 字段未设置的方式生成,并且 messageExpression 生成空字符串/仅包含空格的字符串/包含换行符的字符串的事实将被记录。messageExpression 可以访问与
expression
相同的变量,但 'authorizer' 和 'authorizer.requestResource' 除外。示例:"object.x 必须小于 max ("+string(params.max)+")"spec.validations.reason (string)
Reason 表示为什么此验证失败的可机器读取的描述。如果这是列表中第一个失败的验证,则该原因以及相应的 HTTP 响应代码将用于向客户端的 HTTP 响应。目前支持的原因有:"Unauthorized"(未授权)、"Forbidden"(禁止)、"Invalid"(无效)、"RequestEntityTooLarge"(请求实体过大)。如果未设置,则向客户端的响应中使用 StatusReasonInvalid。
spec.variables ([]Variable)
补丁策略:在键
name
上合并映射:合并时将保留键名上的唯一值
Variables 包含可以在其他表达式的组合中使用的变量定义。每个变量都定义为一个命名的 CEL 表达式。此处定义的变量将在策略的其他表达式的
variables
下可用,但不包括 MatchConditions,因为 MatchConditions 是在策略的其余部分之前评估的。变量的表达式可以引用列表中更早定义的其他变量,但不能引用之后的变量。因此,Variables 必须按首次出现和无环的顺序排序。
Variable 是用于组合的变量定义。变量定义为命名表达式。
spec.variables.expression (string),必需
Expression 是将作为变量值评估的表达式。CEL 表达式可以访问与 Validation 中 CEL 表达式相同的标识符。
spec.variables.name (string),必需
Name 是变量的名称。该名称必须是有效的 CEL 标识符,并且在所有变量中是唯一的。可以通过
variables
在其他表达式中访问该变量。例如,如果名称是 "foo",则该变量可作为variables.foo
访问。
status (ValidatingAdmissionPolicyStatus)
ValidatingAdmissionPolicy 的状态,包括有助于确定策略是否按预期行为工作的警告。由系统填充。只读。
ValidatingAdmissionPolicyStatus 代表准入验证策略的状态。
status.conditions ([]Condition)
映射:合并时将保留键类型上的唯一值
Conditions 代表策略当前状态的最新可用观察。
Condition 包含此 API 资源当前状态的一个方面的详细信息。
status.conditions.lastTransitionTime (Time), required
lastTransitionTime 是条件上次从一种状态转换到另一种状态的时间。这应该是底层条件发生变化的时间。如果不知道,则使用 API 字段发生变化的时间是可接受的。
Time 是 time.Time 的一个包装器,支持正确地编组到 YAML 和 JSON。提供了 time 包提供的许多工厂方法的包装器。
status.conditions.message (string), required
message 是一个人类可读的消息,指示有关转换的详细信息。这可能是一个空字符串。
status.conditions.reason (string), required
reason 包含一个程序标识符,指示条件最后一次转换的原因。特定条件类型的生产者可以定义此字段的预期值和含义,以及这些值是否被视为保证的 API。该值应为 CamelCase 字符串。此字段不能为空。
status.conditions.status (string), required
条件状态,True、False、Unknown 之一。
status.conditions.type (string), required
条件类型,CamelCase 或 foo.example.com/CamelCase。
status.conditions.observedGeneration (int64)
observedGeneration 代表条件设置的基础 .metadata.generation。例如,如果 .metadata.generation 当前为 12,但 .status.conditions[x].observedGeneration 为 9,则该条件相对于实例的当前状态已过时。
status.observedGeneration (int64)
控制器观察到的代。
status.typeChecking (TypeChecking)
每个表达式的类型检查结果。此字段的存在表示类型检查已完成。
TypeChecking 包含 ValidatingAdmissionPolicy 中表达式的类型检查结果
status.typeChecking.expressionWarnings ([]ExpressionWarning)
原子性:在合并期间将被替换
每个表达式的类型检查警告。
ExpressionWarning 是针对特定表达式的警告信息。
status.typeChecking.expressionWarnings.fieldRef (string), required
指向引用表达式的字段的路径。例如,对 validations 中第一个项目的表达式的引用是 "spec.validations[0].expression"
status.typeChecking.expressionWarnings.warning (string), required
人类可读的类型检查信息内容。每行警告包含表达式被检查的类型,然后是编译器的类型检查错误。
ValidatingAdmissionPolicyBindingList
ValidatingAdmissionPolicyBindingList 是 ValidatingAdmissionPolicyBinding 的列表。
items ([]ValidatingAdmissionPolicyBinding), required
PolicyBinding 列表。
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
操作
get
读取指定的 ValidatingAdmissionPolicyBinding
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
参数
name (在路径中): string,必填
ValidatingAdmissionPolicyBinding 的名称
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicyBinding): OK
401: 未授权
list
列出或观察 Kind 为 ValidatingAdmissionPolicyBinding 的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
参数
allowWatchBookmarks (在查询中): boolean
continue (在查询中): string
fieldSelector (在查询中): string
labelSelector (在查询中): string
limit (在查询中): integer
pretty (在查询中): string
resourceVersion (在查询中): string
resourceVersionMatch (在查询中): string
sendInitialEvents (在查询中): boolean
timeoutSeconds (在查询中): integer
watch (在查询中): boolean
响应
200 (ValidatingAdmissionPolicyBindingList): OK
401: 未授权
create
创建一个 ValidatingAdmissionPolicyBinding
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
参数
body: ValidatingAdmissionPolicyBinding, required
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicyBinding): OK
201 (ValidatingAdmissionPolicyBinding): Created
202 (ValidatingAdmissionPolicyBinding): Accepted
401: 未授权
update
替换指定的 ValidatingAdmissionPolicyBinding
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
参数
name (在路径中): string,必填
ValidatingAdmissionPolicyBinding 的名称
body: ValidatingAdmissionPolicyBinding, required
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicyBinding): OK
201 (ValidatingAdmissionPolicyBinding): Created
401: 未授权
patch
部分更新指定的 ValidatingAdmissionPolicyBinding
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
参数
name (在路径中): string,必填
ValidatingAdmissionPolicyBinding 的名称
body: Patch,必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (在查询中): boolean
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicyBinding): OK
201 (ValidatingAdmissionPolicyBinding): Created
401: 未授权
delete
删除一个 ValidatingAdmissionPolicyBinding
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
参数
name (在路径中): string,必填
ValidatingAdmissionPolicyBinding 的名称
body: DeleteOptions
dryRun (在查询中): string
gracePeriodSeconds (在查询中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查询中): boolean
pretty (在查询中): string
propagationPolicy (在查询中): string
响应
200 (Status): OK
202 (Status): 已接受
401: 未授权
deletecollection
删除 ValidatingAdmissionPolicyBinding 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
参数
body: DeleteOptions
continue (在查询中): string
dryRun (在查询中): string
fieldSelector (在查询中): string
gracePeriodSeconds (在查询中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查询中): boolean
labelSelector (在查询中): string
limit (在查询中): integer
pretty (在查询中): string
propagationPolicy (在查询中): string
resourceVersion (在查询中): string
resourceVersionMatch (在查询中): string
sendInitialEvents (在查询中): boolean
timeoutSeconds (在查询中): integer
响应
200 (Status): OK
401: 未授权
本页面是自动生成的。
如果你打算报告此页面存在的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。