有一些很棒的admission controllers,例如DefaultStorageClass,StorageObjectInUseProtection,PersistentVolumeClaimResize,它们可以为您提供一些k8最佳实践 集群。
要启用准入控制器,您必须具有对k8s api服务器的管理员访问权限,但在GKE上则没有。
那么我们如何在GKE中启用这些准入控制器?
答案 0 :(得分:1)
无法修改启用的准入控制器,因为这将需要修改--enable-admission-plugins
API服务器配置选项,而这在GKE上是不可能的,目前也没有任何其他方法来设置此选项。
现在,查看提到的每个单独的控制器:
DefaultStorageClass -在GKE中启用了此准入控制器。您可以检查标准的预先创建的存储类是否具有storageclass.kubernetes.io/is-default-class: "true"
批注。为了默认使用其他SC,请将此注释从标准存储类中删除,然后将其添加到您选择的SC中。
StorageObjectInUseProtection -在GKE中启用了此准入控制器,您可以观察到kubernetes.io/pv-protection
和kubernetes.io/pvc-protectionfinalizers
已分别添加到PV中。使用中的PVC可防止其被删除。
PersistentVolumeClaimResize -此准入控制器也在GKE中启用。您可以通过创建带有allowVolumeExpansion: false
批注1的存储类(请注意标准SC允许扩展),创建PVC并尝试增加其大小来验证这一点。您会收到以下错误消息:
error: persistentvolumeclaims "my-pvc" could not be patched: persistentvolumeclaims "my-pvc" is forbidden: only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize
最后,如果要启用实际上未在GKE上启用的控制器,则需要重新实现并将其作为独立服务部署到群集中,并使用K8s的 ValidatingWebhookConfiguration 或 MutatingWebhookConfiguration 通过Webhook 2连接K8s API您的服务。除了从头开始实现这一点之外,还有许多项目可以提供帮助,OPA Gatekeeper 3和Metacontroller 4列出了一些示例。