簡體   English   中英

Conftest 異常規則因 Kustomization 和 Helm 失敗

[英]Conftest Exception Rule Fails with Kustomization & Helm

我的一個項目中有幾個 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 的全部目的。 知道如何解決這個問題嗎? 從昨天開始我就一直在糾結這個問題!

我設法解決了這個問題,但是拋出的錯誤消息並沒有那么有用。 Conftest 的下一個版本可能會變得更好。

所以這就是我必須做的:

我去了https://play.openpolicyagent.org/游樂場測試我的文件。 當我在那里復制我的 rego 規則時,我注意到以下錯誤消息:

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

我開始懷疑,當我密切關注這條線以了解實際問題是什么時,我不得不改變:

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

至:

msg = sprintf("容器不能在部署 %s 中以 root 身份運行", [input.name])

它按預期工作,愚蠢的錯誤,但來自 Conftest 的錯誤消息並沒有那么有用,乍一看就弄清楚了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM