
KubeLinter est un outil d'analyse statique qui vérifie les fichiers YAML Kubernetes et les charts Helm afin de garantir que les applications qu'ils représentent respectent les bonnes pratiques.
Analyse statique pour Kubernetes
KubeLinter analyse les fichiers YAML Kubernetes, les charts Helm et les manifests Kustomize, et les vérifie par rapport à diverses bonnes pratiques, en mettant l'accent sur la préparation à la production et la sécurité.
KubeLinter exécute des vérifications par défaut pertinentes, conçues pour vous donner des informations utiles sur vos fichiers YAML Kubernetes, charts Helm et manifests Kustomize. Cela vise à aider les équipes à vérifier tôt et souvent les erreurs de configuration de sécurité et les bonnes pratiques DevOps. Quelques exemples courants incluent l'exécution de conteneurs en tant qu'utilisateur non root, l'application du moindre privilège et le stockage des informations sensibles uniquement dans des secrets.
KubeLinter est configurable, vous pouvez donc activer et désactiver des vérifications, ainsi que créer vos propres vérifications personnalisées, selon les politiques que vous souhaitez suivre au sein de votre organisation.
Lorsqu'une vérification de lint échoue, KubeLinter signale des recommandations pour résoudre les problèmes potentiels et renvoie un code de sortie non nul.
Consultez https://docs.kubelinter.io pour une documentation détaillée sur l'installation, l'utilisation et la configuration de KubeLinter.
Les binaires de Kube-linter sont disponibles ici : https://github.com/stackrox/kube-linter/releases/latest
Pour installer via Go, exécutez la commande suivante :
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest
Sinon, téléchargez le dernier binaire depuis Releases et ajoutez-le à votre PATH.
Pour installer avec Homebrew ou LinuxBrew, exécutez la commande suivante :
brew install kube-linter
nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
Installer KubeLinter à partir des sources est aussi simple que de suivre ces étapes :
Tout d'abord, clonez le dépôt KubeLinter.
git clone [email protected]:stackrox/kube-linter.git
Ensuite, compilez le code source. Cela créera les fichiers binaires kube-linter pour chaque plateforme et les placera dans le dossier .gobin.
make build
Enfin, vous êtes prêt à utiliser KubeLinter. Vérifiez votre version pour vous assurer que KubeLinter a bien été installé.
.gobin/kube-linter version
Il existe plusieurs niveaux de tests. Chaque niveau doit réussir.
Tests unitaires go :
make test
Tests d'intégration de bout en bout :
make e2e-test
et enfin, les tests d'intégration de bout en bout avec bats-core :
make e2e-bats
Les images KubeLinter sont signées par cosign. Nous recommandons de vérifier l'image avant de l'utiliser.
Une fois cosign installé, vous pouvez utiliser la clé publique KubeLinter pour vérifier l'image KubeLinter avec :
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAME
KubeLinter fournit également des signatures cosign sans clé.
Vous pouvez vérifier l'image KubeLinter avec :
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME
Exécuter KubeLinter pour linter vos fichiers YAML ne nécessite que deux étapes dans sa forme la plus simple.
Localisez le fichier YAML que vous souhaitez tester pour les bonnes pratiques de sécurité et de préparation à la production :
Exécutez la commande suivante :
kube-linter lint /path/to/your/yaml.yaml
Considérez le fichier exemple de spécification de pod pod.yaml suivant. Ce fichier présente deux problèmes de préparation à la production et un problème de sécurité :
Problème de sécurité :
Préparation à la production :
Les limites de mémoire du conteneur ne sont pas définies, ce qui pourrait lui permettre de consommer une mémoire excessive
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
Copiez le YAML ci-dessus dans pod.yaml et lintez ce fichier en exécutant la commande suivante :
kube-linter lint pod.yaml
KubeLinter exécute ses vérifications par défaut et signale des recommandations. Voici la sortie de notre commande précédente.
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 prend en charge la génération de plusieurs formats de sortie en une seule exécution. Cela est utile pour générer à la fois des rapports lisibles par l'humain et par la machine :
kube-linter lint \
--format sarif --output kube-linter.sarif \
--format json --output kube-linter.json \
--config .kube-linter.yaml \
pod.yaml
Cette commande va :
kube-linter.sarifkube-linter.jsonRemarque : Les formats multiples nécessitent des drapeaux --output explicites. Pour une sortie mono-format vers stdout, utilisez un seul drapeau --format sans --output.
Pour plus de détails sur l'utilisation de plusieurs formats de sortie, consultez la documentation.
Pour en savoir plus sur l'utilisation et la configuration de KubeLinter, consultez la page de documentation.
Voici des tutoriels sur KubeLinter écrits par des utilisateurs. Si vous souhaitez en ajouter un à cette liste, envoyez une PR !
KubeLinter est sous licence Apache License 2.0.
Si vous souhaitez interagir avec la communauté KubeLinter, y compris les mainteneurs et les autres utilisateurs, vous pouvez rejoindre l'espace de travail Slack ici.
Des changements de rupture pourront survenir à l'avenir concernant l'utilisation des commandes, les drapeaux et les formats de fichiers de configuration. Cependant, nous vous encourageons à utiliser KubeLinter pour tester vos fichiers YAML d'environnement, voir ce qui casse, et contribuer.
Pour rappel, toute participation à la communauté KubeLinter est régie par notre code de conduite.
KubeLinter est créé avec ❤️ par StackRox et est désormais propulsé par Red Hat.