ValidatingAdmissionPolicy
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingAdmissionPolicy
ValidatingAdmissionPolicy 描述了准入驗證策略的定義,該策略接受或拒絕物件而不對其進行更改。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata (ObjectMeta)
標準物件元資料;更多資訊: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
spec (ValidatingAdmissionPolicySpec)
ValidatingAdmissionPolicy 期望行為的規範。
ValidatingAdmissionPolicySpec 是 AdmissionPolicy 期望行為的規範。
spec.auditAnnotations ([]AuditAnnotation)
原子性:在合併期間將被替換
auditAnnotations 包含用於為 API 請求的審計事件生成審計註解的 CEL 表示式。validations 和 auditAnnotations 不能同時為空;validations 或 auditAnnotations 至少需要一個。
AuditAnnotation 描述如何為 API 請求生成審計註解。
spec.auditAnnotations.key (string),必需
key 指定審計註解鍵。ValidatingAdmissionPolicy 的審計註解鍵必須唯一。鍵必須是合格的名稱 ([A-Za-z0-9][-A-Za-z0-9_.]*),長度不超過 63 位元組。
鍵與 ValidatingAdmissionPolicy 的資源名稱組合以構建審計註解鍵:"{ValidatingAdmissionPolicy 名稱}/{鍵}"。
如果准入 Webhook 使用與此 ValidatingAdmissionPolicy 相同的資源名稱和相同的審計註解鍵,則註解鍵將相同。在這種情況下,第一個帶有該鍵的註解將包含在審計事件中,所有後續帶有相同鍵的註解將被丟棄。
必需。
spec.auditAnnotations.valueExpression (string),必需
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 個匹配條件。
如果提供了引數物件,可以透過
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 授權器。可用於對請求的主體(使用者或服務帳戶)執行授權檢查。請參閱 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 是此匹配條件的識別符號,用於 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 指定此策略旨在驗證哪些資源。如果請求匹配所有約束,則 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" 表示只有叢集範圍的資源將匹配此規則。名稱空間 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 是可選加入時才使用物件選擇器,因為終端使用者可以透過設定標籤來跳過准入 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" 表示只有叢集範圍的資源將匹配此規則。名稱空間 API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源將匹配此規則。"" 表示沒有範圍限制。子資源匹配其父資源的範圍。預設為 "*"。
spec.paramKind (ParamKind)
ParamKind 指定用於引數化此策略的資源型別。如果缺失,則此策略沒有引數,並且不會向驗證表示式提供 param CEL 變數。如果 ParamKind 引用不存在的型別,則此策略定義配置錯誤,並應用 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),必需
Expression 表示將由 CEL 評估的表示式。參考:https://github.com/google/cel-spec CEL 表示式可以訪問 API 請求/響應的內容,這些內容組織成 CEL 變數以及其他一些有用的變數
- 'object' - 來自傳入請求的物件。對於 DELETE 請求,該值為 null。 - 'oldObject' - 現有物件。對於 CREATE 請求,該值為 null。 - 'request' - API 請求的屬性(ref)。 - '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
始終可從物件的根訪問。其他元資料屬性均不可訪問。僅形式為
[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 表示驗證失敗時顯示的訊息。如果表示式包含換行符,則訊息是必需的。訊息不能包含換行符。如果未設定,則訊息為 "failed rule: {Rule}"。例如 "必須是主機匹配 spec.host 的 URL"。如果表示式包含換行符,則訊息是必需的。訊息不能包含換行符。如果未設定,則訊息為 "failed Expression: {Expression}"。
spec.validations.messageExpression (string)
messageExpression 聲明瞭一個 CEL 表示式,該表示式在規則失敗時評估為返回的驗證失敗訊息。由於 messageExpression 用作失敗訊息,因此它必須評估為字串。如果驗證中同時存在 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 在策略的其餘部分之前評估。變數的表示式可以引用列表中較早定義的其他變數,但不能引用後面的變數。因此,變數必須按首次出現的順序排序且無環。
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)
對映:合併時將保留鍵型別上的唯一值
條件表示策略當前狀態的最新可用觀察結果。
Condition 包含此 API 資源當前狀態的一個方面的詳細資訊。
status.conditions.lastTransitionTime (Time),必需
lastTransitionTime 是條件上次從一種狀態轉換到另一種狀態的時間。這應該是底層條件發生變化的時間。如果不知道,則使用 API 欄位發生變化的時間是可接受的。
Time 是 time.Time 的一個包裝器,支援正確地編組到 YAML 和 JSON。提供了 time 包提供的許多工廠方法的包裝器。
status.conditions.message (string),必需
message 是一個人類可讀的訊息,指示有關轉換的詳細資訊。這可能是一個空字串。
status.conditions.reason (string),必需
reason 包含一個程式化識別符號,指示條件上次轉換的原因。特定條件型別的生產者可以定義此欄位的預期值和含義,以及這些值是否被視為有保證的 API。該值應為 CamelCase 字串。此欄位不能為空。
status.conditions.status (string),必需
條件狀態,True、False、Unknown 之一。
status.conditions.type (string),必需
條件型別,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),必需
引用表示式的欄位路徑。例如,對驗證中第一個項的表示式的引用是 "spec.validations[0].expression"
status.typeChecking.expressionWarnings.warning (string),必需
以人類可讀形式表示的型別檢查資訊內容。警告的每一行包含表示式所檢查的型別,後跟來自編譯器的型別檢查錯誤。
ValidatingAdmissionPolicyList
ValidatingAdmissionPolicyList 是 ValidatingAdmissionPolicy 的列表。
items ([]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 (ListMeta)
標準列表元資料。更多資訊: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
ValidatingAdmissionPolicyBinding
ValidatingAdmissionPolicyBinding 將 ValidatingAdmissionPolicy 與引數化資源繫結。ValidatingAdmissionPolicyBinding 和引數 CRD 共同定義了叢集管理員如何為叢集配置策略。
對於給定的准入請求,每個繫結將導致其策略被評估 N 次,其中 N 對於不使用引數的策略/繫結為 1,否則 N 為繫結選擇的引數數量。
策略的 CEL 表示式的計算 CEL 成本必須低於最大 CEL 預算。每次評估策略都會獲得獨立的 CEL 成本預算。新增/刪除策略、繫結或引數不會影響給定的(策略、繫結、引數)組合是否在其自身的 CEL 預算內。
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 (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" 表示只有叢集範圍的資源將匹配此規則。名稱空間 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 是可選加入時才使用物件選擇器,因為終端使用者可以透過設定標籤來跳過准入 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" 表示只有叢集範圍的資源將匹配此規則。名稱空間 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 引用 ValidatingAdmissionPolicy 名稱,ValidatingAdmissionPolicyBinding 繫結到該名稱。如果引用的資源不存在,則此繫結被認為是無效的並將被忽略。必需。
spec.validationActions ([]string)
Set: 合併時將保留唯一值
validationActions 聲明瞭如何強制執行引用 ValidatingAdmissionPolicy 的驗證。如果驗證評估為 false,則始終根據這些操作強制執行。
ValidatingAdmissionPolicy 的 FailurePolicy 定義的失敗僅在 FailurePolicy 設定為 Fail 時才根據這些操作強制執行,否則將忽略失敗。這包括編譯錯誤、執行時錯誤和策略的配置錯誤。
validationActions 被宣告為一組操作值。順序無關緊要。validationActions 不得包含相同操作的重複項。
支援的操作值為
"Deny" 指定驗證失敗會導致請求被拒絕。
"Warn" 指定驗證失敗將透過 HTTP 警告標頭報告給請求客戶端,警告程式碼為 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 警告標頭中重複驗證失敗。
必需。
操作
get
讀取指定的 ValidatingAdmissionPolicy
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicy 的名稱
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicy): OK
401: 未授權
get
讀取指定 ValidatingAdmissionPolicy 的狀態
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicy 的名稱
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicy): OK
401: 未授權
list
列出或監視 ValidatingAdmissionPolicy 型別的物件
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
引數
allowWatchBookmarks (在查詢中): boolean
continue (在查詢中): string
fieldSelector (在查詢中): string
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
watch (在查詢中): boolean
響應
200 (ValidatingAdmissionPolicyList): OK
401: 未授權
create
建立 ValidatingAdmissionPolicy
HTTP 請求
POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
引數
body: ValidatingAdmissionPolicy,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已建立
202 (ValidatingAdmissionPolicy): 已接受
401: 未授權
update
替換指定的 ValidatingAdmissionPolicy
HTTP 請求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicy 的名稱
body: ValidatingAdmissionPolicy,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已建立
401: 未授權
update
替換指定的 ValidatingAdmissionPolicy 的狀態
HTTP 請求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicy 的名稱
body: ValidatingAdmissionPolicy,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已建立
401: 未授權
patch
部分更新指定的 ValidatingAdmissionPolicy
HTTP 請求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicy 的名稱
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已建立
401: 未授權
patch
部分更新指定的 ValidatingAdmissionPolicy 的狀態
HTTP 請求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicy 的名稱
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已建立
401: 未授權
delete
刪除 ValidatingAdmissionPolicy
HTTP 請求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
引數
name (在路徑中): string,必填
ValidatingAdmissionPolicy 的名稱
body: DeleteOptions
dryRun (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
pretty (在查詢中): string
propagationPolicy (在查詢中): string
響應
200 (Status): OK
202 (Status): 已接受
401: 未授權
deletecollection
刪除 ValidatingAdmissionPolicy 集合
HTTP 請求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
引數
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 專案的其他地方進行。