Una colección todo en uno de herramientas para ejecutar pelusas, validación común, análisis de código estático, escaneo de seguridad, pruebas de configuración, auditoría, creación de compilación y ejecución de ejecución seca para manifestaciones Yaml de Kubernetes estructurados. Diseñado para ejecutar en un proceso CI (integración continua) como parte de la validación y las pruebas, especialmente útil para los grupos de Kubernetes que se gestionan a través de GITOPS.
No pude encontrar una sola imagen de Docker que contuviera todas las principales herramientas de validación (¡de las cuales hay varias!) Para validar los archivos de manifiesto Kubernetes Yaml como parte de un proceso de CI/CD antes de implementarse automáticamente en Kubernetes. Este repositorio no está diseñado para cubrir cómo usar estas herramientas individuales, aunque contiene algunos ejemplos de uso básicos. Los enlaces a continuación deberían llevarlo a la documentación para obtener más detalles sobre el uso de cada herramienta. Hemos encontrado útil usar varias herramientas durante nuestro proceso de validación y escaneo de CI porque algunas herramientas verifican ciertos aspectos que otros no pueden.
Tome la última imagen de los paquetes de GitHub o de Docker Hub.
Puede ejecutar la imagen directamente en Docker, o ver a continuación los ejemplos de uso de 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| Herramienta | Versión | Objetivo | Descripción |
|---|---|---|---|
| Kubectl | 1.23.5 | CLI | Kubernetes Cli. Se puede usar con --dry-run=client para validar los manifiestas |
| Timón | 3.8.1 | CLI | Helm lo ayuda a administrar aplicaciones Kubernetes: definir, instalar y actualizar las aplicaciones Kubernetes como gráficos de timón. Ejecutar como una herramienta de validación, se puede ejecutar como helm lint o helm template . |
| Ñame | 1.26.3 | Intervalor | Linter básico para archivos YAML |
| Kubeval | 0.16.1 | Validación | Herramienta para validar un Kubernetes Yaml manifiesta. No funciona con CRDS. |
| Kustomizar | 4.5.3 | Compilar | Forma gratuita de plantilla para personalizar las configuraciones de aplicaciones. Útil para validar las configuraciones de Kustomize. |
| Lenta de configuración | 1.6.0 | Validación | Validen archivos de configuración utilizando reglas personalizadas especificadas en YAML. |
| Más confiado | 0.30.0 | Pruebas | Utilidad para ayudarlo a escribir pruebas contra datos de configuración estructurados. |
| Puntaje de kube | 1.14.0 | Seguridad | Herramienta que realiza el análisis de código estático de las definiciones de objetos de Kubernetes. |
| estrella polar | 5.1.0 | Validación | Identifica errores de configuración de implementación de Kubernetes |
| Intervalor de kube | 0.2.6 | Seguridad | Herramienta de análisis de Línter y estático que verifica que Kubernetes manifiesta |
| KubeConform | 0.4.13 | Validación | Kubernetes manifiesta la herramienta de validación como Kubeval con soporte CRD |
| Kubeaudit | 0.16.0 | Seguridad | Auditoría de grupos o archivos de manifestación para preocupaciones de seguridad |
| Reelacionar | 1.0.15 | Política | Asegúrese de que los manifiestos de Kubernetes y los gráficos de timón sean válidos y sigan sus políticas. |
| Kubesec | 2.11.4 | Seguridad | Análisis de riesgos de seguridad para recursos de Kubernetes |
Idealmente, el contenedor Kubernetes-Validation-Tools debe usarse en un proceso de compilación de CI para validar, escanear y pelustar las configuraciones y manifiestas o cuadros de timón. Es óptimo ejecutar estas herramientas como parte de un flujo de trabajo de integración continua de GITOPS.
Use el especificador de contenedor para ejecutar un paso dentro de un contenedor. Asegúrese de especificar Ejecutar como el entorno de host apropiado para su contenedor (Ubuntu-Latest para contenedores de Linux, Windows-Latest para contenedores de Windows). Por ejemplo:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container Este ejemplo es útil si Jenkins está ejecutando agentes en un clúster de 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.yamlPuede definir una imagen que se use para todos los trabajos y una lista de servicios que desea utilizar durante el tiempo de ejecución:
default :
image : deck15/kubeval-tools:latest
validate :
script :
- kubeconform -summary manifests.yaml Kubeaudit es una herramienta de línea de comandos y un paquete GO para auditar los clústeres de Kubernetes para varias preocupaciones de seguridad diferentes, como:
¡Kubeaudit se asegura de implementar contenedores seguros!
KubeVal es una herramienta para validar un archivo de configuración Kubernetes Yaml o JSON. Lo hace utilizando esquemas generados a partir de la especificación de Kubernetes Openapi y, por lo tanto, puede validar esquemas para múltiples versiones de Kubernetes.
KubeConform es una herramienta de validación de Kubernetes manifiestas. ¡Construya en su CI para validar su configuración de Kubernetes!
Está inspirado, contiene código y está diseñado para mantenerse cerca de Kubeval, pero con las siguientes mejoras:
Validar un archivo único y válido
kubeconform fixtures/valid.yaml
echo $?
0Validar un solo archivo no válido, configurar la salida en JSON e imprimir un resumen
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 $?
1Pasar se manifiesta a través de Stdin
cat fixtures/valid.yaml | kubeconform -summary
Summary: 1 resource found parsing stdin - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0Validando una carpeta, aumentando el número de trabajadores paralelos
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 es una utilidad para ayudarlo a escribir pruebas contra datos de configuración estructurados. Por ejemplo, puede escribir pruebas para sus configuraciones de Kubernetes, o definiciones de tubería de Tekton, código de terraza, configuraciones sin servidor o cualquier otro datos estructurados.
Conftest se basa en el lenguaje REgo del agente de políticas abiertas para escribir las afirmaciones.
Yamllint es un enlace para archivos YAML.
Yamllint no solo verifica la validez de la sintaxis, sino también para las rarezas como la repetición clave y los problemas cosméticos, como la longitud de las líneas, los espacios finales, la sangría, etc.
Kustomize le permite personalizar archivos YAML sin plantilla y sin plantilla para múltiples fines, dejando el YAML original intacto y utilizable como está.
Kustomize objetivo Kubernetes; Entiende y puede parchear los objetos API de estilo Kubernetes. Es como hacer, ya que lo que hace se declara en un archivo, y es como sed, ya que emite texto editado. Kustomize atraviesa un manifiesto Kubernetes para agregar, eliminar o actualizar las opciones de configuración sin bifurcarse.
Kustomize es particularmente útil para usar con herramientas como ArgoCD, FluxCD o Spinnaker para habilitar los manifiestos compartidos (recursos) en múltiples grupos o entornos sin duplicar el código. Kustomize permite anulaciones, fusiones y otras características de configuración.
Kubectl es la versión Kubernetes CLI de una navaja suiza, y puede hacer muchas cosas. Una de esas cosas es poder hacer un validar en seco en un archivo YAML.
$ kubectl create --dry-run --validate -f invalid.yamlHelm ordena usar en CI a la pelusa o validar los gráficos de timón.
Examine una tabla para posibles problemas.
NOTA:
helm lintpor sí misma es insuficiente para validar adecuadamente una tabla de timón. Se recomienda utilizar la plantilla dehelm lintyhelm templateen combinación con una de las otras herramientas de validación manifiesta. (Ver ejemplo a continuación)
Este comando toma un camino hacia un gráfico y ejecuta una serie de pruebas para verificar que el gráfico esté bien formado.
Si el linter se encuentra con cosas que hará que el gráfico falle en la instalación, emitirá mensajes [ERROR] . Si encuentra problemas que rompen con la convención o recomendación, emitirá mensajes [WARNING] .
helm lint PATH [flags]helm template ./path/to/chart | kubeconform -strict -ignore-missing-schemasconfig-lint es una herramienta de línea de comando para validar archivos de configuración utilizando reglas especificadas en YAML. Los archivos de configuración pueden ser uno de varios formatos: Terraform, JSON, YAML, con soporte para Kubernetes. Hay reglas integradas proporcionadas para Terraform, y se pueden usar archivos personalizados para otros formatos.
config-lint -rules example-files/rules/kubernetes.yml example-files/configKube-Score, una herramienta que realiza un análisis de código estático de las definiciones de objeto Kubernetes. La salida es una lista de recomendaciones de lo que puede mejorar para que su aplicación sea más segura y resistente.
Kube-Score puede ejecutarse en su entorno CI/CD y saldrá con el código de salida 1 si se ha encontrado un error crítico. El nivel de activación se puede cambiar a la advertencia con el argumento --exit-one-on-warning.
La entrada a Kube-Score debe ser todas las aplicaciones que implementa en el mismo espacio de nombres para el mejor resultado.
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 ejecuta una variedad de verificaciones para garantizar que las vainas y controladores de Kubernetes estén configurados utilizando las mejores prácticas. Polaris se incluye como una herramienta CLI para probar archivos YAML locales, por ejemplo, como parte de un proceso CI/CD.
Polaris se puede ejecutar en algunos modos diferentes:
Puede ejecutar auditorías en la línea de comando y ver la salida como JSON, YAML o una puntuación en bruto:
polaris audit --format yaml > report.yaml
polaris audit --format score
# 92Las auditorías pueden ejecutarse contra un directorio local o un archivo YAML en lugar de un clúster:
polaris audit --audit-path ./deploy/
# or to use STDIN
cat pod.yaml | polaris audit --audit-path -También puede ejecutar la auditoría en un solo recurso en lugar de todo el clúster:
polaris audit --resource " nginx-ingress/Deployment.apps/v1/default-backend " Puede integrar Polaris en CI/CD para repositorios que contienen infraestructura como código. Por ejemplo, fallar si Polaris detecta algún problema de nivel de peligro, o si el puntaje cae por debajo del 90%:
polaris audit --audit-path ./deploy/
--set-exit-code-on-danger
--set-exit-code-below-score 90Para obtener más opciones de uso para CLI, consulte el uso de uso
Kube Linter es una herramienta de análisis estático que verifica los archivos YAML de Kubernetes y gráficos de timón para garantizar que las aplicaciones representadas en ellas se adhieran a las mejores prácticas. Kubelinter acepta archivos YAML como entrada y ejecuta una serie de verificaciones en ellos. Si encuentra algún problema, los informa y devuelve un código de salida no cero.
Datree es una herramienta CLI que se puede usar localmente o en su CI/CD para garantizar que Kubernetes manifiestes y los gráficos de timones sigan las mejores prácticas, así como las políticas de su organización. Viene con 30 reglas probadas en batalla para elegir, junto con el soporte incorporado para la validación de esquema YAML y Kubernetes.
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubesec es una herramienta de escaneo de seguridad para pods de Kubernetes, implementaciones, demonios y estados.
kubesec scan manifest.yamlKubesec Devuelve A Devuelve una matriz JSON y puede escanear múltiples documentos YAML en un solo archivo de entrada.
[
{
"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
},
{
// ...
}
]
}
}
]¡PRS bienvenido! Consulte las pautas que contribuyen para obtener más información.