[英]Prevents unempty namespace deletion
我有約束模板 yaml 代碼策略來防止所有命名空間刪除。
現在我想創建一個策略來防止只刪除非空命名空間,即包含像 pod、ingress、pv、pvc、secret、service 等資源的刪除。
因此,空的命名空間應該能夠被刪除,但包含內容的命名空間不應該能夠被刪除。
對此有何建議?
模板:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8snamespacecannotbedeleted
spec:
crd:
spec:
names:
kind: K8sNamespaceCannotBeDeleted
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package kubernetes.admission
violation[{"msg": msg}] {
input.review.kind.kind == "Namespace"
input.review.operation == "DELETE"
msg := "[OPA] Namespace deletions are not permitted"
}
約束:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sNamespaceCannotBeDeleted
metadata:
name: namespace-cannot-be-deleted
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Namespace"]
這可能有點太晚了,但這就是我解決這個問題的方式:
第一步:用你喜歡的語言創建一個調用 API 服務器的 cronjob,每 x 分鍾運行一次以檢查非空命名空間,向這些命名空間添加注釋,如“can_delete”:“no”
第二步:
編輯您的 rego 代碼並檢查是否有任何名為“can_delete”的注釋,如果有,並將其設置為“no”,防止刪除
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.