用於運行覆蓋,常見驗證,靜態代碼分析,安全掃描,配置測試,審計,kustomize build和Dry Run Configution的多種工具集合,用於結構化的Kubernetes Yaml表現。旨在在CI(持續集成)過程中運行,作為驗證和測試的一部分,對於通過Gitops進行管理的Kubernetes群集尤其有用。
我找不到包含所有主要驗證工具的單個Docker映像(其中幾種!)可以驗證Kubernetes yaml清單文件作為CI/CD進程的一部分,然後自動部署到Kubernetes。該存儲庫並非旨在涵蓋如何使用這些單獨的工具,儘管它確實包含一些基本用法示例。下面的鏈接應導致您獲取文檔,以獲取有關使用每個工具的更多詳細信息。我們發現在CI驗證和掃描過程中使用多種工具非常有用,因為某些工具檢查了其他工具,而其他工具則無法使用其他工具。
從Github軟件包或Docker Hub中獲取最新圖像。
您可以直接在Docker中運行圖像,也可以查看下面的CI/CD使用示例。
docker run --rm -it docker.pkg.github.com/highwayoflife/kubernetes-validation-tools/image:latest /bin/bashdocker run --rm -it deck15/kubeval-tools:latest /bin/bash| 工具 | 版本 | 目的 | 描述 |
|---|---|---|---|
| kubectl | 1.23.5 | CLI | Kubernetes CLI。可以與--dry-run=client一起驗證清單 |
| 舵 | 3.8.1 | CLI | Helm可幫助您管理Kubernetes應用程序 - 將Kubernetes應用程序定義,安裝和升級為Helm圖表。作為驗證工具運行,可以作為helm lint或helm template運行。 |
| Yamllint | 1.26.3 | Linter | YAML文件的基本襯裡 |
| Kubeval | 0.16.1 | 驗證 | 驗證kubernetes yaml的工具。不適用於CRD。 |
| kustomize | 4.5.3 | 編譯 | 自定義應用程序配置的無模板方式。對於驗證kustomize configs有用。 |
| config lint | 1.6.0 | 驗證 | 使用YAML中指定的自定義規則進行驗證配置文件。 |
| Conftest | 0.30.0 | 測試 | 實用程序可幫助您針對結構化配置數據編寫測試。 |
| Kube得分 | 1.14.0 | 安全 | 執行Kubernetes對象定義的靜態代碼分析的工具。 |
| 北極星 | 5.1.0 | 驗證 | 標識Kubernetes部署配置錯誤 |
| Kube Linter | 0.2.6 | 安全 | 檢查Kubernetes的Linter和靜態分析工具表現出來 |
| kubeconform | 0.4.13 | 驗證 | Kubernetes表現出像Kubeval一樣的驗證工具,並支持CRD支持 |
| kubeaudit | 0.16.0 | 安全 | 審核群集或清單文件,以解決安全問題 |
| Datree | 1.0.15 | 政策 | 確保Kubernetes表現出來,並且掌舵圖表有效,並遵循您的政策。 |
| Kubesec | 2.11.4 | 安全 | Kubernetes資源的安全風險分析 |
理想情況下,應在CI構建過程中使用Kubernetes-validation-tools容器來驗證,掃描和棉布kubernetes配置以及表現或表明或頭盔圖。作為Gitops繼續進行集成工作流程的一部分,運行這些工具是最佳選擇。
使用容器規範在容器內運行一步。請確保將運行方式指定為適合您的容器的主機環境(ubuntu-latainux容器,Windows-latt最適合Windows容器的Windows-latat)。例如:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container 如果Jenkins在Kubernetes群集中運行代理: Jenkinsfile則此示例很有用
pipeline {
agent {
kubernetes {
cloud ' build-pipeline '
defaultContainer ' validate '
inheritFrom ' jnlp '
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: validate
image: deck15/kubeval-tools:latest
command:
- cat
tty: true
"""
} // kubernetes
} // agent
stages {
steps {
container( ' validate ' ) {
sh ' kubeconform -summary manifests.yaml '
}
}
}
}pipeline {
agent {
docker { image ' deck15/kubeval-tools:latest ' }
} // agent
.. .
}.drone.yml kind : pipeline
type : docker
name : default
steps :
- name : validate
image : deck15/kubeval-tools:latest
commands :
- kubeconform -summary manifests.yaml .circleci/config.yml version : 2.0
jobs :
build :
docker :
- image : deck15/kubeval-tools:latest .gitlab-ci.yaml您可以定義用於所有作業的圖像,以及在運行時要使用的服務列表:
default :
image : deck15/kubeval-tools:latest
validate :
script :
- kubeconform -summary manifests.yaml KubeAudit是命令行工具,也是審核Kubernetes群集的GO包,以了解各種不同的安全問題,例如:
kubeaudit確保您部署安全的容器!
Kubeval是用於驗證Kubernetes YAML或JSON配置文件的工具。它使用來自Kubernetes OpenAPI規範生成的模式來做到這一點,因此可以驗證多個版本的Kubernetes的模式。
KubeConform是Kubernetes表現出驗證工具。將其構建到CI中以驗證您的Kubernetes配置!
它的靈感來自,包含來自Kubeval的代碼,並旨在保持以下改進:
驗證一個有效的文件
kubeconform fixtures/valid.yaml
echo $?
0驗證一個無效的文件,將輸出設置為JSON並打印摘要
kubeconform -summary -output json fixtures/invalid.yaml
{
" resources " : [
{
" filename " : " fixtures/invalid.yaml " ,
" kind " : " ReplicationController " ,
" version " : " v1 " ,
" status " : " INVALID " ,
" msg " : " Additional property templates is not allowed - Invalid type. Expected: [integer,null], given: string "
}
],
" summary " : {
" valid " : 0,
" invalid " : 1,
" errors " : 0,
" skipped " : 0
}
}
echo $?
1通過stdin傳遞清單
cat fixtures/valid.yaml | kubeconform -summary
Summary: 1 resource found parsing stdin - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0驗證文件夾,增加並行工人的數量
kubeconform -summary -n 16 fixtures
fixtures/crd_schema.yaml - CustomResourceDefinition trainingjobs.sagemaker.aws.amazon.com failed validation: could not find schema for CustomResourceDefinition
fixtures/invalid.yaml - ReplicationController bob is invalid: Invalid type. Expected: [integer,null], given: string
[...]
Summary: 65 resources found in 34 files - Valid: 55, Invalid: 2, Errors: 8 Skipped: 0Conftest是一個實用程序,可幫助您針對結構化配置數據編寫測試。例如,您可以為Kubernetes配置或Tekton Pipeline定義,Terraform代碼,無服務器配置或任何其他結構化數據編寫測試。
Conftest依靠開放式政策代理人的雷戈語言來撰寫斷言。
Yamllint是用於YAML文件的襯裡。
Yamllint不僅檢查了語法有效性,還可以檢查諸如關鍵重複和化妝品問題(例如線長度,尾隨空間,凹痕等)等怪異。
kustomize可讓您自定義原始的,無模板的YAML文件以進行多種目的,使原始的YAML未觸及和可用。
Kustomize目標Kubernetes;它可以理解並可以修補Kubernetes樣式API對象。就像製作一樣,它的作用在文件中聲明,就像sed一樣,它發出了編輯的文本。 kustomize遍歷kubernetes示出來,可以添加,刪除或更新配置選項而無需分叉。
Kustomize對於與ArgOCD,FluxCD或Spinnaker等工具一起使用特別有用,可以在不復制代碼的情況下啟用多個群集或環境的共享清單(資源)。 Kustomize允許覆蓋,合併和其他配置功能。
Kubectl是瑞士軍刀的Kubernetes CLI版本,可以做很多事情。其中之一是能夠在YAML文件上進行乾式驗證。
$ kubectl create --dry-run --validate -f invalid.yamlHelm命令在CI中用於皮棉或驗證頭盔圖。
檢查圖表是否有可能的問題。
筆記:
helm lint本身不足以充分驗證掌舵圖。建議將使用helm lint和helm template與其他明顯驗證工具之一結合使用。 (請參閱下面的示例)
該命令採用了一條圖表的路徑,並運行一系列測試以驗證圖表是否良好。
如果Linter遇到會導致圖表失敗安裝的事物,則它將發出[ERROR]消息。如果它遇到與慣例或建議有關的問題,它將發出[WARNING]消息。
helm lint PATH [flags]helm template ./path/to/chart | kubeconform -strict -ignore-missing-schemasconfig-lint是使用YAML中指定的規則驗證配置文件的命令行工具。配置文件可以是幾種格式之一:Terraform,JSON,YAML,並支持Kubernetes。有用於Terraform的內置規則,可以將自定義文件用於其他格式。
config-lint -rules example-files/rules/kubernetes.yml example-files/configKube-Score,一種對Kubernetes對象定義執行靜態代碼分析的工具。輸出是您可以改進應用程序更安全和彈性的建議列表。
Kube-Score可以在您的CI/CD環境中運行,如果發現關鍵錯誤,則會使用退出代碼1退出。觸發級別可以通過 - ext-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-on-ongrive級別更改。
Kube-Score的輸入應是您部署到同一名稱空間的所有應用程序,以獲得最佳結果。
helm template my-app | kube-score score -kustomize build . | kube-score score -kube-score score my-app/ * .yaml
kube-score score my-app/deployment.yaml my-app/service.yamlPolaris,Polaris運行各種檢查,以確保使用最佳實踐配置Kubernetes Pod和控制器。北極星作為測試本地YAML文件的CLI工具,例如作為CI/CD進程的一部分。
Polaris可以以幾種不同的模式運行:
您可以在命令行上運行審核,並將輸出視為JSON,YAML或原始分數:
polaris audit --format yaml > report.yaml
polaris audit --format score
# 92審核可以針對本地目錄或YAML文件而不是群集運行:
polaris audit --audit-path ./deploy/
# or to use STDIN
cat pod.yaml | polaris audit --audit-path -您還可以在單個資源上而不是整個集群上運行審核:
polaris audit --resource " nginx-ingress/Deployment.apps/v1/default-backend " 您可以將Polaris集成到CI/CD中,以獲取包含基礎架構的存儲庫。例如,如果北極星檢測到任何危險級問題,或者分數下降到90%以下:
polaris audit --audit-path ./deploy/
--set-exit-code-on-danger
--set-exit-code-below-score 90有關CLI的更多用法選項,請參見使用文檔
Kube Linter是一種靜態分析工具,可檢查Kubernetes YAML文件和Helm圖表,以確保其代表的應用程序遵守最佳實踐。 Kubelinter接受YAML文件作為輸入,並對它們進行一系列檢查。如果發現任何問題,它將報告並返回非零退出代碼。
DATREE是一種可以在本地或CI/CD中使用的CLI工具,以確保Kubernetes表現出來和掌舵圖表遵循最佳實踐以及您組織的政策。它具有30條經過戰鬥測試的規則,以及對YAML和Kubernetes Schema驗證的內置支持。
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubesec是用於Kubernetes Pod,部署,守護程序和狀態服務的安全掃描工具。
kubesec scan manifest.yamlKubesec返回返回JSON數組,並且可以在單個輸入文件中掃描多個YAML文檔。
[
{
"object" : " Pod/security-context-demo.default " ,
"valid" : true ,
"message" : " Failed with a score of -30 points " ,
"score" : -30 ,
"scoring" : {
"critical" : [
{
"selector" : " containers[] .securityContext .capabilities .add == SYS_ADMIN " ,
"reason" : " CAP_SYS_ADMIN is the most privileged capability and should always be avoided " ,
"points" : -30
}
],
"advise" : [
{
"selector" : " containers[] .securityContext .runAsNonRoot == true " ,
"reason" : " Force the running image to run as a non-root user to ensure least privilege " ,
"points" : 1
},
{
// ...
}
]
}
}
]歡迎PR!查看貢獻指南以獲取更多信息。