用于运行覆盖,常见验证,静态代码分析,安全扫描,配置测试,审计,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!查看贡献指南以获取更多信息。