ValidatingAdmissionPolicyBinding

ValidatingAdmissionPolicyBinding 將 ValidatingAdmissionPolicy 與參數化資源繫結。

apiVersion: admissionregistration.k8s.io/v1

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

ValidatingAdmissionPolicyBinding

ValidatingAdmissionPolicyBinding 將 ValidatingAdmissionPolicy 與參數化資源繫結。ValidatingAdmissionPolicyBinding 和參數 CRD 一起定義叢集管理員如何設定叢集政策。

對於給定的准入請求,每個繫結都會導致其政策被評估 N 次,其中對於不使用參數的政策/繫結,N 為 1,否則 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 的元組。

        • 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」表示只有叢集範圍的資源才會符合此規則。命名空間 API 物件是叢集範圍的。「Namespaced」表示只有命名空間資源才會符合此規則。「*」表示沒有範圍限制。子資源符合其父資源的範圍。預設值為「*」。

      • spec.matchResources.matchPolicy (字串)

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

        • Exact (精確比對):僅在請求與指定的規則完全符合時才比對。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,但 "rules" 僅包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],則對 apps/v1beta1 或 extensions/v1beta1 的請求將不會傳送到 ValidatingAdmissionPolicy。

        • Equivalent (等效比對):即使透過另一個 API 群組或版本,只要請求修改了規則中列出的資源,即視為比對成功。例如,如果 deployments 可以透過 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.dev.org.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) 時才使用物件選擇器,因為終端使用者可能會透過設定標籤來跳過許可 webhook。預設為空的 LabelSelector,這會比對所有項目。

      • spec.matchResources.resourceRules ([]NamedRuleWithOperations)

        原子性:將在合併期間取代

        ResourceRules 描述 ValidatingAdmissionPolicy 比對哪些資源/子資源上的哪些操作。如果操作符合任何規則,則此策略會關心該操作。

        NamedRuleWithOperations 是操作和資源與 ResourceNames 的元組。

        • spec.matchResources.resourceRules.apiGroups ([]字串)

          原子性:將在合併期間取代

          APIGroups 是資源所屬的 API 群組。「*」是所有群組。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchResources.resourceRules.apiVersions ([]字串)

          原子性:將在合併期間取代

          APIVersions 是資源所屬的 API 版本。「*」是所有版本。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchResources.resourceRules.operations ([]字串)

          原子性:將在合併期間取代

          Operations 是准入鉤子關心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 代表所有這些操作以及未來新增的任何准入操作。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchResources.resourceRules.resourceNames ([]字串)

          原子性:將在合併期間取代

          ResourceNames 是規則套用的名稱的選用白名單。空集合表示允許所有項目。

        • spec.matchResources.resourceRules.resources ([]字串)

          原子性:將在合併期間取代

          Resources 是此規則套用的資源清單。

          例如:「pods」表示 pod。「pods/log」表示 pod 的 log 子資源。「*」表示所有資源,但不包括子資源。「pods/*」表示 pod 的所有子資源。「*/scale」表示所有 scale 子資源。「*/*」表示所有資源及其子資源。

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

          根據封閉物件,可能不允許子資源。必要項。

        • spec.matchResources.resourceRules.scope (字串)

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

    • spec.paramRef (ParamRef)

      paramRef 指定用於配置許可控制策略的參數資源。它應指向綁定的 ValidatingAdmissionPolicy 的 ParamKind 中指定的類型資源。如果策略指定了 ParamKind,且 ParamRef 引用的資源不存在,則此綁定會被視為配置錯誤,並套用 ValidatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,則此欄位將被忽略,並且規則的評估將不使用參數。

      ParamRef 描述如何定位要用作策略綁定所套用規則的表達式輸入的參數。

      • spec.paramRef.name (字串)

        name 是被引用資源的名稱。

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

        透過設定 name 欄位、將 selector 留空,以及在 paramKind 是命名空間範圍時設定命名空間,可以配置用於所有許可請求的單一參數。

      • spec.paramRef.namespace (字串)

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

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

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

        • 如果 paramKind 是命名空間範圍的,則當此欄位留空時,將使用正在評估許可的物件的命名空間。請注意,如果此欄位留空,則綁定不得比對任何叢集範圍的資源,否則將導致錯誤。

      • spec.paramRef.parameterNotFoundAction (字串)

        parameterNotFoundAction 控制當資源存在,且 name 或 selector 有效,但沒有與綁定比對的參數時,綁定的行為。如果值設定為 Allow,則沒有比對到的參數將被視為綁定成功驗證。如果設定為 Deny,則沒有比對到的參數將會受到策略的 failurePolicy 約束。

        允許的值為 AllowDeny

        必填

      • spec.paramRef.selector (LabelSelector)

        selector 可用於基於標籤比對多個參數物件。提供 selector: {} 以比對 ParamKind 的所有資源。

        如果找到多個參數,它們都會與策略表達式一起評估,並且結果會進行 AND 運算。

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

    • spec.policyName (字串)

      PolicyName 引用 ValidatingAdmissionPolicy 的名稱,ValidatingAdmissionPolicyBinding 將綁定到該名稱。如果引用的資源不存在,則此綁定會被視為無效並將被忽略。必填。

    • spec.validationActions ([]字串)

      集合:在合併期間將保留唯一值

      validationActions 宣告如何強制執行引用的 ValidatingAdmissionPolicy 的驗證。如果驗證評估為 false,則始終根據這些動作強制執行。

      僅當 ValidatingAdmissionPolicy 的 FailurePolicy 設定為 Fail 時,才根據這些動作強制執行由 FailurePolicy 定義的失敗,否則將忽略失敗。這包括編譯錯誤、執行階段錯誤以及策略的錯誤配置。

      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 (字串)

    apiVersion 定義了此物件表示形式的版本化結構描述。伺服器應將已辨識的結構描述轉換為最新的內部值,並且可能會拒絕無法辨識的值。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

  • kind (字串)

    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 (字串),必填

        key 指定稽核註解鍵。ValidatingAdmissionPolicy 的稽核註解鍵必須是唯一的。鍵必須是符合規範的名稱 ([A-Za-z0-9][-A-Za-z0-9_.]*),長度不得超過 63 個位元組。

        鍵與 ValidatingAdmissionPolicy 的資源名稱組合以建構稽核註解鍵:"{ValidatingAdmissionPolicy name}/{key}"。

        如果許可 webhook 使用與此 ValidatingAdmissionPolicy 相同的資源名稱和相同的稽核註解鍵,則註解鍵將會相同。在這種情況下,第一個使用該鍵寫入的註解將包含在稽核事件中,所有後續使用相同鍵的註解都將被捨棄。

        必填。

      • spec.auditAnnotations.valueExpression (字串),必填

        valueExpression 表示由 CEL 評估以產生稽核註解值的表達式。表達式必須評估為字串或空值。如果表達式評估為字串,則稽核註解將包含該字串值。如果表達式評估為空值或空字串,則將省略稽核註解。valueExpression 的長度不得超過 5kb。如果 valueExpression 的結果長度超過 10kb,則將截斷為 10kb。

        如果多個 ValidatingAdmissionPolicyBinding 資源符合 API 請求,則 valueExpression 將針對每個綁定進行評估。valueExpressions 產生的所有唯一值將以逗號分隔的列表形式連接在一起。

        必填。

    • spec.failurePolicy (字串)

      failurePolicy 定義如何處理許可策略的失敗。失敗可能來自 CEL 表達式剖析錯誤、類型檢查錯誤、執行階段錯誤以及無效或錯誤配置的策略定義或綁定。

      如果 spec.paramKind 引用不存在的 Kind,則策略無效。如果 spec.paramRef.name 引用不存在的資源,則綁定無效。

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

      當 failurePolicy 設定為 Fail 時,ValidatingAdmissionPolicyBinding validationActions 定義如何強制執行失敗。

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

    • spec.matchConditions ([]MatchCondition)

      Patch 策略:在鍵 name 上合併

      Map:在合併期間,鍵名稱上的唯一值將被保留

      MatchConditions 是必須滿足才能驗證請求的條件列表。Match conditions 過濾已由規則、namespaceSelector 和 objectSelector 比對的請求。空的 matchConditions 列表比對所有請求。最多允許 64 個 match conditions。

      如果提供了參數物件,則可以透過 params handle 以與驗證表達式相同的方式存取它。

      精確的比對邏輯為(依序):

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

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

      • spec.matchConditions.expression (字串),必填

        Expression 表示將由 CEL 評估的表達式。必須評估為布林值。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 ResourceCheck。關於 CEL 的文件:https://kubernetes.dev.org.tw/docs/reference/using-api/cel/

        必填。

      • spec.matchConditions.name (字串), 必填

        Name 是此比對條件的識別符,用於策略性合併 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 指定此策略旨在驗證哪些資源。如果請求符合所有約束,則 AdmissionPolicy 會關心該請求。但是,為了防止叢集進入無法透過 API 復原的不穩定狀態,ValidatingAdmissionPolicy 無法比對 ValidatingAdmissionPolicy 和 ValidatingAdmissionPolicyBinding。 必填。

      MatchResources 決定是否根據物件是否符合比對準則,在物件上執行准入控制政策。排除規則優先於包含規則 (如果資源同時符合兩者,則會排除)

      • spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)

        原子性:將在合併期間取代

        ExcludeResourceRules 描述 ValidatingAdmissionPolicy 不應關心的哪些資源/子資源上的哪些操作。排除規則優先於包含規則 (如果資源同時符合兩者,則會排除)

        NamedRuleWithOperations 是操作和資源與 ResourceNames 的元組。

        • spec.matchConstraints.excludeResourceRules.apiGroups ([]字串)

          原子性:將在合併期間取代

          APIGroups 是資源所屬的 API 群組。「*」是所有群組。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchConstraints.excludeResourceRules.apiVersions ([]字串)

          原子性:將在合併期間取代

          APIVersions 是資源所屬的 API 版本。「*」是所有版本。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchConstraints.excludeResourceRules.operations ([]字串)

          原子性:將在合併期間取代

          Operations 是准入鉤子關心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 代表所有這些操作以及未來新增的任何准入操作。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchConstraints.excludeResourceRules.resourceNames ([]字串)

          原子性:將在合併期間取代

          ResourceNames 是規則套用的名稱的選用白名單。空集合表示允許所有項目。

        • spec.matchConstraints.excludeResourceRules.resources ([]字串)

          原子性:將在合併期間取代

          Resources 是此規則套用的資源清單。

          例如:「pods」表示 pod。「pods/log」表示 pod 的 log 子資源。「*」表示所有資源,但不包括子資源。「pods/*」表示 pod 的所有子資源。「*/scale」表示所有 scale 子資源。「*/*」表示所有資源及其子資源。

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

          根據封閉物件,可能不允許子資源。必要項。

        • spec.matchConstraints.excludeResourceRules.scope (字串)

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

      • spec.matchConstraints.matchPolicy (字串)

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

        • Exact (精確比對):僅在請求與指定的規則完全符合時才比對。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,但 "rules" 僅包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],則對 apps/v1beta1 或 extensions/v1beta1 的請求將不會傳送到 ValidatingAdmissionPolicy。

        • Equivalent (等效比對):即使透過另一個 API 群組或版本,只要請求修改了規則中列出的資源,即視為比對成功。例如,如果 deployments 可以透過 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.dev.org.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) 時才使用物件選擇器,因為終端使用者可能會透過設定標籤來跳過許可 webhook。預設為空的 LabelSelector,這會比對所有項目。

      • spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)

        原子性:將在合併期間取代

        ResourceRules 描述 ValidatingAdmissionPolicy 比對哪些資源/子資源上的哪些操作。如果操作符合任何規則,則此策略會關心該操作。

        NamedRuleWithOperations 是操作和資源與 ResourceNames 的元組。

        • spec.matchConstraints.resourceRules.apiGroups ([]字串)

          原子性:將在合併期間取代

          APIGroups 是資源所屬的 API 群組。「*」是所有群組。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchConstraints.resourceRules.apiVersions ([]字串)

          原子性:將在合併期間取代

          APIVersions 是資源所屬的 API 版本。「*」是所有版本。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchConstraints.resourceRules.operations ([]字串)

          原子性:將在合併期間取代

          Operations 是准入鉤子關心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 代表所有這些操作以及未來新增的任何准入操作。如果存在「*」,則切片的長度必須為 1。必要項。

        • spec.matchConstraints.resourceRules.resourceNames ([]字串)

          原子性:將在合併期間取代

          ResourceNames 是規則套用的名稱的選用白名單。空集合表示允許所有項目。

        • spec.matchConstraints.resourceRules.resources ([]字串)

          原子性:將在合併期間取代

          Resources 是此規則套用的資源清單。

          例如:「pods」表示 pod。「pods/log」表示 pod 的 log 子資源。「*」表示所有資源,但不包括子資源。「pods/*」表示 pod 的所有子資源。「*/scale」表示所有 scale 子資源。「*/*」表示所有資源及其子資源。

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

          根據封閉物件,可能不允許子資源。必要項。

        • spec.matchConstraints.resourceRules.scope (字串)

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

    • spec.paramKind (ParamKind)

      ParamKind 指定用於參數化此策略的資源種類。如果不存在,則此策略沒有參數,並且不會向驗證表達式提供 param CEL 變數。如果 ParamKind 指的是不存在的種類,則此策略定義配置錯誤,並應用 FailurePolicy。如果指定了 paramKind,但在 ValidatingAdmissionPolicyBinding 中未設定 paramRef,則 params 變數將為 null。

      ParamKind 是 Group、Kind 和 Version 的元組。

      • spec.paramKind.apiVersion (字串)

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

      • spec.paramKind.kind (字串)

        Kind 是資源所屬的 API 種類。 必填。

    • spec.validations ([]Validation)

      原子性:將在合併期間取代

      Validations 包含用於應用驗證的 CEL 表達式。 Validations 和 AuditAnnotations 不得同時為空;至少需要一個 Validations 或 AuditAnnotations。

      Validation 指定用於應用驗證的 CEL 表達式。

      • spec.validations.expression (字串), 必填

        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 授權器。可用於對請求的主體(使用者或服務帳戶)執行授權檢查。請參閱 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
        • 'authorizer.requestResource' - 從 'authorizer' 建構並使用請求資源配置的 CEL ResourceCheck。

        apiVersionkindmetadata.namemetadata.generateName 始終可以從物件的根目錄存取。無法存取其他 metadata 屬性。

        僅表單為 [a-zA-Z_.-/][a-zA-Z0-9_.-/]* 的屬性名稱可以存取。在表達式中存取時,可存取的屬性名稱會根據以下規則逸出: - '' 逸出為 'underscores' - '.' 逸出為 'dot' - '-' 逸出為 'dash' - '/' 逸出為 'slash' - 完全符合 CEL RESERVED 關鍵字的屬性名稱逸出為 '{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 中所有鍵的陣列位置,但當 XY 的鍵集相交時,值會被 Y 中的值覆寫。附加 Y 中具有不相交鍵的元素,保留其部分順序。 必填。
      • spec.validations.message (字串)

        Message 代表驗證失敗時顯示的訊息。如果 Expression 包含換行符,則此訊息為必填項。訊息不得包含換行符。如果未設定,則訊息為 "failed rule: {Rule}"。例如 "must be a URL with the host matching spec.host" 如果 Expression 包含換行符。Message 為必填項。訊息不得包含換行符。如果未設定,則訊息為 "failed Expression: {Expression}"。

      • spec.validations.messageExpression (字串)

        messageExpression 宣告一個 CEL 表達式,該表達式評估為此規則失敗時傳回的驗證失敗訊息。由於 messageExpression 用作失敗訊息,因此它必須評估為字串。如果驗證上同時存在 message 和 messageExpression,則當驗證失敗時將使用 messageExpression。如果 messageExpression 導致執行階段錯誤,則會記錄執行階段錯誤,並且產生的驗證失敗訊息就像 messageExpression 欄位未設定一樣。如果 messageExpression 評估為空字串、僅包含空格的字串或包含換行符的字串,則驗證失敗訊息的產生方式也將如同 messageExpression 欄位未設定一樣,並且將記錄 messageExpression 產生空字串/僅包含空格的字串/包含換行符的字串的事實。 messageExpression 可以存取與 expression 相同的所有變數,但 'authorizer' 和 'authorizer.requestResource' 除外。範例:"object.x must be less than max ("+string(params.max)+")"

      • spec.validations.reason (字串)

        Reason 代表驗證失敗原因的機器可讀描述。如果這是列表中第一個失敗的驗證,則此原因以及相應的 HTTP 回應碼將用於對用戶端的 HTTP 回應中。目前支援的原因為:"Unauthorized"、"Forbidden"、"Invalid"、"RequestEntityTooLarge"。如果未設定,則在對用戶端的回應中使用 StatusReasonInvalid。

    • spec.variables ([]Variable)

      Patch 策略:在鍵 name 上合併

      Map:在合併期間,鍵名稱上的唯一值將被保留

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

      變數的表達式可以參考列表中較早定義的其他變數,但不能參考後面的變數。因此,Variables 必須按首次出現的順序和非循環排序。

      Variable 是用於組合的變數的定義。變數定義為命名的表達式。

      • spec.variables.expression (字串), 必填

        Expression 是將被評估為變數值的表達式。 CEL 表達式可以存取與 Validation 中的 CEL 表達式相同的識別符。

      • spec.variables.name (字串), 必填

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

  • status (ValidatingAdmissionPolicyStatus)

    ValidatingAdmissionPolicy 的狀態,包括有助於確定策略是否以預期方式運作的警告。由系統填入。唯讀。

    ValidatingAdmissionPolicyStatus 代表准入驗證策略的狀態。

    • status.conditions ([]Condition)

      Map:在合併期間,將保留鍵類型上的唯一值

      conditions 代表策略目前狀態的最新可用觀察結果。

      Condition 包含此 API 資源目前狀態的一個方面的詳細資訊。

      • status.conditions.lastTransitionTime (時間), 必填

        lastTransitionTime 是條件上次從一種狀態轉換到另一種狀態的時間。這應該是基礎條件變更的時間。如果未知,則使用 API 欄位變更的時間是可以接受的。

        Time 是 time.Time 的包裝器,它支援正確地封送處理為 YAML 和 JSON。為 time 套件提供的許多 factory 方法提供了包裝器。

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

      控制器觀察到的 generation。

    • status.typeChecking (TypeChecking)

      每個表達式的類型檢查結果。此欄位的存在表示類型檢查已完成。

      TypeChecking 包含 ValidatingAdmissionPolicy 中表達式的類型檢查結果

      • status.typeChecking.expressionWarnings ([]ExpressionWarning)

        原子性:將在合併期間取代

        每個表達式的類型檢查警告。

        ExpressionWarning 是針對特定表達式的警告資訊。

        • status.typeChecking.expressionWarnings.fieldRef (字串), 必填

          引用表達式的欄位路徑。例如,對驗證的第一個項目的表達式的引用是 "spec.validations[0].expression"

        • status.typeChecking.expressionWarnings.warning (字串), 必填

          人類可讀形式的類型檢查資訊的內容。警告的每一行都包含表達式要檢查的類型,後跟來自編譯器的類型檢查錯誤。

ValidatingAdmissionPolicyBindingList

ValidatingAdmissionPolicyBindingList 是 ValidatingAdmissionPolicyBinding 的列表。


Operations


get 讀取指定的 ValidatingAdmissionPolicyBinding

HTTP Request

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

Parameters

  • name (in path): 字串, 必填

    ValidatingAdmissionPolicyBinding 的名稱

  • pretty (in query): 字串

    pretty

Response

200 (ValidatingAdmissionPolicyBinding): OK

401: Unauthorized

list 列出或監看種類 ValidatingAdmissionPolicyBinding 的物件

HTTP Request

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

Parameters

Response

200 (ValidatingAdmissionPolicyBindingList): OK

401: Unauthorized

create 建立 ValidatingAdmissionPolicyBinding

HTTP Request

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

Parameters

Response

200 (ValidatingAdmissionPolicyBinding): OK

201 (ValidatingAdmissionPolicyBinding):已建立

202 (ValidatingAdmissionPolicyBinding):已接受

401: Unauthorized

update 取代指定的 ValidatingAdmissionPolicyBinding

HTTP Request

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

Parameters

Response

200 (ValidatingAdmissionPolicyBinding): OK

201 (ValidatingAdmissionPolicyBinding):已建立

401: Unauthorized

patch 部分更新指定的 ValidatingAdmissionPolicyBinding

HTTP Request

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

Parameters

  • name (in path): 字串, 必填

    ValidatingAdmissionPolicyBinding 的名稱

  • body: Patch,必要

  • dryRun (in query): 字串

    dryRun

  • fieldManager (in query): 字串

    fieldManager

  • fieldValidation (in query): 字串

    fieldValidation

  • force (在查詢中):布林值

    強制

  • pretty (in query): 字串

    pretty

Response

200 (ValidatingAdmissionPolicyBinding): OK

201 (ValidatingAdmissionPolicyBinding):已建立

401: Unauthorized

delete 刪除 ValidatingAdmissionPolicyBinding

HTTP Request

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

Parameters

Response

200 (Status):成功

202 (Status):已接受

401: Unauthorized

deletecollection 刪除 ValidatingAdmissionPolicyBinding 的集合

HTTP Request

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

Parameters

Response

200 (Status):成功

401: Unauthorized

此頁面為自動產生。

如果您計劃回報此頁面的問題,請在您的問題描述中提及此頁面為自動產生。此修正可能需要在 Kubernetes 專案的其他地方進行。

上次修改時間:2024 年 8 月 28 日下午 6:01 PST:Update generated API reference for v1.31 (8ba98c79c1)