天天看點

帶你讀《雲原生應用開發 Operator原理與實踐》第二章 Operator 原理2.3 Kube-APIServer 介紹(六)

2.3.4       準入控制

準入控制器是對象持久化之前插入的一段代碼,在身份認證和鑒權步驟之後,攔截對KubernetesAPIServer的請求。它們以插件的形式運作在 APIServer中,作用分别是變更使用者送出的資源對象資訊、校驗使用者送出的資源對象資訊,或者兩者都有。

準入控制過程分為兩個階段:第一階段,運作MutatingAdmission控制器;第二階段,運作   ValidatingAdmission   控制器。如果任一階段的任何控制器拒絕了該請求,則整個請求将立即被拒絕,并且将錯誤傳回給最終使用者。

APIServer 支援同時開啟多個準入控制器的功能,通過   --enable-admission-plugins配置,如果開啟了多個準入控制器,在運作時會按照順序執行準入控制器。下面是幾種常用的準入控制器。

(1)  AlwaysPullImages:此準入控制器會将 Pod 的拉取鏡像政策強制修改成 Always,保護多租戶叢集中使用者鏡像。

(2)  PodNodeSelector:此準入控制器通過讀取名稱空間批注和全局配置來預設并限制在 Namespace中可以使用哪些節點選擇器。

(3)  DefaultStorageClass:此準入控制器會為 PersistentVolumeClaim 對象添加預設的 StorageClass。

(4)  ExtendedResourceToleration:叢集中如果有特殊硬體節點,為了避免不讓不使用這些特殊硬體的 Pod 運作在這些節點上,一般會給節點打污點。Pod要想運作在這個節點上必須容忍污點,這個控制器會自動為 Pod配置容忍污點。

(5) EventRateLimit:此準入控制器限制 Event請求的速度,緩解了 APIServer的壓力。 

(6)  ImagePolicyWebhook:通 過 WebHook決 定 Image策 略, 需 要 同 時 配 置--admission-control-config-file。

(7)  LimitPodHardAntiAffinityTopology:此準入控制器在 Pod親和性和反親和性中限制 Pod的 TopologyKey隻能是 kubernetes.io/hostname,否則拒絕。

(8)  LimitRanger:此準入控制器會為 Pod設定預設資源請求和限制,要提前建立LimitRange對象。

(9)  MutatingAdmissionWebhook:此準入控制器會向WebHook伺服器發送請求,用于變更使用者送出的資源對象資訊。

(10)   NamespaceAutoProvision:此準入控制器檢查Namespace範圍内資源的請求,如果不存在 Namespace,則需要建立。

(11)  NamespaceExists:此準入控制器檢查 Namespace 範圍内資源的請求,如果不存在 Namespace,那麼拒絕請求。

(12)  NamespaceLifecycle:此準入控制器會禁止在一個正在被停止的Namespace中建立對象,并拒絕使用不存在的 Namespace的請求,它還會禁止删除 Default、Kube-system和Kube-public這 3個 Namespace。

(13)   NodeRestriction:此準入控制器會限制 Kubelet 隻可以修改 Node和 Pod 對象。

(14)  OwnerReferencesPermissionEnforcement:此準入控制器保護對對象的metadata.ownerReferences的通路,隻有對該對象具有“删除”權限的使用者才能更改它。

(15)  PersistentVolumeClaimResize:此準入控制器會禁止修改 PersistentVolumeClaim的大小,除非在 StorageClass中設定了 allowVolumeExpansion為 True。

(16)   PodSecurityPolicy:此準入控制器在 Pod 建立和修改時起作用,并根據請求的安全上下文和可用的Pod安全政策确定是否拒絕 Pod。

(17)  ResourceQuota:此準入控制器将觀察傳入的請 求,并確定它不違反Namespace中 ResourceQuota對象中枚舉的任何限制。 如果在 Kubernetes部署中使用ResourceQuota對象,則必須使用此準入控制器來實施配額限制。

(18)   ServiceAccount:此準入控制器實作 ServiceAccounts 的自動化。

(19)   StorageObjectInUseProtection:此準入控制器會保護正在使用的PV和 PVC不被删除。

(20)   TaintNodesByCondition:此準入控制器将新建立的 Node标記為 NotReady和NoSchedule。

(21)  ValidatingAdmissionWebhook:此準入控制器使用 WebHook驗證請求和使用者送出資源的資訊。

繼續閱讀