github - 防止非空命名空间删除
问题描述
我有约束模板 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”,防止删除
推荐阅读
- c# - 在 C# 中对二维数组进行零填充
- python - 在 Jupyter 中使用 pandas 和 datetime 来查看在什么时间没有销售(在任何一天)
- vbscript - 有没有办法在 wscript shell 运行函数中使用变量?
- bash - 如何使用 awk 或 sed 根据值列表将文件拆分为 2 部分?
- javascript - padStart() 目标长度不满足
- javascript - 取消聚焦/模糊 Material UI 输入
- c# - 使用 .Net Core Worker Services 扩展 Docker 容器问题
- list - 来自 web 服务的元素不会出现在 Flutter 的拖放列表中
- java - 使用带有 Balze-Persistence 的分页时错误的结果元数据
- python - 如何以“%I:%M:%S”格式添加n个datetime.strptime存储在python的列表中