我想对我的一些 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 的单独版本的清单文件并针对它运行它,但我真的不想为每个清单文件都使用它。
您无法针对 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
)
.
.
.