
KubeLinter ist ein statisches Analysewerkzeug, das Kubernetes-YAML-Dateien und Helm-Charts prüft, um sicherzustellen, dass die darin dargestellten Anwendungen Best Practices einhalten.
Statische Analyse für Kubernetes
KubeLinter analysiert Kubernetes-YAML-Dateien, Helm-Charts und Kustomize-Manifeste und prüft sie anhand einer Vielzahl von Best Practices, mit dem Schwerpunkt auf Produktionsreife und Sicherheit.
KubeLinter führt sinnvolle Standardprüfungen durch, die darauf ausgelegt sind, nützliche Informationen über Ihre Kubernetes-YAML-Dateien, Helm-Charts und Kustomize-Manifeste zu liefern. Dies soll Teams dabei helfen, frühzeitig und regelmäßig auf Sicherheitsfehlkonfigurationen und DevOps-Best Practices zu prüfen. Einige häufige Beispiele hierfür sind das Ausführen von Containern als Nicht-Root-Benutzer, die Durchsetzung von Least Privilege und das Speichern sensibler Informationen ausschließlich in Secrets.
KubeLinter ist konfigurierbar, sodass Sie Prüfungen aktivieren und deaktivieren sowie eigene benutzerdefinierte Prüfungen erstellen können, je nach den Richtlinien, die Sie in Ihrer Organisation befolgen möchten.
Wenn eine Lint-Prüfung fehlschlägt, meldet KubeLinter Empfehlungen zur Behebung möglicher Probleme und gibt einen Exit-Code ungleich Null zurück.
Besuchen Sie https://docs.kubelinter.io für eine ausführliche Dokumentation zur Installation, Verwendung und Konfiguration von KubeLinter.
Kube-Linter-Binärdateien finden Sie hier: https://github.com/stackrox/kube-linter/releases/latest
Führen Sie zur Installation mit Go den folgenden Befehl aus:
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest
Andernfalls laden Sie die neueste Binärdatei von Releases herunter und fügen Sie sie Ihrem PATH hinzu.
Führen Sie zur Installation mit Homebrew oder LinuxBrew den folgenden Befehl aus:
brew install kube-linter
nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
Die Installation von KubeLinter aus dem Quellcode ist so einfach wie die folgenden Schritte:
Klonen Sie zunächst das KubeLinter-Repository.
git clone [email protected]:stackrox/kube-linter.git
Kompilieren Sie dann den Quellcode. Dadurch werden die kube-linter-Binärdateien für jede Plattform erstellt und im Ordner .gobin abgelegt.
make build
Schließlich können Sie KubeLinter verwenden. Überprüfen Sie Ihre Version, um sicherzustellen, dass Sie KubeLinter erfolgreich installiert haben.
.gobin/kube-linter version
Es gibt mehrere Testebenen. Jede Ebene muss bestanden werden.
go-Unit-Tests:
make test
End-to-End-Integrationstests:
make e2e-test
Und schließlich End-to-End-Integrationstests mit bats-core:
make e2e-bats
KubeLinter-Images sind mit cosign signiert. Wir empfehlen, das Image vor der Verwendung zu verifizieren.
Sobald Sie cosign installiert haben, können Sie den öffentlichen KubeLinter-Schlüssel verwenden, um das KubeLinter-Image zu verifizieren:
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAME
KubeLinter bietet auch cosign-Schlüssellose Signaturen an.
Sie können das KubeLinter-Image mit folgendem Befehl verifizieren:
# HINWEIS: Schlüssellose Signaturen sind NICHT PRODUKTIONSREIF.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME
Die Verwendung von KubeLinter zum Linten Ihrer YAML-Dateien erfordert in seiner einfachsten Form nur zwei Schritte.
Suchen Sie die YAML-Datei, die Sie auf Sicherheits- und Produktionsreife-Best Practices testen möchten:
Führen Sie den folgenden Befehl aus:
kube-linter lint /pfad/zu/ihrer/yaml.yaml
Betrachten Sie die folgende Beispiel-Pod-Spezifikationsdatei pod.yaml. Diese Datei weist zwei Probleme in Bezug auf die Produktionsreife und ein Sicherheitsproblem auf:
Sicherheitsproblem:
Produktionsreife:
Die Speicherlimits des Containers sind nicht festgelegt, was dazu führen könnte, dass er übermäßig viel Speicher verbraucht
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
resources:
requests:
memory: "64Mi"
cpu: "250m"
command: [ "sh", "-c", "sleep 1h" ]
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: false
Kopieren Sie das obige YAML in pod.yaml und linten Sie diese Datei, indem Sie den folgenden Befehl ausführen:
kube-linter lint pod.yaml
KubeLinter führt seine Standardprüfungen durch und meldet Empfehlungen. Unten ist die Ausgabe unseres vorherigen Befehls.
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) The container "sec-ctx-demo" is using an invalid container image, "busybox". Please use images that are not blocked by the `BlockList` criteria : [".*:(latest)$" "^[^:]*$" "(.*/[^:]+)$"] (check: latest-tag, remediation: Use a container image with a specific tag other than latest.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" does not have a read-only root file system (check: no-read-only-root-fs, remediation: Set readOnlyRootFilesystem to true in the container securityContext.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" has memory limit 0 (check: unset-memory-requirements, remediation: Set memory limits for your container based on its requirements. Refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits for details.)
Error: found 3 lint errors
KubeLinter unterstützt die Erzeugung mehrerer Ausgabeformate in einem einzigen Lauf. Dies ist nützlich, um gleichzeitig sowohl menschenlesbare als auch maschinenlesbare Berichte zu erstellen:
kube-linter lint \
--format sarif --output kube-linter.sarif \
--format json --output kube-linter.json \
--config .kube-linter.yaml \
pod.yaml
Dieser Befehl wird:
kube-linter.sarif erzeugenkube-linter.json erzeugenHinweis: Mehrere Formate erfordern explizite --output-Flags. Für die Ausgabe eines einzelnen Formats auf stdout verwenden Sie nur ein --format-Flag ohne --output.
Weitere Details zur Verwendung mehrerer Ausgabeformate finden Sie in der Dokumentation.
Um mehr über die Verwendung und Konfiguration von KubeLinter zu erfahren, besuchen Sie die Dokumentationsseite.
Die folgenden Tutorials zu KubeLinter wurden von Benutzern geschrieben. Wenn Sie eines haben, das Sie zu dieser Liste hinzufügen möchten, senden Sie bitte einen PR!
KubeLinter ist unter der Apache License 2.0 lizenziert.
Wenn Sie sich mit der KubeLinter-Community austauschen möchten, einschließlich Maintainern und anderen Benutzern, können Sie dem Slack-Workspace hier beitreten.
In Zukunft kann es zu bahnbrechenden Änderungen an der Befehlsnutzung, den Flags und den Konfigurationsdateiformaten kommen. Wir ermutigen Sie jedoch, KubeLinter zu verwenden, um Ihre Umgebungs-YAML-Dateien zu testen, zu sehen, was bricht, und beizutragen.
Zur Erinnerung: Die gesamte Teilnahme an der KubeLinter-Community unterliegt unserem Verhaltenskodex.
KubeLinter wurde mit ❤️ von StackRox erstellt und wird jetzt von Red Hat unterstützt.