【问题标题】:Conftest Exception Rule Fails with Kustomization & HelmConftest 异常规则因 Kustomization 和 Helm 失败
【发布时间】:2021-03-22 21:02:41
【问题描述】:

我的一个项目中有几个 k8s 资源,这些资源是使用 Helm 和 Kustomize 构建、组合和打包的。我使用 Conftest 编写了一些 OPA 测试,其中一项检查是避免以 root 身份运行容器。所以这是我的基本文件夹中的 deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: {{ .Values.app.namespace }}
  labels:
    name: {{ .Values.app.name }}
    #app: {{ .Values.app.name }}
    component: {{ .Values.plantSimulatorService.component }}
    part-of: {{ .Values.app.name }}
    managed-by: helm
    instance: {{ .Values.app.name }}
    version: {{ .Values.app.version }}
spec:
  selector:
    matchLabels:
      app: {{ .Values.app.name }}
  replicas: 1
  template:
    metadata:
      labels:
        app: {{ .Values.app.name }}
    spec:
      securityContext:
        runAsUser: 1000
        runAsGroup: 3000
        fsGroup: 2000
        runAsNonRoot: true
      containers:
        - name: {{ .Values.app.name }}
          image: {{ .Values.plantSimulatorService.image.repository }}:{{ .Values.plantSimulatorService.image.tag }}
          ports:
            - containerPort: {{ .Values.plantSimulatorService.ports.containerPort }} # Get this value from ConfigMap

然后,我的叠加文件夹中有一个补丁文件 (flux-patch-prod.yaml),如下所示:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    fluxPatchFile: prodPatchFile
  annotations:
    flux.weave.works/locked: "true"
    flux.weave.works/locked_msg: Lock deployment in production
    flux.weave.works/locked_user: Joesan <github.com/joesan>
  name: plant-simulator-prod
  namespace: {{ .Values.app.namespace }}

我现在已经在我的 base.rego 文件中编写了 Conftest,如下所示:

# Check container is not run as root
deny_run_as_root[msg] {
  kubernetes.is_deployment
  not input.spec.template.spec.securityContext.runAsNonRoot

  msg = sprintf("Containers must not run as root in Deployment %s", [name])
}

exception[rules] {
  kubernetes.is_deployment
  input.metadata.name == "plant-simulator-prod"
  rules := ["run_as_root"]
}

但是当我运行它们时(我安装了 helm-conftest 插件),我收到以下错误:

FAIL - Containers must not run as root in Deployment plant-simulator-prod
90 tests, 80 passed, 3 warnings, 7 failures
Error: plugin "conftest" exited with error

我不知道如何让它工作。我不想最终将 deployment.yaml 中的内容再次复制到flux-patch-prod.yaml 中,因为它首先会破坏使用 Kustomization 的全部目的。知道如何解决这个问题吗?从昨天开始我就一直在处理这个问题!

【问题讨论】:

    标签: kubernetes kubernetes-helm kustomize conftest


    【解决方案1】:

    我设法解决了这个问题,但是抛出的错误消息并没有那么有用。 Conftest 的下一个版本可能会变得更好。

    所以这是我必须做的:

    我去了https://play.openpolicyagent.org/ 游乐场测试我的文件。当我在那里复制我的 rego 规则时,我注意到以下错误消息:

    policy.rego:25: rego_unsafe_var_error: var msg is unsafe

    我产生了怀疑,当我更仔细地关注这条线以了解实际问题是什么时,我不得不改变:

    msg = sprintf("容器不能在部署 %s 中以 root 身份运行", [名称])

    收件人:

    msg = sprintf("容器不能在部署 %s 中以 root 身份运行", [输入名称])

    它按预期工作!愚蠢的错误,但来自 Conftest 的错误消息并没有那么有用,乍一看并没有那么有用!

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 2011-09-18
      • 2019-10-05
      • 1970-01-01
      • 2020-05-09
      • 2020-11-14
      • 2018-03-12
      • 2014-07-29
      • 2012-08-12
      相关资源
      最近更新 更多