MutatingAdmissionPolicy v1beta1
apiVersion: admissionregistration.k8s.io/v1beta1
import "k8s.io/api/admissionregistration/v1beta1"
MutatingAdmissionPolicy
MutatingAdmissionPolicy 描述了允許修改進入准入鏈的物件的准入變更策略的定義。
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingAdmissionPolicy
metadata (ObjectMeta)
標準物件元資料;更多資訊: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
spec (MutatingAdmissionPolicySpec)
MutatingAdmissionPolicy 期望行為的規範。
MutatingAdmissionPolicySpec 是准入策略期望行為的規範。
spec.failurePolicy (string)
failurePolicy 定義瞭如何處理准入策略的失敗。失敗可能來自 CEL 表示式解析錯誤、型別檢查錯誤、執行時錯誤以及無效或配置錯誤的策略定義或繫結。
如果 paramKind 引用不存在的 Kind,則策略無效。如果 paramRef.name 引用不存在的資源,則繫結無效。
failurePolicy 不定義如何處理評估為 false 的驗證。
允許的值為 Ignore 或 Fail。預設為 Fail。
spec.matchConditions ([]MatchCondition)
補丁策略:在鍵
name
上合併對映:合併時將保留鍵名上的唯一值
matchConditions 是請求透過驗證必須滿足的條件列表。匹配條件篩選已被 matchConstraints 匹配的請求。空的 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 的策略性合併,以及提供日誌記錄的識別符號。一個好的名稱應該能夠描述相關的表示式。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 指定此策略旨在驗證的資源。如果請求匹配 *所有* 約束,MutatingAdmissionPolicy 會關注該請求。但是,為了防止叢集因 API MutatingAdmissionPolicy 無法匹配 MutatingAdmissionPolicy 和 MutatingAdmissionPolicyBinding 而進入無法恢復的不穩定狀態,MutatingAdmissionPolicy 不能匹配 MutatingAdmissionPolicy 和 MutatingAdmissionPolicyBinding。允許 CREATE、UPDATE 和 CONNECT 操作。不允許匹配 DELETE 操作。'*' 匹配 CREATE、UPDATE 和 CONNECT。必需。
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 進行修改,但“規則”僅包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,則對 apps/v1beta1 或 extensions/v1beta1 的請求將不會發送到 ValidatingAdmissionPolicy。Equivalent:如果請求透過另一個 API 組或版本修改了規則中列出的資源,則匹配請求。例如,如果部署可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 進行修改,並且“規則”僅包含
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.mutations ([]Mutation)
原子性:在合併期間將被替換
mutations 包含對匹配物件執行的操作。mutations 不得為空;至少需要一個 mutation。mutations 按順序評估,並根據 reinvocationPolicy 重新呼叫。策略的 mutations 會為該策略的每個繫結呼叫,並且 mutations 的重新呼叫是基於每個繫結進行的。
Mutation 指定用於應用 Mutation 的 CEL 表示式。
spec.mutations.patchType (string),必需
patchType 指示使用的補丁策略。允許的值為 "ApplyConfiguration" 和 "JSONPatch"。必需。
spec.mutations.applyConfiguration (ApplyConfiguration)
applyConfiguration 定義了物件的期望配置值。配置使用 結構化合並差異 應用到准入物件。CEL 表示式用於建立應用配置。
ApplyConfiguration 定義了物件的期望配置值。
spec.mutations.applyConfiguration.expression (string)
表示式將由 CEL 評估以建立應用配置。參考:https://github.com/google/cel-spec
應用配置在 CEL 中使用物件初始化宣告。例如,此 CEL 表示式返回一個應用配置以設定單個欄位
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' - 評估的策略繫結所引用的引數資源。僅當策略具有 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_.-/]*
的屬性名是可訪問的。必需。
spec.mutations.jsonPatch (JSONPatch)
jsonPatch 定義了執行物件變異的 JSON 補丁 操作。CEL 表示式用於建立 JSON 補丁。
spec.mutations.jsonPatch.expression (string)
表示式將由 CEL 評估以建立 JSON 補丁。參考:https://github.com/google/cel-spec
表示式必須返回一個 JSONPatch 值陣列。
例如,這個 CEL 表示式返回一個 JSON 補丁,用於有條件地修改一個值。
[ JSONPatch{op: "test", path: "/spec/example", value: "Red"}, JSONPatch{op: "replace", path: "/spec/example", value: "Green"} ]
要為補丁值定義一個物件,請使用 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 補丁操作的 CEL 型別。JSONPatch 包含 'op'、'from'、'path' 和 'value' 欄位。有關詳細資訊,請參閱 JSON 補丁。'value' 欄位可以設定為以下任何型別:字串、整數、陣列、對映或物件。如果設定,'path' 和 'from' 欄位必須設定為 JSON 指標 字串,其中 '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' - 評估的策略繫結所引用的引數資源。僅當策略具有 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。
CEL 表示式可以使用 Kubernetes CEL 函式庫 以及
- 'jsonpatch.escapeKey' - 執行 JSONPatch 鍵轉義。'~' 和 '/' 分別轉義為 '~0' 和 '~1'。
只有形式為
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的屬性名是可訪問的。必需。
spec.paramKind (ParamKind)
paramKind 指定用於引數化此策略的資源型別。如果省略,則此策略沒有引數,並且不會向驗證表示式提供 param CEL 變數。如果 paramKind 引用不存在的型別,則此策略定義配置錯誤並應用 FailurePolicy。如果在 MutatingAdmissionPolicyBinding 中指定了 paramKind 但未設定 paramRef,則 params 變數將為 null。
spec.paramKind.apiVersion (string)
APIVersion 是資源所屬的 API 組版本。格式為 "group/version"。必需。
spec.paramKind.kind (string)
Kind 是資源所屬的 API 型別。必需。
spec.reinvocationPolicy (string)
reinvocationPolicy 指示在一個准入評估中,突變是否可以針對每個 MutatingAdmissionPolicyBinding 多次呼叫。允許的值為 "Never" 和 "IfNeeded"。
Never:這些突變在單個准入評估中不會針對每個繫結被呼叫多次。
IfNeeded:這些突變可能會在單個准入請求中針對每個繫結被多次呼叫,並且不保證與其他准入外掛、准入 webhook、此策略的繫結和准入策略的順序。突變僅在突變在此突變被呼叫後改變物件時才被重新呼叫。必需。
spec.variables ([]Variable)
原子性:在合併期間將被替換
variables 包含可在其他表示式組合中使用的變數定義。每個變數都定義為一個命名的 CEL 表示式。這裡定義的變數將在策略的其他表示式中的
variables
下可用,但 matchConditions 除外,因為 matchConditions 在策略的其餘部分之前進行評估。變數的表示式可以引用列表中較早定義的其他變數,但不能引用後面定義的變數。因此,變數必須按首次出現的順序排序且無迴圈。
Variable 是用於組合的變數定義。變數定義為命名錶達式。
spec.variables.expression (string),必需
Expression 是將作為變數值評估的表示式。CEL 表示式可以訪問與 Validation 中 CEL 表示式相同的識別符號。
spec.variables.name (string),必需
Name 是變數的名稱。名稱必須是有效的 CEL 識別符號,並且在所有變數中是唯一的。變數可以透過
variables
在其他表示式中訪問。例如,如果名稱為 "foo",則變數將作為variables.foo
可用。
MutatingAdmissionPolicyBinding
MutatingAdmissionPolicyBinding 將 MutatingAdmissionPolicy 與引數化資源繫結。MutatingAdmissionPolicyBinding 和可選的引數資源共同定義了叢集管理員如何為叢集配置策略。
對於給定的准入請求,每個繫結將導致其策略被評估 N 次,其中對於不使用引數的策略/繫結,N 為 1,否則 N 為繫結選擇的引數數量。每次評估都受 執行時成本預算 的限制。
新增/刪除策略、繫結或引數不會影響給定的(策略、繫結、引數)組合是否在其自身的 CEL 預算內。
apiVersion (string)
APIVersion 定義了此物件表示的版本化 schema。伺服器應將已識別的 schema 轉換為最新的內部值,並可能拒絕未識別的值。更多資訊: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 (MutatingAdmissionPolicyBindingSpec)
MutatingAdmissionPolicyBinding 期望行為的規範。
MutatingAdmissionPolicyBindingSpec 是 MutatingAdmissionPolicyBinding 的規範。
spec.matchResources (MatchResources)
matchResources 限制了哪些資源與此繫結匹配並可能被其修改。請注意,如果 matchResources 匹配一個資源,則該資源還必須匹配策略的 matchConstraints 和 matchConditions,然後才能被修改。當 matchResources 未設定時,它不限制資源匹配,只有策略的 matchConstraints 和 matchConditions 必須匹配才能修改資源。此外,matchResources.resourceRules 是可選的,未設定時不會限制匹配。請注意,這與 MutatingAdmissionPolicy matchConstraints 不同,後者要求 resourceRules。允許 CREATE、UPDATE 和 CONNECT 操作。不允許匹配 DELETE 操作。'*' 匹配 CREATE、UPDATE 和 CONNECT。
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 進行修改,但“規則”僅包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,則對 apps/v1beta1 或 extensions/v1beta1 的請求將不會發送到 ValidatingAdmissionPolicy。Equivalent:如果請求透過另一個 API 組或版本修改了規則中列出的資源,則匹配請求。例如,如果部署可以透過 apps/v1、apps/v1beta1 和 extensions/v1beta1 進行修改,並且“規則”僅包含
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 指定用於配置准入控制策略的引數資源。它應該指向繫結 MutatingAdmissionPolicy 的 spec.ParamKind 中指定的型別的資源。如果策略指定了 ParamKind 並且 ParamRef 引用的資源不存在,則此繫結被認為是配置錯誤的,並應用 MutatingAdmissionPolicy 的 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 引用 MutatingAdmissionPolicy 的名稱,MutatingAdmissionPolicyBinding 繫結到該名稱。如果引用的資源不存在,則此繫結被視為無效並將被忽略。必需。
MutatingAdmissionPolicyList
MutatingAdmissionPolicyList 是 MutatingAdmissionPolicy 的列表。
items ([]MutatingAdmissionPolicy),必需
ValidatingAdmissionPolicy 列表。
apiVersion (string)
APIVersion 定義了此物件表示的版本化 schema。伺服器應將已識別的 schema 轉換為最新的內部值,並可能拒絕未識別的值。更多資訊: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
讀取指定的 MutatingAdmissionPolicy
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies/{name}
引數
name (在路徑中): string,必填
MutatingAdmissionPolicy 的名稱
pretty (在查詢中): string
響應
200 (MutatingAdmissionPolicy):正常
401: 未授權
list
列出或監視 MutatingAdmissionPolicy 型別的物件
HTTP 請求
GET /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies
引數
allowWatchBookmarks (在查詢中): boolean
continue (在查詢中): string
fieldSelector (在查詢中): string
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
watch (在查詢中): boolean
響應
200 (MutatingAdmissionPolicyList):正常
401: 未授權
create
建立一個 MutatingAdmissionPolicy
HTTP 請求
POST /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies
引數
body: MutatingAdmissionPolicy,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (MutatingAdmissionPolicy):正常
201 (MutatingAdmissionPolicy):已建立
202 (MutatingAdmissionPolicy):已接受
401: 未授權
update
替換指定的 MutatingAdmissionPolicy
HTTP 請求
PUT /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies/{name}
引數
name (在路徑中): string,必填
MutatingAdmissionPolicy 的名稱
body: MutatingAdmissionPolicy,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (MutatingAdmissionPolicy):正常
201 (MutatingAdmissionPolicy):已建立
401: 未授權
patch
部分更新指定的 MutatingAdmissionPolicy
HTTP 請求
PATCH /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies/{name}
引數
name (在路徑中): string,必填
MutatingAdmissionPolicy 的名稱
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (MutatingAdmissionPolicy):正常
201 (MutatingAdmissionPolicy):已建立
401: 未授權
delete
刪除 MutatingAdmissionPolicy
HTTP 請求
DELETE /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies/{name}
引數
name (在路徑中): string,必填
MutatingAdmissionPolicy 的名稱
body: DeleteOptions
dryRun (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
pretty (在查詢中): string
propagationPolicy (在查詢中): string
響應
200 (Status): OK
202 (Status): 已接受
401: 未授權
deletecollection
刪除 MutatingAdmissionPolicy 集合
HTTP 請求
DELETE /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies
引數
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 專案的其他地方進行。