ValidatingWebhookConfiguration

ValidatingWebhookConfiguration 描述了接受或拒绝对象(不进行更改)的准入 Webhook 的配置。

apiVersion: admissionregistration.k8s.io/v1

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

ValidatingWebhookConfiguration

ValidatingWebhookConfiguration 描述了接受或拒绝对象(不进行更改)的准入 Webhook 的配置。


  • apiVersion: admissionregistration.k8s.io/v1

  • kind: ValidatingWebhookConfiguration

  • metadata (ObjectMeta)

    标准对象元数据;更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.

  • webhooks ([]ValidatingWebhook)

    修补策略:在键 name 上合并

    Webhooks 是 Webhook 列表,以及受影响的资源和操作。

    ValidatingWebhook 描述了准入 Webhook 以及其应用的资源和操作。

    • webhooks.admissionReviewVersions ([]string), required

      AdmissionReviewVersions 是 Webhook 期望的优先 AdmissionReview 版本的排序列表。API 服务器将尝试使用列表中它支持的第一个版本。如果列表中指定的版本都不受 API 服务器支持,则此对象的验证将失败。如果持久化的 Webhook 配置指定了允许的版本,但未包含 API 服务器已知的任何版本,则对 Webhook 的调用将失败,并受失败策略的影响。

    • webhooks.clientConfig (WebhookClientConfig), required

      ClientConfig 定义了如何与 Hook 通信。必填

      WebhookClientConfig 包含与 Webhook 建立 TLS 连接的信息

      • webhooks.clientConfig.caBundle ([]byte)

        caBundle 是 PEM 编码的 CA 捆绑包,用于验证 Webhook 的服务器证书。如果未指定,则使用 apiserver 上的系统信任根。

      • webhooks.clientConfig.service (ServiceReference)

        service 是对该 Webhook 服务的引用。必须指定 serviceurl

        如果 Webhook 在集群中运行,则应使用 service

        ServiceReference 包含对 Service.legacy.k8s.io 的引用

        • webhooks.clientConfig.service.name (string), required

          name 是服务的名称。必填

        • webhooks.clientConfig.service.namespace (string), required

          namespace 是服务的命名空间。必填

        • webhooks.clientConfig.service.path (string)

          path 是一个可选的 URL 路径,将在对该服务的任何请求中发送。

        • webhooks.clientConfig.service.port (int32)

          如果指定,则是托管 Webhook 的服务上的端口。默认值为 443,以保持向后兼容性。port 应为有效的端口号(1-65535,含)。

      • webhooks.clientConfig.url (string)

        url 提供了 Webhook 的位置,以标准 URL 格式(scheme://host:port/path)。必须指定 urlservice 中的一个。

        host 不应引用集群中运行的服务;而是使用 service 字段。在某些 apiserver 中,主机可能通过外部 DNS 解析(例如,kube-apiserver 无法解析集群内 DNS,因为这将是分层违规)。host 也可能是 IP 地址。

        请注意,除非您非常小心地将此 Webhook 运行在所有运行可能需要调用此 Webhook 的 apiserver 的主机上,否则使用 localhost127.0.0.1 作为 host 是有风险的。此类安装可能不可移植,即不易在新集群中启动。

        该方案必须为“https”;URL 必须以“https://”开头。

        路径是可选的,如果存在,可以是 URL 中允许的任何字符串。您可以使用路径将任意字符串传递给 Webhook,例如,集群标识符。

        尝试使用用户或基本身份验证(例如“user:password@”)是不允许的。片段(“#...”)和查询参数(“?...”)也不允许。

    • webhooks.name (string), required

      准入 Webhook 的名称。名称应为完全限定的,例如 imagepolicy.kubernetes.io,其中“imagepolicy”是 Webhook 的名称,kubernetes.io 是组织的名称。必填。

    • webhooks.sideEffects (string), required

      SideEffects 指示此 Webhook 是否具有副作用。可接受的值为:None、NoneOnDryRun(通过 v1beta1 创建的 Webhook 也可以指定 Some 或 Unknown)。具有副作用的 Webhook 必须实现一个协调系统,因为请求可能会在准入链中的未来步骤中被拒绝,因此需要撤消副作用。如果请求具有 dryRun 属性,并且与具有 sideEffects == Unknown 或 Some 的 Webhook 相匹配,则该请求将被自动拒绝。

    • webhooks.failurePolicy (string)

      FailurePolicy 定义了如何处理来自准入端点的无法识别的错误 - 允许的值为 Ignore 或 Fail。默认为 Fail。

    • webhooks.matchConditions ([]MatchCondition)

      修补策略:在键 name 上合并

      映射:在合并期间,将保留键 name 上的唯一值

      MatchConditions 是一个条件列表,必须满足这些条件才能将请求发送到此 Webhook。MatchConditions 过滤掉已由规则、namespaceSelector 和 objectSelector 匹配的请求。空 MatchConditions 列表匹配所有请求。最多允许 64 个匹配条件。

      确切的匹配逻辑(按顺序)为

      1. 如果任何 matchCondition 评估为 FALSE,则跳过 Webhook。
      2. 如果所有 matchCondition 评估为 TRUE,则调用 Webhook。
      3. 如果任何 matchCondition 评估为错误(但没有评估为 FALSE)
        • 如果 failurePolicy=Fail,则拒绝请求
        • 如果 failurePolicy=Ignore,则忽略错误,并跳过 Webhook

      这是一个 beta 功能,由 AdmissionWebhookMatchConditions 功能门控管理。

      MatchCondition 表示必须满足才能将请求发送到 Webhook 的条件。

      • webhooks.matchConditions.expression (string), required

        Expression 表示将由 CEL 评估的表达式。必须评估为 bool。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,并将其组织到 CEL 变量中

        'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。'oldObject' - 现有对象。对于 CREATE 请求,该值为 null。'request' - 准入请求的属性(/pkg/apis/admission/types.go#AdmissionRequest)。'authorizer' - CEL 授权者。可用于对请求的委托人(用户或服务帐户)执行授权检查。请参阅 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' - 从 'authorizer' 构造的 CEL 资源检查,并使用请求资源配置。有关 CEL 的文档:https://kubernetes.ac.cn/docs/reference/using-api/cel/

        必填。

      • webhooks.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’)

        必填。

    • webhooks.matchPolicy (string)

      matchPolicy 定义了如何使用“rules”列表来匹配传入请求。允许的值为“Exact”或“Equivalent”。

      • Exact:仅当请求与指定的规则完全匹配时才匹配请求。例如,如果部署可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,但“rules”仅包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求不会发送到 Webhook。

      • Equivalent:如果请求修改了 rules 中列出的资源,即使通过其他 API 组或版本,也会匹配请求。例如,如果部署可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,但“rules”仅包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将转换为 apps/v1 并发送到 Webhook。

      默认为“Equivalent”。

    • webhooks.namespaceSelector (LabelSelector)

      NamespaceSelector 决定是否根据对象的命名空间是否与选择器匹配来在对象上运行 Webhook。如果对象本身是命名空间,则在 object.metadata.labels 上执行匹配。如果对象是另一个集群范围的资源,则永远不会跳过 Webhook。

      例如,要对任何命名空间不与“runlevel”为“0”或“1”关联的对象运行 Webhook;您可以将选择器设置为以下内容:“namespaceSelector”:{ “matchExpressions”:[ { “key”:“runlevel”, “operator”:“NotIn”, “values”:[ “0”, “1” ] } ] }

      如果您想仅对任何命名空间与“environment”为“prod”或“staging”关联的对象运行 Webhook,则可以将选择器设置为以下内容:“namespaceSelector”:{ “matchExpressions”:[ { “key”:“environment”, “operator”:“In”, “values”:[ “prod”, “staging” ] } ] }

      有关标签选择器的更多示例,请参阅 https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels

      默认为空 LabelSelector,它匹配所有内容。

    • webhooks.objectSelector (LabelSelector)

      ObjectSelector 决定是否根据对象是否具有匹配的标签来运行 Webhook。objectSelector 会针对将发送到 Webhook 的 oldObject 和 newObject 进行评估,如果这两个对象中的任何一个与选择器匹配,则认为匹配。空对象(在创建情况下为 oldObject,或在删除情况下为 newObject)或无法拥有标签的对象(例如 DeploymentRollback 或 PodProxyOptions 对象)不被认为匹配。仅当 Webhook 是 opt-in 时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空 LabelSelector,它匹配所有内容。

    • webhooks.rules ([]RuleWithOperations)

      规则描述了 webhook 关注的资源/子资源上的哪些操作。如果操作与 *任何* 规则匹配,则 webhook 会关注该操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于无法恢复的状态(除非完全禁用插件),ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永远不会在针对 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求上被调用。

      RuleWithOperations 是 Operations 和 Resources 的元组。建议确保所有元组扩展都是有效的。

      • webhooks.rules.apiGroups ([]string)

        原子:将在合并期间被替换

        APIGroups 是资源所属的 API 组。'*' 代表所有组。如果存在 '*',则切片的长度必须为 1。必填。

      • webhooks.rules.apiVersions ([]string)

        原子:将在合并期间被替换

        APIVersions 是资源所属的 API 版本。'*' 代表所有版本。如果存在 '*',则切片的长度必须为 1。必填。

      • webhooks.rules.operations ([]string)

        原子:将在合并期间被替换

        Operations 是准入钩子关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 代表所有这些操作以及将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必填。

      • webhooks.rules.resources ([]string)

        原子:将在合并期间被替换

        Resources 是此规则适用的资源列表。

        例如:'pods' 代表 pods。'pods/log' 代表 pods 的 log 子资源。'*' 代表所有资源,但不包括子资源。'pods/*' 代表 pods 的所有子资源。'* / scale' 代表所有 scale 子资源。'*/ *' 代表所有资源及其子资源。

        如果存在通配符,则验证规则将确保资源不会相互重叠。

        根据包含的对象,子资源可能不被允许。必填。

      • webhooks.rules.scope (string)

        scope 指定此规则的范围。有效值为 "Cluster"、"Namespaced" 和 "*" "Cluster" 表示只有集群范围的资源将匹配此规则。命名空间 API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源将匹配此规则。"*" 表示没有范围限制。子资源与父资源的范围匹配。默认值为 "*”。

    • webhooks.timeoutSeconds (int32)

      TimeoutSeconds 指定此 webhook 的超时时间。超时时间过后,webhook 调用将被忽略或 API 调用将根据失败策略失败。超时值必须介于 1 到 30 秒之间。默认值为 10 秒。

ValidatingWebhookConfigurationList

ValidatingWebhookConfigurationList 是 ValidatingWebhookConfiguration 的列表。


Operations


get 读取指定的 ValidatingWebhookConfiguration

HTTP 请求

GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}

参数

  • name (in path): string, required

    ValidatingWebhookConfiguration 的名称

  • pretty (in query): string

    pretty

响应

200 (ValidatingWebhookConfiguration): OK

401: Unauthorized

list 列出或监视 ValidatingWebhookConfiguration 类型的对象

HTTP 请求

GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations

参数

响应

200 (ValidatingWebhookConfigurationList): OK

401: Unauthorized

create 创建 ValidatingWebhookConfiguration

HTTP 请求

POST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations

参数

响应

200 (ValidatingWebhookConfiguration): OK

201 (ValidatingWebhookConfiguration): Created

202 (ValidatingWebhookConfiguration): Accepted

401: Unauthorized

update 替换指定的 ValidatingWebhookConfiguration

HTTP 请求

PUT /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}

参数

响应

200 (ValidatingWebhookConfiguration): OK

201 (ValidatingWebhookConfiguration): Created

401: Unauthorized

patch 部分更新指定的 ValidatingWebhookConfiguration

HTTP 请求

PATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}

参数

  • name (in path): string, required

    ValidatingWebhookConfiguration 的名称

  • body: Patch, required

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

响应

200 (ValidatingWebhookConfiguration): OK

201 (ValidatingWebhookConfiguration): Created

401: Unauthorized

delete 删除 ValidatingWebhookConfiguration

HTTP 请求

DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}

参数

响应

200 (Status): OK

202 (Status): Accepted

401: Unauthorized

deletecollection 删除 ValidatingWebhookConfiguration 集合

HTTP 请求

DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations

参数

响应

200 (Status): OK

401: Unauthorized

此页面是自动生成的。

如果您要报告此页面的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。

上次修改时间:2023 年 7 月 26 日下午 1:45 PST:生成的內容 (1e2ed88743)