Eine All-in-One-Sammlung von Tools zum Ausführen von Lining, gemeinsamer Validierung, statischer Codeanalyse, Sicherheits-Scan, Konfigurationstests, Prüfung, Kustomize-Build und Trockenlaufkonfiguration für strukturierte Kubernetes-YAML-Manifeste. Entwickelt, um im Rahmen der Validierung und Prüfung in einem CI (Continuious Integration) -Prozess auszuführen, insbesondere für Kubernetes -Cluster, die über Gitops verwaltet werden.
Ich war nicht in der Lage, ein einzelnes Docker -Bild zu finden, das alle wichtigsten Validierungstools enthielt (von denen es mehrere gibt!) Kubernetes YAML -Manifestdateien als Teil eines CI/CD -Prozesses validieren, bevor sie automatisch in Kubernetes bereitgestellt werden. Dieses Repo ist nicht so konzipiert, wie diese einzelnen Tools verwendet werden können, obwohl es einige grundlegende Verwendungsbeispiele enthält. Die folgenden Links sollten Sie zu Dokumentationen führen, um weitere Details zur Verwendung jedes Tools zu verwenden. Wir haben es als nützlich empfunden, mehrere Tools während unseres CI -Validierungs- und Scanprozesses zu verwenden, da einige Tools bestimmte Aspekte überprüfen, die andere nicht können.
Nehmen Sie das neueste Bild von Github -Paketen oder von Docker Hub.
Sie können das Bild direkt in Docker ausführen oder unten für CI/CD -Nutzungsbeispiele finden.
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| Werkzeug | Version | Zweck | Beschreibung |
|---|---|---|---|
| Kubectl | 1.23.5 | Cli | Kubernetes Cli. Kann mit --dry-run=client verwendet werden, um Manifests zu validieren |
| Helm | 3.8.1 | Cli | Helm hilft Ihnen bei der Verwaltung von Kubernetes -Anwendungen - Definieren, Installieren und Aktualisieren von Kubernetes -Anwendungen als Helm -Diagramme. Ausführen als Validierungsinstrument, kann als helm lint oder helm template ausgeführt werden. |
| Yamllint | 1.26.3 | Linter | Grundlegende Linter für YAML -Dateien |
| Kubeval | 0,16,1 | Validierung | Werkzeug zur Validierung eines Kubernetes -Yaml -Manifests. Funktioniert nicht mit CRDs. |
| Kustomize | 4.5.3 | Kompilieren | Vorlagefreie Möglichkeit zum Anpassen von App-Konfigurationen. Nützlich, um Kustomize -Konfigurationen zu validieren. |
| Konfigurationsspin | 1.6.0 | Validierung | Validieren Sie Konfigurationsdateien mit benutzerdefinierten in YAML angegebenen benutzerdefinierten Regeln. |
| Kontem | 0,30,0 | Tests | Dienstprogramm mit dem Schreiben von Tests gegen strukturierte Konfigurationsdaten. |
| Kube Score | 1.14.0 | Sicherheit | Tool, das eine statische Codeanalyse von Kubernetes -Objektdefinitionen durchführt. |
| Polaris | 5.1.0 | Validierung | Identifiziert Kubernetes -Bereitstellungskonfigurationsfehler |
| Kube -Linter | 0.2.6 | Sicherheit | Tool für das Linter und das statische Analyse, mit dem sich Kubernetes manifestiert |
| Kubeconform | 0.4.13 | Validierung | Kubernetes manifestiert das Validierungsinstrument wie Kuubeval mit CRD -Unterstützung |
| Kubeaudit | 0,16,0 | Sicherheit | Prüfungscluster oder offensichtliche Dateien für Sicherheitsbedenken |
| Datre | 1.0.15 | Politik | Stellen Sie sicher, dass Kubernetes Manifests und Helm -Diagramme gültig sind und Ihre Richtlinien befolgen. |
| KUBSEC | 2.11.4 | Sicherheit | Sicherheitsrisikoanalyse für Kubernetes -Ressourcen |
Idealerweise sollte der Kubernetes-Validations-Tools-Container in einem CI-Erstellungsprozess verwendet werden, um Konfigurationen und Manifeste oder Helm-Diagramme zu validieren, zu scannen und zu verabschieden. Es ist optimal, diese Tools als Teil eines kontinuierlichen Integrations -Workflows von Gitops auszuführen.
Verwenden Sie den Container -Spezifizierer, um einen Schritt in einem Container auszuführen. Stellen Sie sicher, dass Sie die Ausführungen als geeignete Host-Umgebung für Ihren Container angeben (Ubuntu-Latest für Linux-Container, Windows-Latest für Windows-Container). Zum Beispiel:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container Dieses Beispiel ist nützlich, wenn Jenkins Agenten in einem Kubernetes -Cluster läuft: 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.yamlSie können ein Bild definieren, das für alle Jobs verwendet wird, und eine Liste von Diensten, die Sie während der Laufzeit verwenden möchten:
default :
image : deck15/kubeval-tools:latest
validate :
script :
- kubeconform -summary manifests.yaml KubeAudit ist ein Befehlszeilen -Tool und ein GO -Paket zur Prüfung von Kubernetes -Clustern für verschiedene Sicherheitsbedenken, wie zum Beispiel:
KubeAudit stellt sicher, dass Sie sichere Container bereitstellen!
Kubeval ist ein Tool zur Validierung einer Kubernetes -YAML- oder JSON -Konfigurationsdatei. Dies wird von Schemas verwendet, die aus der Kubernetes OpenAPI -Spezifikation erzeugt wurden, und kann daher Schemas für mehrere Versionen von Kubernetes validieren.
Kubeconform ist ein Kubernetes -Manifest -Validierungsinstrument. Erstellen Sie es in Ihren CI, um Ihre Kubernetes -Konfiguration zu validieren!
Es ist inspiriert, enthält Code von und ist so konzipiert, dass sie in der Nähe von Kuubeval bleiben, jedoch mit den folgenden Verbesserungen:
Validierung einer einzelnen, gültigen Datei
kubeconform fixtures/valid.yaml
echo $?
0Validierung einer einzelnen ungültigen Datei, der Einstellung der Ausgabe auf JSON und Druck einer Zusammenfassung
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 $?
1Das Pass manifestiert sich über Stdin
cat fixtures/valid.yaml | kubeconform -summary
Summary: 1 resource found parsing stdin - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0Validierung eines Ordners, erhöht die Anzahl der parallelen Arbeiter
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 ist ein Dienstprogramm, mit dem Sie Tests gegen strukturierte Konfigurationsdaten schreiben können. Zum Beispiel können Sie Tests für Ihre Kubernetes -Konfigurationen oder Tekton -Pipeline -Definitionen, Terraformcode, serverlose Konfigurationen oder andere strukturierte Daten schreiben.
Conftest stützt sich auf die Rego -Sprache von Open Policy Agent zum Schreiben der Behauptungen.
Yamllint ist ein Linter für YAML -Dateien.
Yamllint überprüft nicht nur die Syntaxgültigkeit, sondern auch auf Seltsamkeiten wie wichtige Wiederholungen und kosmetische Probleme wie Länge Länge, Nachfolger, Eindrückung usw.
Mit Kustomize können Sie rohe, vorlagenfreie YAML-Dateien für mehrere Zwecke anpassen, sodass der ursprüngliche YAML so unberührt und nutzbar ist.
Kustomize Targets Kubernetes; Es versteht und kann Kubernetes -API -Objekte stylen. Es ist wie Make, in dem, was es tut, in einer Datei deklariert wird, und es ist wie SED, da es den bearbeiteten Text ausgibt. Kustomize durchquert ein Kubernetes -Manifest, um Konfigurationsoptionen ohne Gabel hinzuzufügen, zu entfernen oder zu aktualisieren.
Kustomize ist besonders nützlich für die Verwendung von Tools wie ArgoCD, FluxCD oder Spinnaker, um gemeinsame Manifeste (Ressourcen) in mehreren Clustern oder Umgebungen zu ermöglichen, ohne Code zu duplizieren. Kustomize ermöglicht Überschreibungen, Verschmelzungen und andere Konfigurationsfunktionen.
Kubectl ist die Kubernetes -CLI -Version eines Schweizer Armeemessers und kann viele Dinge tun. Eines dieser Dinge ist es, in einer YAML-Datei einen trockenen Validieren durchzuführen.
$ kubectl create --dry-run --validate -f invalid.yamlHelm -Befehle, die in CI verwendet werden sollen, um Helmdiagramme zu finieren oder zu validieren.
Untersuchen Sie ein Diagramm für mögliche Probleme.
NOTIZ:
helm lintan sich selbst reicht nicht aus, um ein Helmdiagramm angemessen zu validieren. Es wird empfohlen,helm lintundhelm templatein Kombination mit einem der anderen Manifest -Validierungsinstrumente zu verwenden. (Siehe unten Beispiel)
Dieser Befehl nimmt einen Pfad zu einem Diagramm und führt eine Reihe von Tests aus, um zu überprüfen, ob das Diagramm gut geformt ist.
Wenn der Linter auf Dinge stößt, die dazu führen, dass das Diagramm die Installation fehlschlägt, wird [ERROR] Nachrichten ausgegeben. Wenn es auf Probleme stößt, die mit Konvention oder Empfehlung brechen, werden [WARNING] Nachrichten ausgestrahlt.
helm lint PATH [flags]helm template ./path/to/chart | kubeconform -strict -ignore-missing-schemasConfig-Lint ist ein Befehlszeilen-Tool zum Validieren von Konfigurationsdateien mithilfe von Regeln, die in YAML angegeben wurden. Die Konfigurationsdateien können eines von mehreren Formaten sein: Terraform, JSON, YAML, mit Unterstützung für Kubernetes. Für Terraform sind integrierte Regeln vorgesehen, und für andere Formate können benutzerdefinierte Dateien verwendet werden.
config-lint -rules example-files/rules/kubernetes.yml example-files/configKube-Score, ein Tool, das eine statische Codeanalyse Ihrer Kubernetes-Objektdefinitionen durchführt. Die Ausgabe ist eine Liste von Empfehlungen, was Sie verbessern können, um Ihre Anwendung sicherer und belastbarer zu gestalten.
Kube-Score kann in Ihrer CI/CD-Umgebung ausgeführt werden und beendet den Exit-Code 1, wenn ein kritischer Fehler gefunden wurde. Die Auslöser kann mit dem Argument-Exit-On-Warning-Argument auf Warnungen gewarnt werden.
Die Eingabe in Kube-Score sollte alle Anwendungen sein, die Sie für das beste Ergebnis im gleichen Namespace bereitstellen.
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 führt eine Vielzahl von Schecks durch, um sicherzustellen, dass Kubernetes -Pods und -Controller mithilfe von Best Practices konfiguriert werden. Polaris ist als CLI -Tool enthalten, um lokale YAML -Dateien zu testen, z. B. als Teil eines CI/CD -Prozesses.
Polaris kann in verschiedenen Modi ausgeführt werden:
Sie können Audits in der Befehlszeile ausführen und die Ausgabe als JSON, YAML oder eine Rohbewertung ansehen:
polaris audit --format yaml > report.yaml
polaris audit --format score
# 92Audits können eher gegen ein lokales Verzeichnis oder eine YAML -Datei als einen Cluster ausgeführt werden:
polaris audit --audit-path ./deploy/
# or to use STDIN
cat pod.yaml | polaris audit --audit-path -Sie können das Audit auch auf einer einzelnen Ressource anstelle des gesamten Clusters ausführen:
polaris audit --resource " nginx-ingress/Deployment.apps/v1/default-backend " Sie können Polaris in CI/CD für Repositorys integrieren, die Infrastruktur-As-Code enthalten. Zum Beispiel, um zu scheitern, wenn Polaris Probleme auf Gefahrenebene erkennt oder wenn die Punktzahl unter 90%sinkt:
polaris audit --audit-path ./deploy/
--set-exit-code-on-danger
--set-exit-code-below-score 90Weitere Nutzungsoptionen für CLI finden Sie im Nutzungsdokument
Kube Linter ist ein statisches Analysetool, das Kubernetes YAML -Dateien und Helmdiagramme überprüft, um sicherzustellen, dass die darin enthaltenen Anwendungen an Best Practices haften. Kubelinter akzeptiert YAML -Dateien als Eingabe und führt eine Reihe von Überprüfungen aus. Wenn es Probleme findet, meldet es sie und gibt einen Exit-Code ungleich Null zurück.
Datree ist ein CLI -Tool, das lokal oder in Ihrem CI/CD verwendet werden kann, um sicherzustellen, dass Kubernetes Manifts und Helm -Diagramme sowohl den Best Practices als auch den Richtlinien Ihres Unternehmens folgen. Es verfügt über 30 kattgetestete Regeln zur Auswahl, zusammen mit der integrierten Unterstützung für die Validierung von YAML- und Kubernetes-Schema.
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubsesec ist ein Sicherheits -Scan -Tool für Kubernetes -Pods, Bereitstellungen, Daemonets und Statefulsets.
kubesec scan manifest.yamlKubsesec gibt ein JSON -Array zurück und kann mehrere YAML -Dokumente in einer einzelnen Eingabedatei scannen.
[
{
"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 Willkommen! Weitere Informationen finden Sie in den beitragenden Richtlinien.