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驗證請求和使用者送出資源的資訊。