Une collection tout-en-un d'outils pour exécuter la liaison, la validation commune, l'analyse de code statique, la numérisation de sécurité, les tests de configuration, l'audit, la construction de Kustomze et la configuration de l'exécution à sec pour les manifestes structurées de Kubernetes YAML. Conçu pour s'exécuter dans un processus CI (intégration continue) dans le cadre de la validation et des tests, particulièrement utile pour les grappes de Kubernetes qui sont gérées via Gitops.
Je n'ai pas pu trouver une seule image Docker qui contenait tous les principaux outils de validation (dont plusieurs!) Pour valider les fichiers Kubernetes YAML manifestes dans le cadre d'un processus CI / CD avant d'être automatiquement déployé sur Kubernetes. Ce dépôt n'est pas conçu pour couvrir comment utiliser ces outils individuels, bien qu'il contienne quelques exemples d'utilisation de base. Les liens ci-dessous doivent vous conduire à la documentation pour plus de détails sur l'utilisation de chaque outil. Nous avons trouvé utile d'utiliser plusieurs outils au cours de notre processus de validation et d'analyse CI car certains outils vérifient certains aspects que d'autres ne peuvent pas.
Prenez la dernière image à partir des packages GitHub ou de Docker Hub.
Vous pouvez exécuter l'image directement dans Docker, ou voir ci-dessous pour les exemples d'utilisation 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| Outil | Version | But | Description |
|---|---|---|---|
| Kubectl | 1.23.5 | CLI | Kubernetes CLI. Peut être utilisé avec --dry-run=client pour valider les manifestes |
| Barre | 3.8.1 | CLI | Helm vous aide à gérer les applications Kubernetes - définir, installer et mettre à niveau les applications Kubernetes comme graphiques de barre. Exécuter en tant qu'outil de validation, peut être exécuté sous forme helm lint ou helm template . |
| Yamllint | 1.26.3 | Linter | Linter de base pour les fichiers YAML |
| Kubeval | 0.16.1 | Validation | Outil pour valider un Kubernetes YAML se manifeste. Ne fonctionne pas avec les CRD. |
| Faire la réussite | 4.5.3 | Compiler | Mayage sans modèle pour personnaliser les configurations d'applications. Utile pour valider les configurations Kustomze. |
| Config Lint | 1.6.0 | Validation | Valider les fichiers de configuration à l'aide de règles personnalisées spécifiées dans YAML. |
| Contest | 0,30.0 | Tests | Utilité pour vous aider à rédiger des tests par rapport aux données de configuration structurées. |
| Score de kube | 1.14.0 | Sécurité | Outil qui effectue une analyse de code statique des définitions d'objets Kubernetes. |
| Polaris | 5.1.0 | Validation | Identifie les erreurs de configuration de déploiement de Kubernetes |
| Kube Linter | 0.2.6 | Sécurité | Outil d'analyse de linter et statique qui vérifie les manifestes de Kubernetes |
| Kubeconform | 0.4.13 | Validation | Kubernetes manifeste l'outil de validation comme Kubeval avec le support CRD |
| Kubedit | 0.16.0 | Sécurité | Audit des clusters ou des fichiers manifestes pour des problèmes de sécurité |
| Datree | 1.0.15 | Politique | Assurez-vous que les manifestes de Kubernetes et des graphiques de barre sont valides et suivez vos politiques. |
| Kubesec | 2.11.4 | Sécurité | Analyse des risques de sécurité pour les ressources de Kubernetes |
Idéalement, le conteneur Kubernetes-Validation-Tools doit être utilisé dans un processus de construction CI pour valider, scanner et peluchez des configurations de Kubernetes et manifeste ou des graphiques de barre. Il est optimal d'exécuter ces outils dans le cadre d'un flux de travail d'intégration continue Gitops.
Utilisez le spécificateur de conteneur pour exécuter un pas dans un conteneur. Assurez-vous de spécifier des exécutions en tant qu'environnement hôte approprié pour votre conteneur (ubuntu-latest pour les conteneurs Linux, Windows-Latest pour les conteneurs Windows). Par exemple:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container Cet exemple est utile si Jenkins dirige des agents dans un cluster 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.yamlVous pouvez définir une image utilisée pour tous les travaux et une liste de services que vous souhaitez utiliser pendant l'exécution:
default :
image : deck15/kubeval-tools:latest
validate :
script :
- kubeconform -summary manifests.yaml Kubeaudit est un outil de ligne de commande et un package Go pour auditer des clusters Kubernetes pour diverses préoccupations de sécurité différentes, telles que:
Kubeaudit s'assure de déployer des conteneurs sécurisés!
Kubeval est un outil pour valider un fichier de configuration Kubernetes YAML ou JSON. Il le fait en utilisant des schémas générés à partir de la spécification Kubernetes OpenAPI, et peut donc valider des schémas pour plusieurs versions de Kubernetes.
KUBEConForm est un outil de validation de Kubernetes manifeste. Construisez-le dans votre CI pour valider votre configuration de Kubernetes!
Il est inspiré par, contient du code et est conçu pour rester près de Kubeval, mais avec les améliorations suivantes:
Valider un seul fichier valide
kubeconform fixtures/valid.yaml
echo $?
0Valider un seul fichier non valide, définir la sortie sur JSON et imprimer un résumé
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 $?
1Passer des manifestes via STDIN
cat fixtures/valid.yaml | kubeconform -summary
Summary: 1 resource found parsing stdin - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0Valider un dossier, augmentant le nombre de travailleurs parallèles
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 est un utilitaire pour vous aider à rédiger des tests contre des données de configuration structurées. Par exemple, vous pouvez rédiger des tests pour vos configurations Kubernetes, ou les définitions de pipelines Tekton, le code Terraform, les configurations sans serveur ou toute autre donnée structurée.
Conftest s'appuie sur la langue Rego de l'agent de politique ouverte pour rédiger les affirmations.
Yamllint est un linter pour les fichiers YAML.
Yamllint ne vérifie pas seulement la validité de la syntaxe, mais pour les bizarreries comme la répétition clé et les problèmes cosmétiques tels que la longueur des lignes, les espaces de fin, l'indentation, etc.
Kustomalize vous permet de personnaliser les fichiers YAML bruts et sans modèle à plusieurs fins, laissant le YAML original intact et utilisable tel quel.
Kustomze cible Kubernetes; Il comprend et peut corriger les objets API de style Kubernetes. C'est comme faire, en ce qu'il fait, il est déclaré dans un fichier, et c'est comme SED, en ce qu'il émet un texte modifié. Kustomalize traverse un manifeste de Kubernetes pour ajouter, supprimer ou mettre à jour les options de configuration sans forking.
Kustomalize est particulièrement utile à utiliser avec des outils comme ArgOCD, FLUXCD ou Spinnaker pour permettre des manifestes (ressources) partagés sur plusieurs clusters ou environnements sans duplication de code. Kustomalise permet les remplacements, les fusions et autres fonctionnalités de configuration.
Kubectl est la version Kubernetes CLI d'un couteau suisse, et peut faire beaucoup de choses. L'une de ces choses est de pouvoir faire un validation à sec sur un fichier YAML.
$ kubectl create --dry-run --validate -f invalid.yamlLes commandes de la barre à utiliser dans CI pour Lint ou valider les graphiques de casque.
Examinez un graphique pour les problèmes possibles.
NOTE:
helm linten soi est insuffisant pour valider adéquatement un graphique de barre. Il est recommandé d'utiliser le modèlehelm lintethelm templateen combinaison avec l'un des autres outils de validation manifeste. (Voir exemple ci-dessous)
Cette commande prend un chemin vers un graphique et exécute une série de tests pour vérifier que le graphique est bien formé.
Si le linter rencontre des choses qui feront échouer l'installation du graphique, il émettra des messages [ERROR] . S'il rencontre des problèmes qui rompent avec la convention ou la recommandation, il émettra des messages [WARNING] .
helm lint PATH [flags]helm template ./path/to/chart | kubeconform -strict -ignore-missing-schemasConfig-lint est un outil de ligne de commande pour valider les fichiers de configuration à l'aide de règles spécifiées dans YAML. Les fichiers de configuration peuvent être l'un des nombreux formats: Terraform, JSON, YAML, avec la prise en charge de Kubernetes. Il existe des règles intégrées fournies pour Terraform, et les fichiers personnalisés peuvent être utilisés pour d'autres formats.
config-lint -rules example-files/rules/kubernetes.yml example-files/configKube-Score, un outil qui effectue une analyse de code statique de vos définitions d'objets Kubernetes. La sortie est une liste de recommandations de ce que vous pouvez améliorer pour rendre votre application plus sécurisée et résiliente.
Kube-Score peut s'exécuter dans votre environnement CI / CD et quittera le code de sortie 1 si une erreur critique a été trouvée. Le niveau de déclenchement peut être changé en avertissement avec l'argument --xit-one-on-warning.
L'entrée à Kube-Score doit être toutes les applications que vous déployez dans le même espace de noms pour le meilleur résultat.
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 exécute une variété de vérifications pour garantir que les pods et contrôleurs Kubernetes sont configurés à l'aide des meilleures pratiques. Polaris est inclus comme un outil CLI pour tester les fichiers YAML locaux, par exemple dans le cadre d'un processus CI / CD.
Polaris peut être exécuté dans quelques modes différents:
Vous pouvez exécuter des audits sur la ligne de commande et voir la sortie comme JSON, YAML ou un score brut:
polaris audit --format yaml > report.yaml
polaris audit --format score
# 92Les audits peuvent s'exécuter contre un répertoire local ou un fichier YAML plutôt qu'un cluster:
polaris audit --audit-path ./deploy/
# or to use STDIN
cat pod.yaml | polaris audit --audit-path -Vous pouvez également exécuter l'audit sur une seule ressource au lieu de l'ensemble du cluster:
polaris audit --resource " nginx-ingress/Deployment.apps/v1/default-backend " Vous pouvez intégrer Polaris dans CI / CD pour les référentiels contenant l'infrastructure en tant que code. Par exemple, échouer si Polaris détecte des problèmes au niveau du danger, ou si le score tombe en dessous de 90%:
polaris audit --audit-path ./deploy/
--set-exit-code-on-danger
--set-exit-code-below-score 90Pour plus d'options d'utilisation pour la CLI, consultez le doc d'utilisation
Kube Linter est un outil d'analyse statique qui vérifie les fichiers et les graphiques de casques Kubernetes YAML pour s'assurer que les applications représentées en eux adhèrent aux meilleures pratiques. Kubelinter accepte les fichiers YAML en entrée et exécute une série de vérifications. S'il trouve des problèmes, il les signale et renvoie un code de sortie non nulle.
Datree est un outil CLI qui peut être utilisé localement ou dans votre CI / CD pour vous assurer que Kubernetes se manifeste et les graphiques de barre suivent les meilleures pratiques ainsi que les politiques de votre organisation. Il est livré avec 30 règles testées au combat au choix, ainsi que le support intégré pour la validation du schéma YAML et Kubernetes.
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubesec est un outil de numérisation de sécurité pour les pods, déploiements, daémons et statuts de Kubernetes.
kubesec scan manifest.yamlKubesec renvoie un renvoie un tableau JSON et peut numériser plusieurs documents YAML dans un seul fichier d'entrée.
[
{
"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 Bienvenue! Consultez les directives contributives pour plus d'informations.