MutatingAdmissionPolicyBinding v1alpha1
apiVersion: admissionregistration.k8s.io/v1alpha1
import "k8s.io/api/admissionregistration/v1alpha1"
MutatingAdmissionPolicyBinding
MutatingAdmissionPolicyBinding 將 MutatingAdmissionPolicy 與引數化資源繫結。MutatingAdmissionPolicyBinding 和可選的引數資源共同定義了叢集管理員如何為叢集配置策略。
對於給定的 admission 請求,每個 binding 將會使其策略被評估 N 次,其中 N 對於不使用引數的策略/binding 為 1,否則 N 是 binding 選擇的引數的數量。每次評估都受到 執行時成本預算 的限制。
新增/刪除策略、binding 或引數不會影響給定的 (policy, binding, param) 組合是否在自己的 CEL 預算內。
apiVersion: admissionregistration.k8s.io/v1alpha1
kind: MutatingAdmissionPolicyBinding
metadata (ObjectMeta)
標準物件元資料;更多資訊: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
spec (MutatingAdmissionPolicyBindingSpec)
MutatingAdmissionPolicyBinding 的期望行為的規範。
MutatingAdmissionPolicyBindingSpec 是 MutatingAdmissionPolicyBinding 的規範。
spec.matchResources (MatchResources)
matchResources 限制了哪些資源會匹配此 binding,並可能被它修改。請注意,如果 matchResources 匹配到一個資源,該資源在被修改之前必須也匹配到策略的 matchConstraints 和 matchConditions。當 matchResources 未設定時,它不會約束資源匹配,只有策略的 matchConstraints 和 matchConditions 匹配後資源才會被修改。此外,matchResources.resourceRules 是可選的,在未設定時不會約束匹配。請注意,這與 MutatingAdmissionPolicy 的 matchConstraints 不同,後者要求 resourceRules 必須設定。允許 CREATE、UPDATE 和 CONNECT 操作。DELETE 操作可能不會被匹配。'*' 匹配 CREATE、UPDATE 和 CONNECT。
MatchResources 根據物件是否滿足匹配條件來決定是否在物件上執行 admission 控制策略。排除規則優先於包含規則(如果一個資源同時匹配兩者,則被排除)。
spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)
原子性:在合併期間將被替換
ExcludeResourceRules 描述了策略不關心的資源/子資源上的操作。排除規則優先於包含規則(如果一個資源同時匹配兩者,則被排除)。
NamedRuleWithOperations 是帶有 ResourceNames 的 Operations 和 Resources 的元組。
spec.matchResources.excludeResourceRules.apiGroups ([]string)
原子性:在合併期間將被替換
APIGroups 是資源所屬的 API 組。'' 表示所有組。如果存在 '',則切片的長度必須為 1。必需。
spec.matchResources.excludeResourceRules.apiVersions ([]string)
原子性:在合併期間將被替換
APIVersions 是資源所屬的 API 版本。'' 表示所有版本。如果存在 '',則切片的長度必須為 1。必需。
spec.matchResources.excludeResourceRules.operations ([]string)
原子性:在合併期間將被替換
Operations 是准入鉤子關心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有這些操作以及將來新增的任何准入操作。如果存在 '*',則切片的長度必須為 1。必需。
spec.matchResources.excludeResourceRules.resourceNames ([]string)
原子性:在合併期間將被替換
ResourceNames 是規則適用的可選名稱白名單。空集表示允許所有內容。
spec.matchResources.excludeResourceRules.resources ([]string)
原子性:在合併期間將被替換
Resources 是此規則適用的資源列表。
例如:'pods' 指 pods。'pods/log' 指 pods 的 log 子資源。'*' 指所有資源,但不包括子資源。'pods/*' 指 pods 的所有子資源。'*/scale' 指所有 scale 子資源。'*/*' 指所有資源及其子資源。
如果存在萬用字元,則驗證規則將確保資源彼此不重疊。
根據包圍物件,可能不允許子資源。必需。
spec.matchResources.excludeResourceRules.scope (string)
scope 指定了此規則的範圍。有效值為 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有叢集範圍的資源會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源會匹配此規則。"*" 表示沒有範圍限制。子資源與其父資源的範圍匹配。預設為 "*".
spec.matchResources.matchPolicy (string)
matchPolicy 定義如何使用 "MatchResources" 列表來匹配傳入請求。允許的值為 "Exact" 或 "Equivalent"。
Exact: 僅當請求與指定規則完全匹配時才匹配。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,而 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,那麼 admission 策略將不會考慮對 apps/v1beta1 或 extensions/v1beta1 API 組的請求。Equivalent: 如果請求修改了規則中列出的資源,即使是透過其他 API 組或版本,也會匹配。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,而 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,那麼 admission 策略 **會** 考慮對 apps/v1beta1 或 extensions/v1beta1 API 組發出的請求。API 伺服器會在必要時將請求轉換為匹配的資源 API。
預設為 "Equivalent"
spec.matchResources.namespaceSelector (LabelSelector)
NamespaceSelector 決定是否根據名稱空間是否匹配選擇器來執行 admission 控制策略。如果物件本身是名稱空間,則匹配在 object.metadata.labels 上執行。如果物件是其他叢集範圍的資源,它從不跳過策略。
例如,要對任何名稱空間不與 "runlevel" 的 "0" 或 "1" 關聯的物件執行 webhook,您將設定選擇器如下:"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
如果您想僅對任何與 "environment" 的 "prod" 或 "staging" 關聯的名稱空間的物件執行策略,您將設定選擇器如下:"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
有關標籤選擇器的更多示例,請參閱 https://kubernetes.club.tw/docs/concepts/overview/working-with-objects/labels/。
預設為空 LabelSelector,它匹配所有內容。
spec.matchResources.objectSelector (LabelSelector)
ObjectSelector 決定是根據物件是否具有匹配的標籤來執行策略。objectSelector 會針對傳送到策略表示式 (CEL) 的 oldObject 和 newObject 進行評估,如果任一物件匹配選擇器,則認為匹配。空物件 (建立時的 oldObject,或刪除時的 newObject) 或不能有標籤的物件 (如 DeploymentRollback 或 PodProxyOptions 物件) 不被視為匹配。僅當 webhook 是 opt-in 時才使用 objectSelector,因為終端使用者可以透過設定標籤來跳過 admission webhook。預設為空的 LabelSelector,匹配所有內容。
spec.matchResources.resourceRules ([]NamedRuleWithOperations)
原子性:在合併期間將被替換
ResourceRules 描述了 admission 策略匹配的資源/子資源上的操作。如果一個操作匹配 *任何* Rule,那麼策略就會關注它。
NamedRuleWithOperations 是帶有 ResourceNames 的 Operations 和 Resources 的元組。
spec.matchResources.resourceRules.apiGroups ([]string)
原子性:在合併期間將被替換
APIGroups 是資源所屬的 API 組。'' 表示所有組。如果存在 '',則切片的長度必須為 1。必需。
spec.matchResources.resourceRules.apiVersions ([]string)
原子性:在合併期間將被替換
APIVersions 是資源所屬的 API 版本。'' 表示所有版本。如果存在 '',則切片的長度必須為 1。必需。
spec.matchResources.resourceRules.operations ([]string)
原子性:在合併期間將被替換
Operations 是准入鉤子關心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有這些操作以及將來新增的任何准入操作。如果存在 '*',則切片的長度必須為 1。必需。
spec.matchResources.resourceRules.resourceNames ([]string)
原子性:在合併期間將被替換
ResourceNames 是規則適用的可選名稱白名單。空集表示允許所有內容。
spec.matchResources.resourceRules.resources ([]string)
原子性:在合併期間將被替換
Resources 是此規則適用的資源列表。
例如:'pods' 指 pods。'pods/log' 指 pods 的 log 子資源。'*' 指所有資源,但不包括子資源。'pods/*' 指 pods 的所有子資源。'*/scale' 指所有 scale 子資源。'*/*' 指所有資源及其子資源。
如果存在萬用字元,則驗證規則將確保資源彼此不重疊。
根據包圍物件,可能不允許子資源。必需。
spec.matchResources.resourceRules.scope (string)
scope 指定了此規則的範圍。有效值為 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有叢集範圍的資源會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源會匹配此規則。"*" 表示沒有範圍限制。子資源與其父資源的範圍匹配。預設為 "*".
spec.paramRef (ParamRef)
paramRef 指定了用於配置 admission 控制策略的引數資源。它應該指向所繫結的 MutatingAdmissionPolicy 的 spec.ParamKind 指定的型別資源。如果策略指定了 ParamKind 並且 ParamRef 引用的資源不存在,則此 binding 被視為配置錯誤,並且將應用 MutatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,則忽略此欄位,規則將在沒有引數的情況下進行評估。
ParamRef 描述如何定位要用作策略繫結應用規則表示式輸入的引數。
spec.paramRef.name (string)
name
是被引用的資源的名稱。name
和selector
是互斥的屬性。如果設定了一個,則必須取消設定另一個。spec.paramRef.namespace (string)
namespace 是引用資源的名稱空間。允許將引數搜尋限制在特定名稱空間。適用於
name
和selector
欄位。可以透過在策略中指定名稱空間範圍的
paramKind
並將此欄位留空來使用每個名稱空間引數。如果
paramKind
是叢集範圍的,則此欄位必須未設定。設定此欄位會導致配置錯誤。如果
paramKind
是名稱空間範圍的,當此欄位留空時,將使用正在被評估的 admission 物件的名稱空間。請注意,如果留空,binding 不能匹配任何叢集範圍的資源,否則將導致錯誤。
spec.paramRef.parameterNotFoundAction (string)
parameterNotFoundAction
控制當資源存在,並且 name 或 selector 有效,但 binding 沒有匹配到任何引數時的行為。如果值設定為Allow
,那麼沒有匹配的引數將被視為 binding 成功驗證。如果設定為Deny
,那麼沒有匹配的引數將受到策略的failurePolicy
的約束。允許的值為
Allow
或Deny
。預設為Deny
。spec.paramRef.selector (LabelSelector)
selector 可用於根據其標籤匹配多個引數物件。提供 selector: {} 以匹配 ParamKind 的所有資源。
如果找到多個引數,它們都將使用策略表示式進行評估,結果將進行 AND 運算。
name
或selector
之一必須設定,但name
和selector
是互斥屬性。如果一個設定,另一個必須取消設定。
spec.policyName (string)
policyName 引用了 MutatingAdmissionPolicyBinding 所繫結的 MutatingAdmissionPolicy 的名稱。如果引用的資源不存在,則此 binding 被視為無效並將被忽略。必需。
MutatingAdmissionPolicy
MutatingAdmissionPolicy 描述了允許修改進入准入鏈的物件的准入變更策略的定義。
apiVersion (string)
APIVersion 定義了該表示形式的物件的版本化模式。伺服器應將識別的模式轉換為最新的內部值,並可能拒絕不受識別的值。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
Kind 是一個字串值,表示此物件代表的 REST 資源。伺服器可以從客戶端提交請求的端點推斷出此值。無法更新。採用 CamelCase。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata (ObjectMeta)
標準物件元資料;更多資訊: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
spec (MutatingAdmissionPolicySpec)
Admission 策略的期望行為的規範。
MutatingAdmissionPolicySpec 是期望的 admission 策略行為的規範。
spec.failurePolicy (string)
failurePolicy 定義瞭如何處理准入策略的失敗。失敗可能來自 CEL 表示式解析錯誤、型別檢查錯誤、執行時錯誤以及無效或配置錯誤的策略定義或繫結。
如果 paramKind 引用了一個不存在的 Kind,則策略無效。如果 paramRef.name 引用了一個不存在的資源,則 binding 無效。
failurePolicy 不定義如何處理評估為 false 的驗證。
允許的值為 Ignore 或 Fail。預設為 Fail。
spec.matchConditions ([]MatchCondition)
補丁策略:在鍵
name
上合併對映:合併時將保留鍵名上的唯一值
matchConditions 是一個條件列表,請求必須滿足這些條件才能被驗證。Match conditions 會過濾掉已經由 matchConstraints 匹配的請求。一個空的 matchConditions 列表會匹配所有請求。最多允許 64 個 match conditions。
如果提供了引數物件,可以透過
params
控制代碼以與驗證表示式相同的方式訪問它。確切的匹配邏輯是(按順序)
- 如果任何 matchCondition 評估為 FALSE,則跳過策略。
- 如果所有 matchConditions 評估為 TRUE,則評估策略。
- 如果任何 matchCondition 評估為錯誤(但沒有一個為 FALSE)
- 如果 failurePolicy=Fail,則拒絕請求
- 如果 failurePolicy=Ignore,則跳過策略
spec.matchConditions.expression (string),必需
Expression 表示將由 CEL 評估的表示式。必須評估為布林值。CEL 表示式可以訪問 AdmissionRequest 和 Authorizer 的內容,這些內容組織成 CEL 變數
'object' - 來自傳入請求的物件。對於 DELETE 請求,該值為 null。'oldObject' - 現有的物件。對於 CREATE 請求,該值為 null。'request' - admission 請求的屬性 (/pkg/apis/admission/types.go#AdmissionRequest)。'authorizer' - 一個 CEL Authorizer。可用於對請求的principal (使用者或服務賬戶) 執行授權檢查。參見 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' - 一個從 'authorizer' 構建並配置了請求資源的 CEL ResourceCheck。CEL 文件:https://kubernetes.club.tw/docs/reference/using-api/cel/
必需。
spec.matchConditions.name (string),必需
Name 是此 match condition 的識別符號,用於 MatchConditions 的戰略合併,以及提供日誌記錄的識別符號。一個好的名稱應該具有描述性,能反映相關的表示式。Name 必須是一個由字母數字字元、'-'、'*' 或 '.' 組成的合格名稱,並且必須以字母數字字元開頭和結尾(例如,'MyName',或 'my.name',或 '123-abc',驗證使用的正則表示式是 '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]'),並可選擇包含 DNS 子域名字首和 '/'(例如 'example.com/MyName')。
必需。
spec.matchConstraints (MatchResources)
matchConstraints 指定了此策略旨在驗證的資源。如果請求匹配 *所有* Constraints,則 MutatingAdmissionPolicy 會關注該請求。但是,為了防止叢集陷入無法透過 API 恢復的不穩定狀態,MutatingAdmissionPolicy 不能匹配 MutatingAdmissionPolicy 和 MutatingAdmissionPolicyBinding。允許 CREATE、UPDATE 和 CONNECT 操作。DELETE 操作可能不會被匹配。'*' 匹配 CREATE、UPDATE 和 CONNECT。必需。
MatchResources 根據物件是否滿足匹配條件來決定是否在物件上執行 admission 控制策略。排除規則優先於包含規則(如果一個資源同時匹配兩者,則被排除)。
spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)
原子性:在合併期間將被替換
ExcludeResourceRules 描述了策略不關心的資源/子資源上的操作。排除規則優先於包含規則(如果一個資源同時匹配兩者,則被排除)。
NamedRuleWithOperations 是帶有 ResourceNames 的 Operations 和 Resources 的元組。
spec.matchConstraints.excludeResourceRules.apiGroups ([]string)
原子性:在合併期間將被替換
APIGroups 是資源所屬的 API 組。'' 表示所有組。如果存在 '',則切片的長度必須為 1。必需。
spec.matchConstraints.excludeResourceRules.apiVersions ([]string)
原子性:在合併期間將被替換
APIVersions 是資源所屬的 API 版本。'' 表示所有版本。如果存在 '',則切片的長度必須為 1。必需。
spec.matchConstraints.excludeResourceRules.operations ([]string)
原子性:在合併期間將被替換
Operations 是准入鉤子關心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有這些操作以及將來新增的任何准入操作。如果存在 '*',則切片的長度必須為 1。必需。
spec.matchConstraints.excludeResourceRules.resourceNames ([]string)
原子性:在合併期間將被替換
ResourceNames 是規則適用的可選名稱白名單。空集表示允許所有內容。
spec.matchConstraints.excludeResourceRules.resources ([]string)
原子性:在合併期間將被替換
Resources 是此規則適用的資源列表。
例如:'pods' 指 pods。'pods/log' 指 pods 的 log 子資源。'*' 指所有資源,但不包括子資源。'pods/*' 指 pods 的所有子資源。'*/scale' 指所有 scale 子資源。'*/*' 指所有資源及其子資源。
如果存在萬用字元,則驗證規則將確保資源彼此不重疊。
根據包圍物件,可能不允許子資源。必需。
spec.matchConstraints.excludeResourceRules.scope (string)
scope 指定了此規則的範圍。有效值為 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有叢集範圍的資源會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源會匹配此規則。"*" 表示沒有範圍限制。子資源與其父資源的範圍匹配。預設為 "*".
spec.matchConstraints.matchPolicy (string)
matchPolicy 定義如何使用 "MatchResources" 列表來匹配傳入請求。允許的值為 "Exact" 或 "Equivalent"。
Exact: 僅當請求與指定規則完全匹配時才匹配。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,而 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,那麼 admission 策略將不會考慮對 apps/v1beta1 或 extensions/v1beta1 API 組的請求。Equivalent: 如果請求修改了規則中列出的資源,即使是透過其他 API 組或版本,也會匹配。例如,如果 deployments 可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改,而 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,那麼 admission 策略 **會** 考慮對 apps/v1beta1 或 extensions/v1beta1 API 組發出的請求。API 伺服器會在必要時將請求轉換為匹配的資源 API。
預設為 "Equivalent"
spec.matchConstraints.namespaceSelector (LabelSelector)
NamespaceSelector 決定是否根據名稱空間是否匹配選擇器來執行 admission 控制策略。如果物件本身是名稱空間,則匹配在 object.metadata.labels 上執行。如果物件是其他叢集範圍的資源,它從不跳過策略。
例如,要對任何名稱空間不與 "runlevel" 的 "0" 或 "1" 關聯的物件執行 webhook,您將設定選擇器如下:"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
如果您想僅對任何與 "environment" 的 "prod" 或 "staging" 關聯的名稱空間的物件執行策略,您將設定選擇器如下:"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
有關標籤選擇器的更多示例,請參閱 https://kubernetes.club.tw/docs/concepts/overview/working-with-objects/labels/。
預設為空 LabelSelector,它匹配所有內容。
spec.matchConstraints.objectSelector (LabelSelector)
ObjectSelector 決定是根據物件是否具有匹配的標籤來執行策略。objectSelector 會針對傳送到策略表示式 (CEL) 的 oldObject 和 newObject 進行評估,如果任一物件匹配選擇器,則認為匹配。空物件 (建立時的 oldObject,或刪除時的 newObject) 或不能有標籤的物件 (如 DeploymentRollback 或 PodProxyOptions 物件) 不被視為匹配。僅當 webhook 是 opt-in 時才使用 objectSelector,因為終端使用者可以透過設定標籤來跳過 admission webhook。預設為空的 LabelSelector,匹配所有內容。
spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)
原子性:在合併期間將被替換
ResourceRules 描述了 admission 策略匹配的資源/子資源上的操作。如果一個操作匹配 *任何* Rule,那麼策略就會關注它。
NamedRuleWithOperations 是帶有 ResourceNames 的 Operations 和 Resources 的元組。
spec.matchConstraints.resourceRules.apiGroups ([]string)
原子性:在合併期間將被替換
APIGroups 是資源所屬的 API 組。'' 表示所有組。如果存在 '',則切片的長度必須為 1。必需。
spec.matchConstraints.resourceRules.apiVersions ([]string)
原子性:在合併期間將被替換
APIVersions 是資源所屬的 API 版本。'' 表示所有版本。如果存在 '',則切片的長度必須為 1。必需。
spec.matchConstraints.resourceRules.operations ([]string)
原子性:在合併期間將被替換
Operations 是准入鉤子關心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有這些操作以及將來新增的任何准入操作。如果存在 '*',則切片的長度必須為 1。必需。
spec.matchConstraints.resourceRules.resourceNames ([]string)
原子性:在合併期間將被替換
ResourceNames 是規則適用的可選名稱白名單。空集表示允許所有內容。
spec.matchConstraints.resourceRules.resources ([]string)
原子性:在合併期間將被替換
Resources 是此規則適用的資源列表。
例如:'pods' 指 pods。'pods/log' 指 pods 的 log 子資源。'*' 指所有資源,但不包括子資源。'pods/*' 指 pods 的所有子資源。'*/scale' 指所有 scale 子資源。'*/*' 指所有資源及其子資源。
如果存在萬用字元,則驗證規則將確保資源彼此不重疊。
根據包圍物件,可能不允許子資源。必需。
spec.matchConstraints.resourceRules.scope (string)
scope 指定了此規則的範圍。有效值為 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有叢集範圍的資源會匹配此規則。Namespace API 物件是叢集範圍的。"Namespaced" 表示只有名稱空間範圍的資源會匹配此規則。"*" 表示沒有範圍限制。子資源與其父資源的範圍匹配。預設為 "*".
spec.mutations ([]Mutation)
原子性:在合併期間將被替換
mutations 包含對匹配物件執行的操作。mutations 不能為空;至少需要一個 mutation。mutations 按順序評估,並根據 reinvocationPolicy 進行重呼叫。策略的 mutations 會為該策略的每個 binding 呼叫,並且 mutations 的重呼叫是基於每個 binding 進行的。
Mutation 指定了用於應用 Mutation 的 CEL 表示式。
spec.mutations.patchType (string), required
patchType 指示使用的 patch 策略。允許的值為 "ApplyConfiguration" 和 "JSONPatch"。必需。
spec.mutations.applyConfiguration (ApplyConfiguration)
applyConfiguration 定義了物件的期望配置值。配置使用 structured merge diff 應用到 admission 物件。CEL 表示式用於建立 apply 配置。
ApplyConfiguration 定義了物件的期望配置值。
spec.mutations.applyConfiguration.expression (string)
expression 將由 CEL 評估以建立 apply 配置。參考:https://github.com/google/cel-spec
Apply 配置是在 CEL 中使用物件初始化宣告的。例如,這個 CEL 表示式返回一個用於設定單個欄位的 apply 配置。
Object{ spec: Object.spec{ serviceAccountName: "example" } }
應用配置不能修改原子結構體、對映或陣列,因為這有意外刪除未包含在應用配置中的值的風險。
CEL 表示式可以訪問建立應用配置所需的以下物件型別:
- 'Object' - 資源的 CEL 型別。 - 'Object.<fieldName>' - 物件欄位的 CEL 型別 (例如 'Object.spec') - 'Object.<fieldName1>.<fieldName2>...<fieldNameN>` - 巢狀欄位的 CEL 型別 (例如 'Object.spec.containers')
CEL 表示式可以訪問 API 請求的內容,這些內容被組織成 CEL 變數以及其他一些有用的變數:
- 'object' - 來自傳入請求的物件。對於 DELETE 請求,該值為 null。- 'oldObject' - 現有的物件。對於 CREATE 請求,該值為 null。- 'request' - API 請求的屬性 (參考)。- 'params' - 被評估的策略 binding 引用的引數資源。僅當策略有 ParamKind 時才填充。- 'namespaceObject' - 傳入物件所屬的名稱空間物件。對於叢集範圍的資源,該值為 null。- 'variables' - 複合變數的對映,從其名稱到其延遲評估的值。例如,名為 'foo' 的變數可以透過 'variables.foo' 訪問。
- 'authorizer' - 一個 CEL Authorizer。可用於對請求的principal (使用者或服務賬戶) 執行授權檢查。參見 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
- 'authorizer.requestResource' - 從 'authorizer' 構造並使用請求資源配置的 CEL ResourceCheck。
apiVersion
、kind
、metadata.name
和metadata.generateName
始終可從物件的根訪問。其他元資料屬性均不可訪問。只有形式為
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的屬性名是可訪問的。必需。
spec.mutations.jsonPatch (JSONPatch)
jsonPatch 定義了一個 JSON patch 操作,用於對物件執行 mutation。CEL 表示式用於建立 JSON patch。
spec.mutations.jsonPatch.expression (string)
expression 將由 CEL 評估以建立 JSON patch。參考:https://github.com/google/cel-spec
expression 必須返回一個 JSONPatch 值陣列。
例如,這個 CEL 表示式返回一個 JSON 補丁,用於有條件地修改一個值。
[ JSONPatch{op: "test", path: "/spec/example", value: "Red"}, JSONPatch{op: "replace", path: "/spec/example", value: "Green"} ]
要定義 patch 值中的物件,請使用 Object 型別。例如:
[ JSONPatch{ op: "add", path: "/spec/selector", value: Object.spec.selector{matchLabels: {"environment": "test"}} } ]
要使用包含 '/' 和 '~' 的字串作為 JSONPatch 路徑鍵,請使用 "jsonpatch.escapeKey"。例如:
[ JSONPatch{ op: "add", path: "/metadata/labels/" + jsonpatch.escapeKey("example.com/environment"), value: "test" }, ]
CEL 表示式可以訪問建立 JSON 補丁和物件所需的型別:
- 'JSONPatch' - JSON Patch 操作的 CEL 型別。JSONPatch 具有 'op'、'from'、'path' 和 'value' 欄位。有關更多詳細資訊,請參閱 JSON patch。'value' 欄位可以設定為以下任何一種:字串、整數、陣列、對映或物件。如果設定,'path' 和 'from' 欄位必須設定為 JSON pointer 字串,其中 'jsonpatch.escapeKey()' CEL 函式可用於轉義包含 '/' 和 '~' 的路徑鍵。
- 'Object' - 資源的 CEL 型別。 - 'Object.<fieldName>' - 物件欄位的 CEL 型別 (例如 'Object.spec') - 'Object.<fieldName1>.<fieldName2>...<fieldNameN>` - 巢狀欄位的 CEL 型別 (例如 'Object.spec.containers')
CEL 表示式可以訪問 API 請求的內容,這些內容被組織成 CEL 變數以及其他一些有用的變數:
- 'object' - 來自傳入請求的物件。對於 DELETE 請求,該值為 null。- 'oldObject' - 現有的物件。對於 CREATE 請求,該值為 null。- 'request' - API 請求的屬性 (參考)。- 'params' - 被評估的策略 binding 引用的引數資源。僅當策略有 ParamKind 時才填充。- 'namespaceObject' - 傳入物件所屬的名稱空間物件。對於叢集範圍的資源,該值為 null。- 'variables' - 複合變數的對映,從其名稱到其延遲評估的值。例如,名為 'foo' 的變數可以透過 'variables.foo' 訪問。
- 'authorizer' - 一個 CEL Authorizer。可用於對請求的principal (使用者或服務賬戶) 執行授權檢查。參見 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
- 'authorizer.requestResource' - 從 'authorizer' 構造並使用請求資源配置的 CEL ResourceCheck。
CEL 表示式可以訪問 Kubernetes CEL 函式庫 以及
- 'jsonpatch.escapeKey' - 執行 JSONPatch 鍵轉義。'*' 和 '/' 分別被轉義為 '~0' 和 '~1')。
只有形式為
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的屬性名是可訪問的。必需。
spec.paramKind (ParamKind)
paramKind 指定了用於引數化此策略的資源型別。如果缺失,此策略沒有引數,並且 param CEL 變數不會提供給驗證表示式。如果 paramKind 引用了不存在的 Kind,則此策略定義配置錯誤,並應用 FailurePolicy。如果指定了 paramKind 但 MutatingAdmissionPolicyBinding 中未設定 paramRef,則 params 變數將為 null。
spec.paramKind.apiVersion (string)
APIVersion 是資源所屬的 API 組版本。格式為 "group/version"。必需。
spec.paramKind.kind (string)
Kind 是資源所屬的 API 型別。必需。
spec.reinvocationPolicy (string)
reinvocationPolicy 指示是否可以在單個 admission 評估中對每個 MutatingAdmissionPolicyBinding 呼叫多次 mutations。允許的值為 "Never" 和 "IfNeeded"。
Never: 這些 mutations 在單個 binding 的單個 admission 評估中不會被呼叫多次。
IfNeeded: 這些 mutations 在單個 admission 請求中可能被呼叫多次,並且與其他 admission 外掛、admission webhooks、此策略的 bindings 和 admission 策略的順序沒有保證。僅當 mutations 在此 mutation 被呼叫後更改了物件時,才會重新呼叫 mutations。必需。
spec.variables ([]Variable)
原子性:在合併期間將被替換
variables 包含可用於組合其他表示式的變數的定義。每個變數定義為一個命名的 CEL 表示式。此處定義的變數將在策略的其他表示式的
variables
下可用,但 matchConditions 除外,因為 matchConditions 在策略的其餘部分之前進行評估。變數的表示式可以引用列表中前面定義的其他變數,但不能引用後面的變數。因此,變數必須按首次出現的順序排序並且是無環的。
spec.variables.expression (string),必需
Expression 是將作為變數值評估的表示式。CEL 表示式可以訪問與 Validation 中 CEL 表示式相同的識別符號。
spec.variables.name (string),必需
Name 是變數的名稱。該名稱必須是有效的 CEL 識別符號,並且在所有變數中是唯一的。可以透過
variables
在其他表示式中訪問該變數。例如,如果名稱是 "foo",則該變數將可用為variables.foo
。
MutatingAdmissionPolicyBindingList
MutatingAdmissionPolicyBindingList 是 MutatingAdmissionPolicyBinding 的列表。
items ([]MutatingAdmissionPolicyBinding), 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
讀取指定的 MutatingAdmissionPolicyBinding
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}
引數
name (在路徑中): string,必填
MutatingAdmissionPolicyBinding 的名稱
pretty (在查詢中): string
響應
200 (MutatingAdmissionPolicyBinding): OK
401: 未授權
list
列出或監視 MutatingAdmissionPolicyBinding 型別的物件
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings
引數
allowWatchBookmarks (在查詢中): boolean
continue (在查詢中): string
fieldSelector (在查詢中): string
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
watch (在查詢中): boolean
響應
200 (MutatingAdmissionPolicyBindingList): OK
401: 未授權
create
建立一個 MutatingAdmissionPolicyBinding
HTTP 請求
POST /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings
引數
body: MutatingAdmissionPolicyBinding, required
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (MutatingAdmissionPolicyBinding): OK
201 (MutatingAdmissionPolicyBinding): Created
202 (MutatingAdmissionPolicyBinding): Accepted
401: 未授權
update
替換指定的 MutatingAdmissionPolicyBinding
HTTP 請求
PUT /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}
引數
name (在路徑中): string,必填
MutatingAdmissionPolicyBinding 的名稱
body: MutatingAdmissionPolicyBinding, required
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (MutatingAdmissionPolicyBinding): OK
201 (MutatingAdmissionPolicyBinding): Created
401: 未授權
patch
部分更新指定的 MutatingAdmissionPolicyBinding
HTTP 請求
PATCH /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}
引數
name (在路徑中): string,必填
MutatingAdmissionPolicyBinding 的名稱
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (MutatingAdmissionPolicyBinding): OK
201 (MutatingAdmissionPolicyBinding): Created
401: 未授權
delete
刪除一個 MutatingAdmissionPolicyBinding
HTTP 請求
DELETE /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}
引數
name (在路徑中): string,必填
MutatingAdmissionPolicyBinding 的名稱
body: DeleteOptions
dryRun (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
pretty (在查詢中): string
propagationPolicy (在查詢中): string
響應
200 (Status): OK
202 (Status): 已接受
401: 未授權
deletecollection
刪除 MutatingAdmissionPolicyBinding 的集合
HTTP 請求
DELETE /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings
引數
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 專案的其他地方進行。