ValidatingWebhookConfiguration

ValidatingWebhookConfiguration 描述了准入 Webhook 的配置,該 Webhook 接受或拒絕物件而不對其進行更改。

apiVersion: admissionregistration.k8s.io/v1

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

ValidatingWebhookConfiguration

ValidatingWebhookConfiguration 描述了准入 Webhook 的配置,該 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 以標準 URL 形式(scheme://host:port/path)給出 Webhook 的位置。urlservice 必須且只能指定一個。

        host 不應引用叢集中執行的服務;請改用 service 欄位。在某些 apiserver 中,主機可能透過外部 DNS 解析(例如,kube-apiserver 無法解析叢集內 DNS,因為那將是分層違規)。host 也可以是 IP 地址。

        請注意,使用 localhost127.0.0.1 作為 host 存在風險,除非您非常小心地在所有執行 apiserver 的主機上執行此 Webhook,這些 apiserver 可能需要呼叫此 Webhook。此類安裝可能不可移植,即,在新叢集中不易啟動。

        方案必須是“https”;URL 必須以“https://”開頭。

        path 是可選的,如果存在,可以是 URL 中允許的任何字串。您可以使用 path 向 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 上合併

      對映:合併時將保留鍵名上的唯一值

      MatchConditions 是必須滿足的條件列表,請求才能傳送到此 Webhook。匹配條件會過濾已經由規則、namespaceSelector 和 objectSelector 匹配的請求。空的 matchConditions 列表匹配所有請求。最多允許 64 個匹配條件。

      確切的匹配邏輯是(按順序)

      1. 如果任何 matchCondition 評估為 FALSE,則跳過 Webhook。
      2. 如果所有 matchCondition 都評估為 TRUE,則呼叫 Webhook。
      3. 如果任何 matchCondition 評估為錯誤(但沒有一個為 FALSE)
        • 如果 failurePolicy=Fail,則拒絕請求
        • 如果 failurePolicy=Ignore,則忽略錯誤並跳過 Webhook。

      MatchCondition 表示 Webhook 必須滿足才能傳送請求的條件。

      • webhooks.matchConditions.expression (string), required

        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' - 從 'authorizer' 構建並配置了請求資源的 CEL ResourceCheck。CEL 文件:https://kubernetes.club.tw/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:如果請求透過另一個 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.club.tw/docs/concepts/overview/working-with-objects/labels

      預設為空 LabelSelector,它匹配所有內容。

    • webhooks.objectSelector (LabelSelector)

      ObjectSelector 根據物件是否具有匹配標籤來決定是否執行 Webhook。objectSelector 會針對將傳送到 Webhook 的 oldObject 和 newObject 進行評估,如果其中任何一個物件匹配選擇器,則認為匹配。空物件(建立時的 oldObject,或刪除時的 newObject)或不能具有標籤的物件(如 DeploymentRollback 或 PodProxyOptions 物件)不被視為匹配。僅當 Webhook 是可選的才使用物件選擇器,因為終端使用者可以透過設定標籤來跳過准入 Webhook。預設為空 LabelSelector,它匹配所有內容。

    • webhooks.rules ([]RuleWithOperations)

      原子性:在合併期間將被替換

      規則描述了 Webhook 關心的資源/子資源上的操作。如果 Webhook 匹配 *任何* 規則,則它關心該操作。但是,為了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 在不完全停用外掛的情況下將叢集置於無法恢復的狀態,ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永遠不會在 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 物件的准入請求上呼叫。

      RuleWithOperations 是操作和資源的元組。建議確保所有元組擴充套件都有效。

      • 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' 表示 Pod。'pods/log' 表示 Pod 的日誌子資源。'*' 表示所有資源,但不包括子資源。'pods/*' 表示 Pod 的所有子資源。'*/scale' 表示所有 scale 子資源。'*/*' 表示所有資源及其子資源。

        如果存在萬用字元,則驗證規則將確保資源彼此不重疊。

        根據包圍物件,可能不允許子資源。必需。

      • webhooks.rules.scope (string)

        scope 指定此規則的範圍。有效值為 "Cluster"、"Namespaced" 和 ""。"Cluster" 表示只有叢集範圍的資源才會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源才會匹配此規則。"" 表示沒有範圍限制。子資源匹配其父資源的範圍。預設為 "*"。

    • webhooks.timeoutSeconds (int32)

      TimeoutSeconds 指定此 Webhook 的超時時間。超時時間過後,Webhook 呼叫將被忽略,或者 API 呼叫將根據故障策略失敗。超時值必須介於 1 到 30 秒之間。預設為 10 秒。

ValidatingWebhookConfigurationList

ValidatingWebhookConfigurationList 是 ValidatingWebhookConfiguration 的列表。


操作


get 讀取指定的 ValidatingWebhookConfiguration

HTTP 請求

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

引數

  • name (在路徑中): string,必填

    ValidatingWebhookConfiguration 的名稱

  • pretty (在查詢中): string

    pretty

響應

200 (ValidatingWebhookConfiguration): 成功

401: 未授權

list 列出或監視 ValidatingWebhookConfiguration 型別的物件

HTTP 請求

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

引數

響應

200 (ValidatingWebhookConfigurationList): 成功

401: 未授權

create 建立一個 ValidatingWebhookConfiguration

HTTP 請求

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

引數

響應

200 (ValidatingWebhookConfiguration): 成功

201 (ValidatingWebhookConfiguration): 已建立

202 (ValidatingWebhookConfiguration): 已接受

401: 未授權

update 替換指定的 ValidatingWebhookConfiguration

HTTP 請求

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

引數

響應

200 (ValidatingWebhookConfiguration): 成功

201 (ValidatingWebhookConfiguration): 已建立

401: 未授權

patch 部分更新指定的 ValidatingWebhookConfiguration

HTTP 請求

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

引數

  • name (在路徑中): string,必填

    ValidatingWebhookConfiguration 的名稱

  • body: Patch,必需

  • dryRun (在查詢中): string

    dryRun

  • fieldManager (在查詢中): string

    fieldManager

  • fieldValidation (在查詢中): string

    fieldValidation

  • force (在查詢中): boolean

    force

  • pretty (在查詢中): string

    pretty

響應

200 (ValidatingWebhookConfiguration): 成功

201 (ValidatingWebhookConfiguration): 已建立

401: 未授權

delete 刪除一個 ValidatingWebhookConfiguration

HTTP 請求

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

引數

響應

200 (Status): OK

202 (Status): 已接受

401: 未授權

deletecollection 刪除 ValidatingWebhookConfiguration 集合

HTTP 請求

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

引數

響應

200 (Status): OK

401: 未授權

本頁面是自動生成的。

如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。

上次修改時間:2025 年 4 月 9 日太平洋標準時間下午 6:36:更新 v1.32 的 API 參考文件 (a3b579d035)