如何对Kubernetes中的清单执行政策?

我建立了一个基于Kubernetes的自助服务平台,我们在该平台上为每个团队创建名称空间,并允许他们“在名称空间内做他们想做的事”(我们设置了资源限制,因此没有人可以杀死整个集群)。

但是,现在我想在整个组织中实施某种标准。例如,我希望每个podSpec都定义自己的资源限制,并且我希望每个资源都有一个标签来指定其所属的应用程序。

是否存在一种机制,该机制将允许API服务器根据一组规则检查正在应用的清单,如果失败,则清单会被拒绝。

例如,以下清单将被拒绝,因为它既没有标签,也没有设置资源限制。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

但是以下清单将成功,因为它满足所有规则:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: foobar
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: "1"
          requests:
            cpu: "0.5"
kabenxiagu 回答:如何对Kubernetes中的清单执行政策?

  

是否存在一种机制,该机制将允许API服务器根据一组规则检查正在应用的清单,如果失败,则清单会被拒绝。

通常,这可以通过custom admission controller或自定义代理来解决。这取决于您的需求,可能并不容易。

按名称空间划分的资源限制

  

我们为每个团队创建名称空间,并允许他们“在名称空间内做任何他们想做的事”(我们设置了资源限制,因此没有人可以杀死整个集群)。

     

我希望每个PodSpec都定义自己的资源限制

您在这里寻找的可能是每个命名空间Limit Ranges,并且可能是默认值。

  

有了资源配额,群集管理员可以基于命名空间限制资源消耗和创建。在名称空间内,Pod或容器可以消耗的CPU和内存与名称空间的资源配额所定义的一样多。令人担忧的是,一个Pod或Container可能会垄断所有资源。限制范围是一种通过命名空间中的Pod或Container限制资源的策略。

强制性标签,据我所知,yet

,

您可以使用Open Policy Agent (OPA)Gatekeeper对资源清单实施自定义策略。

OPA是通用策略引擎,Gatekeeper提供CRD和验证准入控制Webhook,以在Kubernetes中定义和实施OPA策略。

您可以从字面上描述有关资源清单各个方面的策略,关守将拒绝任何违反策略的资源。

这是demo,显示了Gatekeeper的工作方式。

本文链接:https://www.f2er.com/3121628.html

大家都在问