0

我建立了一个基于 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

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

api版本:应用程序/v1
种类:部署
元数据:
  名称:nginx-部署
  标签:
    应用程序:foobar
规格:
  选择器:
    匹配标签:
      应用程序:nginx
  复制品:2
  模板:
    元数据:
      标签:
        应用程序:nginx
    规格:
      容器:
      - 名称:nginx
        图片:nginx:1.7.9
        端口:
        - 容器端口:80
        资源:
          限制:
            cpu:“1”
          请求:
            cpu:“0.5”
4

2 回答 2

1

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

通常,这可以通过自定义准入控制器或自定义代理来解决。这取决于您的需求,可能并不那么容易。

命名空间的资源限制

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

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

您在这里寻找的可能是每个命名空间的限制范围,可能还有默认值。

使用资源配额,集群管理员可以在命名空间的基础上限制资源消耗和创建。在命名空间中,Pod 或容器可以消耗命名空间资源配额所定义的 CPU 和内存。人们担心一个 Pod 或 Container 可能会垄断所有资源。Limit Range 是一种通过命名空间中的 Pod 或 Container 来限制资源的策略。

强制性标签据我所知,这不可能

于 2019-11-11T21:25:36.200 回答
0

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

OPA 是一个通用策略引擎,Gatekeeper 提供 CRD 和验证准入控制 webhook 以在 Kubernetes 中定义和执行 OPA 策略。

您可以从字面上描述资源清单的每个方面的策略,并且 Gatekeeper 拒绝任何违反策略的资源。

这是一个演示,展示了 Gatekeeper 的工作原理。

于 2019-11-12T02:27:42.597 回答