【问题标题】:Prevents unempty namespace deletion防止非空命名空间删除
【发布时间】:2021-07-18 14:16:39
【问题描述】:

我有约束模板 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"]

【问题讨论】:

    标签: github azure-devops yaml devops open-policy-agent


    【解决方案1】:

    可能有点太晚了,但这就是我解决这个问题的方法:

    第一步: 用您喜欢的语言创建一个调用 API 服务器的 cronjob,每 x 分钟运行一次以检查非空命名空间,向这些命名空间添加注释,例如 "can_delete" : "no"

    第二步:

    编辑你的rego代码并检查是否有任何名为“can_delete”的注释,如果有,并将其设置为“no”,防止删除

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2020-09-26
      • 2014-03-31
      • 2016-04-15
      • 2015-07-13
      • 1970-01-01
      相关资源
      最近更新 更多