针对使用 Helm 模板的 K8S Manifest 文件运行 bash 脚本

问题描述 投票:0回答:1

我想对我的一些 K8S 清单文件运行 kubesec 扫描,问题是我在文件中使用 Helm 模板,当我尝试执行一个简单的 bash 脚本时,我收到这样的错误

Performing kubesec scan - Static security analysis for Kubernetes manifests
Scan result: yaml: invalid map key: map[interface {}]interface {}{".Values.backendDeploymentName":interface {}(nil)}

我的 bash 脚本如下所示,用于对清单文件运行扫描并检查结果分数。

#!/bin/bash

scan_result=$(curl -sSX POST --data-binary @"backend_manifest_file" https://v2.kubesec.io/scan)
scan_message=$(curl -sSX POST --data-binary @"backend_manifest_file" https://v2.kubesec.io/scan | jq .[0].message -r )
scan_score=$(curl -sSX POST --data-binary @"backend_manifest_file" https://v2.kubesec.io/scan | jq .[0].score )

echo "Performing kubesec scan - Static security analysis for Kubernetes manifests"
echo "Scan result: $scan_result"
echo "Scan message: $scan_message"
echo "Scan score: $scan_score"

if [[ "${scan_score}" -ge 5 ]]; then
    echo "Score is $scan_score"
    echo "Kubesec Scan $scan_message"
else
    echo "Score is $scan_score, which is less than or equal to 5."
    echo "Scanning Kubernetes Resource has Failed"
    exit 1;
fi;

我的清单文件使用 Helm 模板,其中我引用 value.yaml 文件中的变量。

这个问题有什么解决办法吗?

我可以有一个不使用 Helm 的单独版本的清单文件并针对它运行它,但我真的不想为每个清单文件都使用它。

bash kubernetes-helm
1个回答
0
投票

您无法针对 Helm 模板运行任何类型的验证,因为它们(在大多数情况下)在语法上不是有效的 YAML 文档。

您需要首先将模板渲染为 YAML(例如使用

helm template
命令),然后验证渲染的版本。

例如:

tmpfile=$(mktemp manifestXXXXXX.yaml)
trap 'rm -f "$tmpfile"' EXIT

helm template . > "$tmpfile"
scan_result=$(
  curl -sSX POST --data-binary @"$tmpfile" https://v2.kubesec.io/scan
)
.
.
.
© www.soinside.com 2019 - 2024. All rights reserved.