MutatingAdmissionPolicyBinding v1alpha1

MutatingAdmissionPolicyBinding 將 MutatingAdmissionPolicy 與引數化資源繫結。

apiVersion: admissionregistration.k8s.io/v1alpha1

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

MutatingAdmissionPolicyBinding

MutatingAdmissionPolicyBinding 將 MutatingAdmissionPolicy 與引數化資源繫結。MutatingAdmissionPolicyBinding 和可選的引數資源共同定義了叢集管理員如何為叢集配置策略。

對於給定的 admission 請求,每個 binding 將會使其策略被評估 N 次,其中 N 對於不使用引數的策略/binding 為 1,否則 N 是 binding 選擇的引數的數量。每次評估都受到 執行時成本預算 的限制。

新增/刪除策略、binding 或引數不會影響給定的 (policy, binding, param) 組合是否在自己的 CEL 預算內。


  • apiVersion: admissionregistration.k8s.io/v1alpha1

  • kind: MutatingAdmissionPolicyBinding

  • metadata (ObjectMeta)

    標準物件元資料;更多資訊: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

  • spec (MutatingAdmissionPolicyBindingSpec)

    MutatingAdmissionPolicyBinding 的期望行為的規範。

    MutatingAdmissionPolicyBindingSpec 是 MutatingAdmissionPolicyBinding 的規範。

    • spec.matchResources (MatchResources)

      matchResources 限制了哪些資源會匹配此 binding,並可能被它修改。請注意,如果 matchResources 匹配到一個資源,該資源在被修改之前必須也匹配到策略的 matchConstraints 和 matchConditions。當 matchResources 未設定時,它不會約束資源匹配,只有策略的 matchConstraints 和 matchConditions 匹配後資源才會被修改。此外,matchResources.resourceRules 是可選的,在未設定時不會約束匹配。請注意,這與 MutatingAdmissionPolicy 的 matchConstraints 不同,後者要求 resourceRules 必須設定。允許 CREATE、UPDATE 和 CONNECT 操作。DELETE 操作可能不會被匹配。'*' 匹配 CREATE、UPDATE 和 CONNECT。

      MatchResources 根據物件是否滿足匹配條件來決定是否在物件上執行 admission 控制策略。排除規則優先於包含規則(如果一個資源同時匹配兩者,則被排除)。

      • spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)

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

        ExcludeResourceRules 描述了策略不關心的資源/子資源上的操作。排除規則優先於包含規則(如果一個資源同時匹配兩者,則被排除)。

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

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

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

        • spec.matchResources.excludeResourceRules.scope (string)

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

      • spec.matchResources.matchPolicy (string)

        matchPolicy 定義如何使用 "MatchResources" 列表來匹配傳入請求。允許的值為 "Exact" 或 "Equivalent"。

        • Exact: 僅當請求與指定規則完全匹配時才匹配。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,而 "rules" 只包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],那麼 admission 策略將不會考慮對 apps/v1beta1 或 extensions/v1beta1 API 組的請求。

        • Equivalent: 如果請求修改了規則中列出的資源,即使是透過其他 API 組或版本,也會匹配。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,而 "rules" 只包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],那麼 admission 策略 **會** 考慮對 apps/v1beta1 或 extensions/v1beta1 API 組發出的請求。API 伺服器會在必要時將請求轉換為匹配的資源 API。

        預設為 "Equivalent"

      • spec.matchResources.namespaceSelector (LabelSelector)

        NamespaceSelector 決定是否根據名稱空間是否匹配選擇器來執行 admission 控制策略。如果物件本身是名稱空間,則匹配在 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.club.tw/docs/concepts/overview/working-with-objects/labels/

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

      • spec.matchResources.objectSelector (LabelSelector)

        ObjectSelector 決定是根據物件是否具有匹配的標籤來執行策略。objectSelector 會針對傳送到策略表示式 (CEL) 的 oldObject 和 newObject 進行評估,如果任一物件匹配選擇器,則認為匹配。空物件 (建立時的 oldObject,或刪除時的 newObject) 或不能有標籤的物件 (如 DeploymentRollback 或 PodProxyOptions 物件) 不被視為匹配。僅當 webhook 是 opt-in 時才使用 objectSelector,因為終端使用者可以透過設定標籤來跳過 admission webhook。預設為空的 LabelSelector,匹配所有內容。

      • spec.matchResources.resourceRules ([]NamedRuleWithOperations)

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

        ResourceRules 描述了 admission 策略匹配的資源/子資源上的操作。如果一個操作匹配 *任何* Rule,那麼策略就會關注它。

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

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

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

        • spec.matchResources.resourceRules.scope (string)

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

    • spec.paramRef (ParamRef)

      paramRef 指定了用於配置 admission 控制策略的引數資源。它應該指向所繫結的 MutatingAdmissionPolicy 的 spec.ParamKind 指定的型別資源。如果策略指定了 ParamKind 並且 ParamRef 引用的資源不存在,則此 binding 被視為配置錯誤,並且將應用 MutatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,則忽略此欄位,規則將在沒有引數的情況下進行評估。

      ParamRef 描述如何定位要用作策略繫結應用規則表示式輸入的引數。

      • spec.paramRef.name (string)

        name 是被引用的資源的名稱。

        nameselector 是互斥的屬性。如果設定了一個,則必須取消設定另一個。

      • spec.paramRef.namespace (string)

        namespace 是引用資源的名稱空間。允許將引數搜尋限制在特定名稱空間。適用於 nameselector 欄位。

        可以透過在策略中指定名稱空間範圍的 paramKind 並將此欄位留空來使用每個名稱空間引數。

        • 如果 paramKind 是叢集範圍的,則此欄位必須未設定。設定此欄位會導致配置錯誤。

        • 如果 paramKind 是名稱空間範圍的,當此欄位留空時,將使用正在被評估的 admission 物件的名稱空間。請注意,如果留空,binding 不能匹配任何叢集範圍的資源,否則將導致錯誤。

      • spec.paramRef.parameterNotFoundAction (string)

        parameterNotFoundAction 控制當資源存在,並且 name 或 selector 有效,但 binding 沒有匹配到任何引數時的行為。如果值設定為 Allow,那麼沒有匹配的引數將被視為 binding 成功驗證。如果設定為 Deny,那麼沒有匹配的引數將受到策略的 failurePolicy 的約束。

        允許的值為 AllowDeny。預設為 Deny

      • spec.paramRef.selector (LabelSelector)

        selector 可用於根據其標籤匹配多個引數物件。提供 selector: {} 以匹配 ParamKind 的所有資源。

        如果找到多個引數,它們都將使用策略表示式進行評估,結果將進行 AND 運算。

        nameselector 之一必須設定,但 nameselector 是互斥屬性。如果一個設定,另一個必須取消設定。

    • spec.policyName (string)

      policyName 引用了 MutatingAdmissionPolicyBinding 所繫結的 MutatingAdmissionPolicy 的名稱。如果引用的資源不存在,則此 binding 被視為無效並將被忽略。必需。

MutatingAdmissionPolicy

MutatingAdmissionPolicy 描述了允許修改進入准入鏈的物件的准入變更策略的定義。


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

    Admission 策略的期望行為的規範。

    MutatingAdmissionPolicySpec 是期望的 admission 策略行為的規範。

    • spec.failurePolicy (string)

      failurePolicy 定義瞭如何處理准入策略的失敗。失敗可能來自 CEL 表示式解析錯誤、型別檢查錯誤、執行時錯誤以及無效或配置錯誤的策略定義或繫結。

      如果 paramKind 引用了一個不存在的 Kind,則策略無效。如果 paramRef.name 引用了一個不存在的資源,則 binding 無效。

      failurePolicy 不定義如何處理評估為 false 的驗證。

      允許的值為 Ignore 或 Fail。預設為 Fail。

    • spec.matchConditions ([]MatchCondition)

      補丁策略:在鍵 name 上合併

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

      matchConditions 是一個條件列表,請求必須滿足這些條件才能被驗證。Match conditions 會過濾掉已經由 matchConstraints 匹配的請求。一個空的 matchConditions 列表會匹配所有請求。最多允許 64 個 match conditions。

      如果提供了引數物件,可以透過 params 控制代碼以與驗證表示式相同的方式訪問它。

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

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

      **

      • spec.matchConditions.expression (string),必需

        Expression 表示將由 CEL 評估的表示式。必須評估為布林值。CEL 表示式可以訪問 AdmissionRequest 和 Authorizer 的內容,這些內容組織成 CEL 變數

        'object' - 來自傳入請求的物件。對於 DELETE 請求,該值為 null。'oldObject' - 現有的物件。對於 CREATE 請求,該值為 null。'request' - admission 請求的屬性 (/pkg/apis/admission/types.go#AdmissionRequest)。'authorizer' - 一個 CEL Authorizer。可用於對請求的principal (使用者或服務賬戶) 執行授權檢查。參見 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/

        必需。

      • spec.matchConditions.name (string),必需

        Name 是此 match condition 的識別符號,用於 MatchConditions 的戰略合併,以及提供日誌記錄的識別符號。一個好的名稱應該具有描述性,能反映相關的表示式。Name 必須是一個由字母數字字元、'-'、'*' 或 '.' 組成的合格名稱,並且必須以字母數字字元開頭和結尾(例如,'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 指定了此策略旨在驗證的資源。如果請求匹配 *所有* Constraints,則 MutatingAdmissionPolicy 會關注該請求。但是,為了防止叢集陷入無法透過 API 恢復的不穩定狀態,MutatingAdmissionPolicy 不能匹配 MutatingAdmissionPolicy 和 MutatingAdmissionPolicyBinding。允許 CREATE、UPDATE 和 CONNECT 操作。DELETE 操作可能不會被匹配。'*' 匹配 CREATE、UPDATE 和 CONNECT。必需。

      MatchResources 根據物件是否滿足匹配條件來決定是否在物件上執行 admission 控制策略。排除規則優先於包含規則(如果一個資源同時匹配兩者,則被排除)。

      • spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)

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

        ExcludeResourceRules 描述了策略不關心的資源/子資源上的操作。排除規則優先於包含規則(如果一個資源同時匹配兩者,則被排除)。

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

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

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

        • spec.matchConstraints.excludeResourceRules.scope (string)

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

      • spec.matchConstraints.matchPolicy (string)

        matchPolicy 定義如何使用 "MatchResources" 列表來匹配傳入請求。允許的值為 "Exact" 或 "Equivalent"。

        • Exact: 僅當請求與指定規則完全匹配時才匹配。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,而 "rules" 只包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],那麼 admission 策略將不會考慮對 apps/v1beta1 或 extensions/v1beta1 API 組的請求。

        • Equivalent: 如果請求修改了規則中列出的資源,即使是透過其他 API 組或版本,也會匹配。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,而 "rules" 只包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],那麼 admission 策略 **會** 考慮對 apps/v1beta1 或 extensions/v1beta1 API 組發出的請求。API 伺服器會在必要時將請求轉換為匹配的資源 API。

        預設為 "Equivalent"

      • spec.matchConstraints.namespaceSelector (LabelSelector)

        NamespaceSelector 決定是否根據名稱空間是否匹配選擇器來執行 admission 控制策略。如果物件本身是名稱空間,則匹配在 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.club.tw/docs/concepts/overview/working-with-objects/labels/

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

      • spec.matchConstraints.objectSelector (LabelSelector)

        ObjectSelector 決定是根據物件是否具有匹配的標籤來執行策略。objectSelector 會針對傳送到策略表示式 (CEL) 的 oldObject 和 newObject 進行評估,如果任一物件匹配選擇器,則認為匹配。空物件 (建立時的 oldObject,或刪除時的 newObject) 或不能有標籤的物件 (如 DeploymentRollback 或 PodProxyOptions 物件) 不被視為匹配。僅當 webhook 是 opt-in 時才使用 objectSelector,因為終端使用者可以透過設定標籤來跳過 admission webhook。預設為空的 LabelSelector,匹配所有內容。

      • spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)

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

        ResourceRules 描述了 admission 策略匹配的資源/子資源上的操作。如果一個操作匹配 *任何* Rule,那麼策略就會關注它。

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

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

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

        • spec.matchConstraints.resourceRules.scope (string)

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

    • spec.mutations ([]Mutation)

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

      mutations 包含對匹配物件執行的操作。mutations 不能為空;至少需要一個 mutation。mutations 按順序評估,並根據 reinvocationPolicy 進行重呼叫。策略的 mutations 會為該策略的每個 binding 呼叫,並且 mutations 的重呼叫是基於每個 binding 進行的。

      Mutation 指定了用於應用 Mutation 的 CEL 表示式。

      • spec.mutations.patchType (string), required

        patchType 指示使用的 patch 策略。允許的值為 "ApplyConfiguration" 和 "JSONPatch"。必需。

      • spec.mutations.applyConfiguration (ApplyConfiguration)

        applyConfiguration 定義了物件的期望配置值。配置使用 structured merge diff 應用到 admission 物件。CEL 表示式用於建立 apply 配置。

        ApplyConfiguration 定義了物件的期望配置值。

        • spec.mutations.applyConfiguration.expression (string)

          expression 將由 CEL 評估以建立 apply 配置。參考:https://github.com/google/cel-spec

          Apply 配置是在 CEL 中使用物件初始化宣告的。例如,這個 CEL 表示式返回一個用於設定單個欄位的 apply 配置。

          Object{
            spec: Object.spec{
              serviceAccountName: "example"
            }
          }
          

          應用配置不能修改原子結構體、對映或陣列,因為這有意外刪除未包含在應用配置中的值的風險。

          CEL 表示式可以訪問建立應用配置所需的以下物件型別:

          • 'Object' - 資源的 CEL 型別。 - 'Object.<fieldName>' - 物件欄位的 CEL 型別 (例如 'Object.spec') - 'Object.<fieldName1>.<fieldName2>...<fieldNameN>` - 巢狀欄位的 CEL 型別 (例如 'Object.spec.containers')

          CEL 表示式可以訪問 API 請求的內容,這些內容被組織成 CEL 變數以及其他一些有用的變數:

          • 'object' - 來自傳入請求的物件。對於 DELETE 請求,該值為 null。- 'oldObject' - 現有的物件。對於 CREATE 請求,該值為 null。- 'request' - API 請求的屬性 (參考)。- 'params' - 被評估的策略 binding 引用的引數資源。僅當策略有 ParamKind 時才填充。- 'namespaceObject' - 傳入物件所屬的名稱空間物件。對於叢集範圍的資源,該值為 null。- 'variables' - 複合變數的對映,從其名稱到其延遲評估的值。例如,名為 'foo' 的變數可以透過 'variables.foo' 訪問。
          • 'authorizer' - 一個 CEL Authorizer。可用於對請求的principal (使用者或服務賬戶) 執行授權檢查。參見 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
          • 'authorizer.requestResource' - 從 'authorizer' 構造並使用請求資源配置的 CEL ResourceCheck。

          apiVersionkindmetadata.namemetadata.generateName 始終可從物件的根訪問。其他元資料屬性均不可訪問。

          只有形式為 [a-zA-Z_.-/][a-zA-Z0-9_.-/]* 的屬性名是可訪問的。必需。

      • spec.mutations.jsonPatch (JSONPatch)

        jsonPatch 定義了一個 JSON patch 操作,用於對物件執行 mutation。CEL 表示式用於建立 JSON patch。

        JSONPatch 定義了一個 JSON Patch。

        • spec.mutations.jsonPatch.expression (string)

          expression 將由 CEL 評估以建立 JSON patch。參考:https://github.com/google/cel-spec

          expression 必須返回一個 JSONPatch 值陣列。

          例如,這個 CEL 表示式返回一個 JSON 補丁,用於有條件地修改一個值。

            [
              JSONPatch{op: "test", path: "/spec/example", value: "Red"},
              JSONPatch{op: "replace", path: "/spec/example", value: "Green"}
            ]
          

          要定義 patch 值中的物件,請使用 Object 型別。例如:

            [
              JSONPatch{
                op: "add",
                path: "/spec/selector",
                value: Object.spec.selector{matchLabels: {"environment": "test"}}
              }
            ]
          

          要使用包含 '/' 和 '~' 的字串作為 JSONPatch 路徑鍵,請使用 "jsonpatch.escapeKey"。例如:

            [
              JSONPatch{
                op: "add",
                path: "/metadata/labels/" + jsonpatch.escapeKey("example.com/environment"),
                value: "test"
              },
            ]
          

          CEL 表示式可以訪問建立 JSON 補丁和物件所需的型別:

          • 'JSONPatch' - JSON Patch 操作的 CEL 型別。JSONPatch 具有 'op'、'from'、'path' 和 'value' 欄位。有關更多詳細資訊,請參閱 JSON patch。'value' 欄位可以設定為以下任何一種:字串、整數、陣列、對映或物件。如果設定,'path' 和 'from' 欄位必須設定為 JSON pointer 字串,其中 'jsonpatch.escapeKey()' CEL 函式可用於轉義包含 '/' 和 '~' 的路徑鍵。
          • 'Object' - 資源的 CEL 型別。 - 'Object.<fieldName>' - 物件欄位的 CEL 型別 (例如 'Object.spec') - 'Object.<fieldName1>.<fieldName2>...<fieldNameN>` - 巢狀欄位的 CEL 型別 (例如 'Object.spec.containers')

          CEL 表示式可以訪問 API 請求的內容,這些內容被組織成 CEL 變數以及其他一些有用的變數:

          • 'object' - 來自傳入請求的物件。對於 DELETE 請求,該值為 null。- 'oldObject' - 現有的物件。對於 CREATE 請求,該值為 null。- 'request' - API 請求的屬性 (參考)。- 'params' - 被評估的策略 binding 引用的引數資源。僅當策略有 ParamKind 時才填充。- 'namespaceObject' - 傳入物件所屬的名稱空間物件。對於叢集範圍的資源,該值為 null。- 'variables' - 複合變數的對映,從其名稱到其延遲評估的值。例如,名為 'foo' 的變數可以透過 'variables.foo' 訪問。
          • 'authorizer' - 一個 CEL Authorizer。可用於對請求的principal (使用者或服務賬戶) 執行授權檢查。參見 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
          • 'authorizer.requestResource' - 從 'authorizer' 構造並使用請求資源配置的 CEL ResourceCheck。

          CEL 表示式可以訪問 Kubernetes CEL 函式庫 以及

          • 'jsonpatch.escapeKey' - 執行 JSONPatch 鍵轉義。'*' 和 '/' 分別被轉義為 '~0' 和 '~1')。

          只有形式為 [a-zA-Z_.-/][a-zA-Z0-9_.-/]* 的屬性名是可訪問的。必需。

    • spec.paramKind (ParamKind)

      paramKind 指定了用於引數化此策略的資源型別。如果缺失,此策略沒有引數,並且 param CEL 變數不會提供給驗證表示式。如果 paramKind 引用了不存在的 Kind,則此策略定義配置錯誤,並應用 FailurePolicy。如果指定了 paramKind 但 MutatingAdmissionPolicyBinding 中未設定 paramRef,則 params 變數將為 null。

      ParamKind 是組型別和版本的元組。

      • spec.paramKind.apiVersion (string)

        APIVersion 是資源所屬的 API 組版本。格式為 "group/version"。必需。

      • spec.paramKind.kind (string)

        Kind 是資源所屬的 API 型別。必需。

    • spec.reinvocationPolicy (string)

      reinvocationPolicy 指示是否可以在單個 admission 評估中對每個 MutatingAdmissionPolicyBinding 呼叫多次 mutations。允許的值為 "Never" 和 "IfNeeded"。

      Never: 這些 mutations 在單個 binding 的單個 admission 評估中不會被呼叫多次。

      IfNeeded: 這些 mutations 在單個 admission 請求中可能被呼叫多次,並且與其他 admission 外掛、admission webhooks、此策略的 bindings 和 admission 策略的順序沒有保證。僅當 mutations 在此 mutation 被呼叫後更改了物件時,才會重新呼叫 mutations。必需。

    • spec.variables ([]Variable)

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

      variables 包含可用於組合其他表示式的變數的定義。每個變數定義為一個命名的 CEL 表示式。此處定義的變數將在策略的其他表示式的 variables 下可用,但 matchConditions 除外,因為 matchConditions 在策略的其餘部分之前進行評估。

      變數的表示式可以引用列表中前面定義的其他變數,但不能引用後面的變數。因此,變數必須按首次出現的順序排序並且是無環的。

      Variable 是用於組合的變數的定義。

      • spec.variables.expression (string),必需

        Expression 是將作為變數值評估的表示式。CEL 表示式可以訪問與 Validation 中 CEL 表示式相同的識別符號。

      • spec.variables.name (string),必需

        Name 是變數的名稱。該名稱必須是有效的 CEL 識別符號,並且在所有變數中是唯一的。可以透過 variables 在其他表示式中訪問該變數。例如,如果名稱是 "foo",則該變數將可用為 variables.foo

MutatingAdmissionPolicyBindingList

MutatingAdmissionPolicyBindingList 是 MutatingAdmissionPolicyBinding 的列表。


操作


get 讀取指定的 MutatingAdmissionPolicyBinding

HTTP 請求

GET /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}

引數

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

    MutatingAdmissionPolicyBinding 的名稱

  • pretty (在查詢中): string

    pretty

響應

200 (MutatingAdmissionPolicyBinding): OK

401: 未授權

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

HTTP 請求

GET /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings

引數

響應

200 (MutatingAdmissionPolicyBindingList): OK

401: 未授權

create 建立一個 MutatingAdmissionPolicyBinding

HTTP 請求

POST /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings

引數

響應

200 (MutatingAdmissionPolicyBinding): OK

201 (MutatingAdmissionPolicyBinding): Created

202 (MutatingAdmissionPolicyBinding): Accepted

401: 未授權

update 替換指定的 MutatingAdmissionPolicyBinding

HTTP 請求

PUT /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}

引數

響應

200 (MutatingAdmissionPolicyBinding): OK

201 (MutatingAdmissionPolicyBinding): Created

401: 未授權

patch 部分更新指定的 MutatingAdmissionPolicyBinding

HTTP 請求

PATCH /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}

引數

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

    MutatingAdmissionPolicyBinding 的名稱

  • body: Patch,必需

  • dryRun (在查詢中): string

    dryRun

  • fieldManager (在查詢中): string

    fieldManager

  • fieldValidation (在查詢中): string

    fieldValidation

  • force (在查詢中): boolean

    force

  • pretty (在查詢中): string

    pretty

響應

200 (MutatingAdmissionPolicyBinding): OK

201 (MutatingAdmissionPolicyBinding): Created

401: 未授權

delete 刪除一個 MutatingAdmissionPolicyBinding

HTTP 請求

DELETE /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}

引數

響應

200 (Status): OK

202 (Status): 已接受

401: 未授權

deletecollection 刪除 MutatingAdmissionPolicyBinding 的集合

HTTP 請求

DELETE /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings

引數

響應

200 (Status): OK

401: 未授權

本頁面是自動生成的。

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

最後修改時間:2025 年 4 月 24 日上午 9:14 PST:v1.33 的 Markdown API 參考 (b84ec30bbb)