ValidatingAdmissionPolicyBinding
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingAdmissionPolicyBinding
ValidatingAdmissionPolicyBinding 將 ValidatingAdmissionPolicy 與引數化資源繫結。ValidatingAdmissionPolicyBinding 和引數 CRD 一起定義了叢集管理員如何為叢集配置策略。
對於給定的准入請求,每個繫結都會導致其策略被評估 N 次,其中 N 是不使用引數的策略/繫結的次數,否則 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 的 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' 指代 pod。'pods/log' 指代 pod 的 log 子資源。'' 指代所有資源,但不包括子資源。'pods/' 指代 pod 的所有子資源。'/scale' 指代所有 scale 子資源。'/*' 指代所有資源及其子資源。
如果存在萬用字元,則驗證規則將確保資源彼此不重疊。
根據包圍物件,可能不允許子資源。必需。
spec.matchResources.excludeResourceRules.scope (string)
scope 指定此規則的範圍。有效值為 "Cluster"(叢集)、"Namespaced"(名稱空間)和 ""(所有)。"Cluster" 表示只有叢集範圍的資源會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源會匹配此規則。"" 表示沒有範圍限制。子資源匹配其父資源的範圍。預設值為 "*"。
spec.matchResources.matchPolicy (string)
matchPolicy 定義如何使用 "MatchResources" 列表來匹配傳入請求。允許的值為 "Exact" 或 "Equivalent"。
Exact: 僅當請求精確匹配指定規則時才匹配。例如,如果部署可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 進行修改,而 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,那麼對 apps/v1beta1 或 extensions/v1beta1 的請求將不會發送到 ValidatingAdmissionPolicy。Equivalent: 如果修改了規則中列出的資源,即使是透過其他 API 組或版本,也會匹配請求。例如,如果部署可以透過 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.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)時才使用物件選擇器,因為終端使用者可以透過設定標籤來跳過准入 webhook。預設為空的 LabelSelector,匹配所有內容。
spec.matchResources.resourceRules ([]NamedRuleWithOperations)
原子性:在合併期間將被替換
ResourceRules 描述 ValidatingAdmissionPolicy 匹配哪些資源/子資源上的哪些操作。如果操作匹配任何規則,則策略會關心該操作。
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' 指代 pod。'pods/log' 指代 pod 的 log 子資源。'' 指代所有資源,但不包括子資源。'pods/' 指代 pod 的所有子資源。'/scale' 指代所有 scale 子資源。'/*' 指代所有資源及其子資源。
如果存在萬用字元,則驗證規則將確保資源彼此不重疊。
根據包圍物件,可能不允許子資源。必需。
spec.matchResources.resourceRules.scope (string)
scope 指定此規則的範圍。有效值為 "Cluster"(叢集)、"Namespaced"(名稱空間)和 ""(所有)。"Cluster" 表示只有叢集範圍的資源會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源會匹配此規則。"" 表示沒有範圍限制。子資源匹配其父資源的範圍。預設值為 "*"。
spec.paramRef (ParamRef)
paramRef 指定用於配置准入控制策略的引數資源。它應該指向繫結到的 ValidatingAdmissionPolicy 的 ParamKind 中指定的資源型別。如果策略指定了 ParamKind,並且 ParamRef 引用的資源不存在,則此繫結被視為配置錯誤,並且將應用 ValidatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,則忽略此欄位,並且在沒有引數的情況下評估規則。
ParamRef 描述如何定位要用作策略繫結應用規則表示式輸入的引數。
spec.paramRef.name (string)
name 是被引用資源的名稱。
name
或selector
之一必須設定,但name
和selector
是互斥屬性。如果一個設定,另一個必須取消設定。可以透過設定
name
欄位,將selector
留空,並在paramKind
為名稱空間範圍時設定名稱空間來為所有準入請求配置單個引數。spec.paramRef.namespace (string)
namespace 是引用資源的名稱空間。允許將引數搜尋限制在特定名稱空間。適用於
name
和selector
欄位。可以透過在策略中指定名稱空間範圍的
paramKind
並將此欄位留空來使用每個名稱空間引數。如果
paramKind
是叢集範圍的,則此欄位必須未設定。設定此欄位會導致配置錯誤。如果
paramKind
是名稱空間作用域的,並且此欄位留空,則在評估准入物件時將使用該物件的名稱空間。請注意,如果留空,繫結不得匹配任何叢集範圍的資源,否則將導致錯誤。
spec.paramRef.parameterNotFoundAction (string)
parameterNotFoundAction
控制繫結在資源存在、名稱或選擇器有效但沒有引數匹配繫結時的行為。如果值設定為Allow
,則未匹配的引數將被視為繫結成功驗證。如果設定為Deny
,則未匹配的引數將受到策略failurePolicy
的約束。允許的值為
Allow
或Deny
必需
spec.paramRef.selector (LabelSelector)
selector 可用於根據其標籤匹配多個引數物件。提供 selector: {} 以匹配 ParamKind 的所有資源。
如果找到多個引數,它們都將使用策略表示式進行評估,結果將進行 AND 運算。
name
或selector
之一必須設定,但name
和selector
是互斥屬性。如果一個設定,另一個必須取消設定。
spec.policyName (string)
PolicyName 引用 ValidatingAdmissionPolicyBinding 所繫結的 ValidatingAdmissionPolicy 名稱。如果引用的資源不存在,則此繫結被視為無效並將被忽略。必需。
spec.validationActions ([]string)
Set: 合併時將保留唯一值
validationActions 宣告引用的 ValidatingAdmissionPolicy 的 Validations 如何執行。如果驗證評估為 false,則始終根據這些操作執行。
ValidatingAdmissionPolicy 的 FailurePolicy 定義的失敗僅在 FailurePolicy 設定為 Fail 時根據這些操作執行,否則失敗將被忽略。這包括編譯錯誤、執行時錯誤和策略的配置錯誤。
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 (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 (ValidatingAdmissionPolicySpec)
ValidatingAdmissionPolicy 的期望行為的規範。
ValidatingAdmissionPolicySpec 是 AdmissionPolicy 的期望行為的規範。
spec.auditAnnotations ([]AuditAnnotation)
原子性:在合併期間將被替換
auditAnnotations 包含 CEL 表示式,用於為 API 請求的審計事件生成審計註解。validations 和 auditAnnotations 不能都為空;至少需要一個 Validations 或 AuditAnnotations。
AuditAnnotation 描述瞭如何為 API 請求生成審計註解。
spec.auditAnnotations.key (string), required
key 指定審計註解的鍵。ValidatingAdmissionPolicy 的審計註解鍵必須是唯一的。鍵必須是合格的名稱([A-Za-z0-9][-A-Za-z0-9_.]*),長度不超過 63 位元組。
該鍵與 ValidatingAdmissionPolicy 的資源名稱結合,構建審計註解鍵:" {ValidatingAdmissionPolicy name}/{key}"。
如果准入 webhook 使用與此 ValidatingAdmissionPolicy 相同的資源名稱和相同的審計註解鍵,則註解鍵將相同。在這種情況下,第一個帶有該鍵的註解將被包含在審計事件中,所有後續帶有相同鍵的註解將被丟棄。
必需。
spec.auditAnnotations.valueExpression (string), required
valueExpression 代表由 CEL 評估以生成審計註解值的表示式。該表示式必須評估為字串或 null 值。如果表示式評估為字串,則審計註解將包含字串值。如果表示式評估為 null 或空字串,則將省略審計註解。valueExpression 的長度不能超過 5kb。如果 valueExpression 的結果長度超過 10kb,則會被截斷為 10kb。
如果多個 ValidatingAdmissionPolicyBinding 資源匹配 API 請求,則將為每個繫結評估 valueExpression。透過 valueExpressions 生成的所有唯一值將以逗號分隔的列表連線。
必需。
spec.failurePolicy (string)
failurePolicy 定義瞭如何處理准入策略的失敗。失敗可能來自 CEL 表示式解析錯誤、型別檢查錯誤、執行時錯誤以及無效或配置錯誤的策略定義或繫結。
如果 spec.paramKind 引用了不存在的 Kind,則策略無效。如果 spec.paramRef.name 引用了不存在的資源,則繫結無效。
failurePolicy 不定義如何處理評估為 false 的驗證。
當 failurePolicy 設定為 Fail 時,ValidatingAdmissionPolicyBinding 的 validationActions 定義瞭如何執行失敗。
允許的值為 Ignore 或 Fail。預設為 Fail。
spec.matchConditions ([]MatchCondition)
補丁策略:在鍵
name
上合併對映:合併時將保留鍵名上的唯一值
MatchConditions 是請求匹配此規則(在規則、namespaceSelector 和 objectSelector 已匹配後)必須滿足的條件列表。一個空的 matchConditions 列表匹配所有請求。最多允許 64 個 match conditions。
如果提供了引數物件,可以透過
params
控制代碼以與驗證表示式相同的方式訪問它。確切的匹配邏輯是(按順序)
- 如果任何 matchCondition 評估為 FALSE,則跳過策略。
- 如果所有 matchConditions 評估為 TRUE,則評估策略。
- 如果任何 matchCondition 評估為錯誤(但沒有一個為 FALSE)
- 如果 failurePolicy=Fail,則拒絕請求
- 如果 failurePolicy=Ignore,則跳過策略
MatchCondition 表示 Webhook 必須滿足才能傳送請求的條件。
spec.matchConditions.expression (string),必需
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' - 一個 CEL ResourceCheck,由 'authorizer' 構建並配置了請求資源。關於 CEL 的文件:https://kubernetes.club.tw/docs/reference/using-api/cel/
必需。
spec.matchConditions.name (string),必需
Name 是此匹配條件的識別符號,用於 MatchConditions 的戰略合併,以及為日誌記錄提供識別符號。一個好的名稱應該具有描述性,與相關表示式相符。名稱必須是一個合格的名稱,由字母數字字元、'-'、'' 或 '.' 組成,並且必須以字母數字字元開頭和結尾(例如,'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 指定此策略旨在驗證哪些資源。如果請求匹配所有 Constraint,則 AdmissionPolicy 會關心該請求。但是,為了防止叢集陷入無法透過 API 恢復的不穩定狀態,ValidatingAdmissionPolicy 不能匹配 ValidatingAdmissionPolicy 和 ValidatingAdmissionPolicyBinding。必需。
MatchResources 根據物件是否滿足匹配條件來決定是否對該物件執行准入控制策略。排除規則優先於包含規則(如果資源同時匹配兩者,則被排除)。
spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)
原子性:在合併期間將被替換
ExcludeResourceRules 描述 ValidatingAdmissionPolicy 不應關心哪些資源/子資源上的哪些操作。排除規則優先於包含規則(如果資源同時匹配兩者,則被排除)
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' 指代 pod。'pods/log' 指代 pod 的 log 子資源。'' 指代所有資源,但不包括子資源。'pods/' 指代 pod 的所有子資源。'/scale' 指代所有 scale 子資源。'/*' 指代所有資源及其子資源。
如果存在萬用字元,則驗證規則將確保資源彼此不重疊。
根據包圍物件,可能不允許子資源。必需。
spec.matchConstraints.excludeResourceRules.scope (string)
scope 指定此規則的範圍。有效值為 "Cluster"(叢集)、"Namespaced"(名稱空間)和 ""(所有)。"Cluster" 表示只有叢集範圍的資源會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源會匹配此規則。"" 表示沒有範圍限制。子資源匹配其父資源的範圍。預設值為 "*"。
spec.matchConstraints.matchPolicy (string)
matchPolicy 定義如何使用 "MatchResources" 列表來匹配傳入請求。允許的值為 "Exact" 或 "Equivalent"。
Exact: 僅當請求精確匹配指定規則時才匹配。例如,如果部署可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 進行修改,而 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,那麼對 apps/v1beta1 或 extensions/v1beta1 的請求將不會發送到 ValidatingAdmissionPolicy。Equivalent: 如果修改了規則中列出的資源,即使是透過其他 API 組或版本,也會匹配請求。例如,如果部署可以透過 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.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)時才使用物件選擇器,因為終端使用者可以透過設定標籤來跳過准入 webhook。預設為空的 LabelSelector,匹配所有內容。
spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)
原子性:在合併期間將被替換
ResourceRules 描述 ValidatingAdmissionPolicy 匹配哪些資源/子資源上的哪些操作。如果操作匹配任何規則,則策略會關心該操作。
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' 指代 pod。'pods/log' 指代 pod 的 log 子資源。'' 指代所有資源,但不包括子資源。'pods/' 指代 pod 的所有子資源。'/scale' 指代所有 scale 子資源。'/*' 指代所有資源及其子資源。
如果存在萬用字元,則驗證規則將確保資源彼此不重疊。
根據包圍物件,可能不允許子資源。必需。
spec.matchConstraints.resourceRules.scope (string)
scope 指定此規則的範圍。有效值為 "Cluster"(叢集)、"Namespaced"(名稱空間)和 ""(所有)。"Cluster" 表示只有叢集範圍的資源會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源會匹配此規則。"" 表示沒有範圍限制。子資源匹配其父資源的範圍。預設值為 "*"。
spec.paramKind (ParamKind)
ParamKind 指定用於引數化此策略的資源種類。如果缺失,則此策略沒有引數,並且 param CEL 變數不會提供給驗證表示式。如果 ParamKind 引用了不存在的 Kind,則此策略定義配置錯誤,並應用 FailurePolicy。如果指定了 paramKind,但在 ValidatingAdmissionPolicyBinding 中未設定 paramRef,則 params 變數將為 null。
spec.paramKind.apiVersion (string)
APIVersion 是資源所屬的 API 組版本。格式為 "group/version"。必需。
spec.paramKind.kind (string)
Kind 是資源所屬的 API 型別。必需。
spec.validations ([]Validation)
原子性:在合併期間將被替換
Validations 包含用於應用驗證的 CEL 表示式。Validations 和 AuditAnnotations 不能都為空;至少需要一個 Validations 或 AuditAnnotations。
spec.validations.expression (string), required
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 Authorizer。可能用於對請求的主體(使用者或服務帳戶)執行授權檢查。請參閱 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
- 'authorizer.requestResource' - 從 'authorizer' 構造並使用請求資源配置的 CEL ResourceCheck。
apiVersion
、kind
、metadata.name
和metadata.generateName
始終可從物件的根訪問。其他元資料屬性均不可訪問。只有形式為
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的屬性名稱才是可訪問的。可訪問的屬性名稱在表示式中訪問時會根據以下規則進行轉義:- '' 轉義為 'underscores**'- '.' 轉義為 'dot'- '-' 轉義為 'dash'- '/' 轉義為 'slash'- 完全匹配 CEL 保留關鍵字的屬性名稱將轉義為 '{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 (string)
Message 表示驗證失敗時顯示的錯誤訊息。如果 Expression 包含換行符,則 Message 是必需的。Message 不能包含換行符。如果未設定,則 Message 為 "failed rule: {Rule}"。例如:"必須是一個主機匹配 spec.host 的 URL"。如果 Expression 包含換行符,Message 是必需的。Message 不能包含換行符。如果未設定,則 Message 為 "failed Expression: {Expression}"。
spec.validations.messageExpression (string)
messageExpression 聲明瞭一個 CEL 表示式,該表示式在規則失敗時評估為返回的驗證失敗訊息。由於 messageExpression 用作失敗訊息,因此它必須評估為字串。如果 validation 中同時存在 message 和 messageExpression,則驗證失敗時將使用 messageExpression。如果 messageExpression 導致執行時錯誤,則執行時錯誤將被記錄,並且驗證失敗訊息將按 messageExpression 欄位未設定的方式生成。如果 messageExpression 評估為空字串、僅包含空格的字串或包含換行符的字串,則驗證失敗訊息也將按 messageExpression 欄位未設定的方式生成,並且 messageExpression 生成空字串/僅包含空格的字串/包含換行符的字串的事實將被記錄。messageExpression 可以訪問與
expression
相同的變數,但 'authorizer' 和 'authorizer.requestResource' 除外。示例:"object.x 必須小於 max ("+string(params.max)+")"spec.validations.reason (string)
Reason 表示為什麼此驗證失敗的可機器讀取的描述。如果這是列表中第一個失敗的驗證,則該原因以及相應的 HTTP 響應程式碼將用於向客戶端的 HTTP 響應。目前支援的原因有:"Unauthorized"(未授權)、"Forbidden"(禁止)、"Invalid"(無效)、"RequestEntityTooLarge"(請求實體過大)。如果未設定,則向客戶端的響應中使用 StatusReasonInvalid。
spec.variables ([]Variable)
補丁策略:在鍵
name
上合併對映:合併時將保留鍵名上的唯一值
Variables 包含可以在其他表示式的組合中使用的變數定義。每個變數都定義為一個命名的 CEL 表示式。此處定義的變數將在策略的其他表示式的
variables
下可用,但不包括 MatchConditions,因為 MatchConditions 是在策略的其餘部分之前評估的。變數的表示式可以引用列表中更早定義的其他變數,但不能引用之後的變數。因此,Variables 必須按首次出現和無環的順序排序。
Variable 是用於組合的變數定義。變數定義為命名錶達式。
spec.variables.expression (string),必需
Expression 是將作為變數值評估的表示式。CEL 表示式可以訪問與 Validation 中 CEL 表示式相同的識別符號。
spec.variables.name (string),必需
Name 是變數的名稱。該名稱必須是有效的 CEL 識別符號,並且在所有變數中是唯一的。可以透過
variables
在其他表示式中訪問該變數。例如,如果名稱是 "foo",則該變數可作為variables.foo
訪問。
status (ValidatingAdmissionPolicyStatus)
ValidatingAdmissionPolicy 的狀態,包括有助於確定策略是否按預期行為工作的警告。由系統填充。只讀。
ValidatingAdmissionPolicyStatus 代表准入驗證策略的狀態。
status.conditions ([]Condition)
對映:合併時將保留鍵型別上的唯一值
Conditions 代表策略當前狀態的最新可用觀察。
Condition 包含此 API 資源當前狀態的一個方面的詳細資訊。
status.conditions.lastTransitionTime (Time), required
lastTransitionTime 是條件上次從一種狀態轉換到另一種狀態的時間。這應該是底層條件發生變化的時間。如果不知道,則使用 API 欄位發生變化的時間是可接受的。
Time 是 time.Time 的一個包裝器,支援正確地編組到 YAML 和 JSON。提供了 time 包提供的許多工廠方法的包裝器。
status.conditions.message (string), required
message 是一個人類可讀的訊息,指示有關轉換的詳細資訊。這可能是一個空字串。
status.conditions.reason (string), required
reason 包含一個程式識別符號,指示條件最後一次轉換的原因。特定條件型別的生產者可以定義此欄位的預期值和含義,以及這些值是否被視為保證的 API。該值應為 CamelCase 字串。此欄位不能為空。
status.conditions.status (string), required
條件狀態,True、False、Unknown 之一。
status.conditions.type (string), required
條件型別,CamelCase 或 foo.example.com/CamelCase。
status.conditions.observedGeneration (int64)
observedGeneration 代表條件設定的基礎 .metadata.generation。例如,如果 .metadata.generation 當前為 12,但 .status.conditions[x].observedGeneration 為 9,則該條件相對於例項的當前狀態已過時。
status.observedGeneration (int64)
控制器觀察到的代。
status.typeChecking (TypeChecking)
每個表示式的型別檢查結果。此欄位的存在表示型別檢查已完成。
TypeChecking 包含 ValidatingAdmissionPolicy 中表達式的型別檢查結果
status.typeChecking.expressionWarnings ([]ExpressionWarning)
原子性:在合併期間將被替換
每個表示式的型別檢查警告。
ExpressionWarning 是針對特定表示式的警告資訊。
status.typeChecking.expressionWarnings.fieldRef (string), required
指向引用表示式的欄位的路徑。例如,對 validations 中第一個專案的表示式的引用是 "spec.validations[0].expression"
status.typeChecking.expressionWarnings.warning (string), required
人類可讀的型別檢查資訊內容。每行警告包含表示式被檢查的型別,然後是編譯器的型別檢查錯誤。
ValidatingAdmissionPolicyBindingList
ValidatingAdmissionPolicyBindingList 是 ValidatingAdmissionPolicyBinding 的列表。
items ([]ValidatingAdmissionPolicyBinding), required
PolicyBinding 列表。
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 (ListMeta)
標準列表元資料。更多資訊: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
操作
get
讀取指定的 ValidatingAdmissionPolicyBinding
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicyBinding 的名稱
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicyBinding): OK
401: 未授權
list
列出或觀察 Kind 為 ValidatingAdmissionPolicyBinding 的物件
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
引數
allowWatchBookmarks (在查詢中): boolean
continue (在查詢中): string
fieldSelector (在查詢中): string
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
watch (在查詢中): boolean
響應
200 (ValidatingAdmissionPolicyBindingList): OK
401: 未授權
create
建立一個 ValidatingAdmissionPolicyBinding
HTTP 請求
POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
引數
body: ValidatingAdmissionPolicyBinding, required
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicyBinding): OK
201 (ValidatingAdmissionPolicyBinding): Created
202 (ValidatingAdmissionPolicyBinding): Accepted
401: 未授權
update
替換指定的 ValidatingAdmissionPolicyBinding
HTTP 請求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicyBinding 的名稱
body: ValidatingAdmissionPolicyBinding, required
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicyBinding): OK
201 (ValidatingAdmissionPolicyBinding): Created
401: 未授權
patch
部分更新指定的 ValidatingAdmissionPolicyBinding
HTTP 請求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicyBinding 的名稱
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicyBinding): OK
201 (ValidatingAdmissionPolicyBinding): Created
401: 未授權
delete
刪除一個 ValidatingAdmissionPolicyBinding
HTTP 請求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicyBinding 的名稱
body: DeleteOptions
dryRun (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
pretty (在查詢中): string
propagationPolicy (在查詢中): string
響應
200 (Status): OK
202 (Status): 已接受
401: 未授權
deletecollection
刪除 ValidatingAdmissionPolicyBinding 的集合
HTTP 請求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
引數
body: DeleteOptions
continue (在查詢中): string
dryRun (在查詢中): string
fieldSelector (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
propagationPolicy (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
響應
200 (Status): OK
401: 未授權
本頁面是自動生成的。
如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。