ValidatingAdmissionPolicyBinding
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 是被引用資源的名稱。
必須設定
name
或selector
其中之一,但name
和selector
是互斥的屬性。如果設定了其中一個,則另一個必須取消設定。透過設定
name
欄位、將selector
留空,以及在paramKind
是命名空間範圍時設定命名空間,可以配置用於所有許可請求的單一參數。spec.paramRef.namespace (字串)
namespace 是被引用資源的命名空間。允許將參數的搜尋範圍限制在特定的命名空間。適用於
name
和selector
欄位。透過在策略中指定命名空間範圍的
paramKind
並將此欄位留空,可以使用每個命名空間的參數。如果
paramKind
是叢集範圍的,則此欄位必須取消設定。設定此欄位會導致配置錯誤。如果
paramKind
是命名空間範圍的,則當此欄位留空時,將使用正在評估許可的物件的命名空間。請注意,如果此欄位留空,則綁定不得比對任何叢集範圍的資源,否則將導致錯誤。
spec.paramRef.parameterNotFoundAction (字串)
parameterNotFoundAction
控制當資源存在,且 name 或 selector 有效,但沒有與綁定比對的參數時,綁定的行為。如果值設定為Allow
,則沒有比對到的參數將被視為綁定成功驗證。如果設定為Deny
,則沒有比對到的參數將會受到策略的failurePolicy
約束。允許的值為
Allow
或Deny
必填
spec.paramRef.selector (LabelSelector)
selector 可用於基於標籤比對多個參數物件。提供 selector: {} 以比對 ParamKind 的所有資源。
如果找到多個參數,它們都會與策略表達式一起評估,並且結果會進行 AND 運算。
必須設定
name
或selector
其中之一,但name
和selector
是互斥的屬性。如果設定了其中一個,則另一個必須取消設定。
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 以與驗證表達式相同的方式存取它。精確的比對邏輯為(依序):
- 如果任何 matchCondition 評估為 FALSE,則跳過此策略。
- 如果所有 matchConditions 評估為 TRUE,則評估此策略。
- 如果任何 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。
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。
apiVersion
、kind
、metadata.name
和metadata.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
中所有鍵的陣列位置,但當X
和Y
的鍵集相交時,值會被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 的列表。
items ([]ValidatingAdmissionPolicyBinding), 必填
PolicyBinding 的列表。
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 (ListMeta)
標準列表 metadata。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
Operations
get
讀取指定的 ValidatingAdmissionPolicyBinding
HTTP Request
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
Parameters
name (in path): 字串, 必填
ValidatingAdmissionPolicyBinding 的名稱
pretty (in query): 字串
Response
200 (ValidatingAdmissionPolicyBinding): OK
401: Unauthorized
list
列出或監看種類 ValidatingAdmissionPolicyBinding 的物件
HTTP Request
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
Parameters
allowWatchBookmarks (in query): 布林值
continue (in query): 字串
fieldSelector (in query): 字串
labelSelector (in query): 字串
limit (in query): 整數
pretty (in query): 字串
resourceVersion (in query): 字串
resourceVersionMatch (in query): 字串
sendInitialEvents (in query): 布林值
timeoutSeconds (in query): 整數
watch (in query): 布林值
Response
200 (ValidatingAdmissionPolicyBindingList): OK
401: Unauthorized
create
建立 ValidatingAdmissionPolicyBinding
HTTP Request
POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
Parameters
body: ValidatingAdmissionPolicyBinding, 必填
dryRun (in query): 字串
fieldManager (in query): 字串
fieldValidation (in query): 字串
pretty (in query): 字串
Response
200 (ValidatingAdmissionPolicyBinding): OK
201 (ValidatingAdmissionPolicyBinding):已建立
202 (ValidatingAdmissionPolicyBinding):已接受
401: Unauthorized
update
取代指定的 ValidatingAdmissionPolicyBinding
HTTP Request
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
Parameters
name (in path): 字串, 必填
ValidatingAdmissionPolicyBinding 的名稱
body: ValidatingAdmissionPolicyBinding, 必填
dryRun (in query): 字串
fieldManager (in query): 字串
fieldValidation (in query): 字串
pretty (in query): 字串
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): 字串
fieldManager (in query): 字串
fieldValidation (in query): 字串
force (在查詢中):布林值
pretty (in query): 字串
Response
200 (ValidatingAdmissionPolicyBinding): OK
201 (ValidatingAdmissionPolicyBinding):已建立
401: Unauthorized
delete
刪除 ValidatingAdmissionPolicyBinding
HTTP Request
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
Parameters
name (in path): 字串, 必填
ValidatingAdmissionPolicyBinding 的名稱
body: DeleteOptions
dryRun (in query): 字串
gracePeriodSeconds (在查詢中):整數
pretty (in query): 字串
propagationPolicy (在查詢中):字串
Response
200 (Status):成功
202 (Status):已接受
401: Unauthorized
deletecollection
刪除 ValidatingAdmissionPolicyBinding 的集合
HTTP Request
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
Parameters
body: DeleteOptions
continue (in query): 字串
dryRun (in query): 字串
fieldSelector (in query): 字串
gracePeriodSeconds (在查詢中):整數
labelSelector (in query): 字串
limit (in query): 整數
pretty (in query): 字串
propagationPolicy (在查詢中):字串
resourceVersion (in query): 字串
resourceVersionMatch (in query): 字串
sendInitialEvents (in query): 布林值
timeoutSeconds (in query): 整數
Response
200 (Status):成功
401: Unauthorized
此頁面為自動產生。
如果您計劃回報此頁面的問題,請在您的問題描述中提及此頁面為自動產生。此修正可能需要在 Kubernetes 專案的其他地方進行。