私のプロジェクトの 1 つに、Helm と Kustomize を使用してビルド、構成、パッケージ化された k8s リソースがいくつかあります。Conftest を使用していくつかの OPA テストを作成しました。チェックの 1 つは、ルートとしてコンテナーを実行しないようにすることです。したがって、これが私のベースフォルダーの 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
次に、overlays フォルダーに次のようなパッチ ファイル (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
これを機能させる方法がわかりません。そもそも Kustomization を使用する目的全体が無効になるため、deployment.yaml から flux-patch-prod.yaml にコンテンツを再度コピーすることはしたくありません。これを修正する方法はありますか?私は昨日からこの問題でダウンしています!