KubeLinter est un outil d'analyse statique pour manifests Kubernetes développé par StackRox, maintenant intégré dans le portefeuille Red Hat. Il analyse les fichiers YAML avant leur déploiement pour détecter les mauvaises configurations de sécurité (containers root, pas de securityContext, images latest), les oublis de resource limits, et les anti-patterns de reliability. Son point fort est l'intégration native dans les pipelines CI/CD : pas de cluster requis, juste un binaire et tes YAML.
Informations essentielles
Origine : StackRox → Red Hat · Licence : Apache 2.0 · Architectures : x86_64, ARM64
Liens : Documentation · GitHub · Releases
Support : Projet actif sous Red Hat. Intégré dans Red Hat Advanced Cluster Security.
Stack par défaut
| Composant | Valeur |
|---|---|
| Analyse | Statique YAML (pas de cluster requis) |
| Checks built-in | 40+ règles couvrant sécurité, reliability, performance |
| Formats d'entrée | YAML brut, Charts Helm (après template), Kustomize (après build) |
| Formats de sortie | Texte, JSON, SARIF |
| Configuration | .kube-linter.yaml dans le projet |
Catégories de checks
| Catégorie | Exemples |
|---|---|
| Sécurité | Container root, privileged, hostPID, hostNetwork, capabilities |
| Resource limits | CPU/memory requests et limits manquants |
| Probes | Liveness/readiness probes absentes |
| Images | Tag latest ou digest absent |
| RBAC | ServiceAccount avec trop de permissions |
| Configuration | Secrets en variables d'environnement, ConfigMap manquants |
Prérequis
| Ressource | Valeur |
|---|---|
| OS | Linux, macOS, Windows |
| Binaire | Autonome, aucune dépendance |
Installation
# Linux amd64
curl -Lo kube-linter.tar.gz \
https://github.com/stackrox/kube-linter/releases/latest/download/kube-linter-linux.tar.gz
tar -xzf kube-linter.tar.gz
sudo mv kube-linter /usr/local/bin/
# macOS
brew install kube-linter
# Go install
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest
# Vérifier
kube-linter version
Vérification de l'installation
# 1. Version
kube-linter version
# 2. Lister tous les checks disponibles
kube-linter checks list | head -20
# Affiche la liste des 40+ règles avec leur description
# 3. Tester sur un manifest simple
cat > test-deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-app
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: app
image: nginx:latest
EOF
kube-linter lint test-deployment.yaml
# Doit signaler: no liveness probe, no readiness probe, image tag 'latest', no resource limits
# 4. Rapport JSON
kube-linter lint test-deployment.yaml --format json | jq '.Reports | length'
# Nombre de violations
rm test-deployment.yaml
Pièges courants
| Symptôme | Cause | Correction |
|---|---|---|
| Faux positifs sur les CRDs | CRDs non reconnues comme ressources K8s | Ajouter --ignore-paths ou exemption dans la config |
| Checks trop stricts en dev | Règles production appliquées au dev | Créer un .kube-linter.yaml par environnement |
| Helm chart échoue | Lint sur les templates bruts (avec {{ }}) | Rendre d'abord avec helm template |
Utilisation
Analyser un répertoire
# Analyser tous les YAML d'un répertoire
kube-linter lint ./k8s/
# Analyser un fichier unique
kube-linter lint deployment.yaml
# Sortie JSON
kube-linter lint ./k8s/ --format json > report.json
# Sortie SARIF (GitHub Code Scanning)
kube-linter lint ./k8s/ --format sarif > kube-linter.sarif
Avec Helm
# Rendre le chart puis linter le résultat
helm template my-release ./my-chart -f values.yaml | kube-linter lint -
# Ou via fichier temporaire
helm template my-release ./my-chart > /tmp/rendered.yaml
kube-linter lint /tmp/rendered.yaml
Avec Kustomize
kustomize build ./overlays/production | kube-linter lint -
Configuration
Fichier .kube-linter.yaml
# .kube-linter.yaml
checks:
# Activer tous les checks
doNotAutoAddDefaults: false
# Désactiver des checks spécifiques
exclude:
- "latest-tag" # Autoriser :latest en dev
- "no-liveness-probe" # Pas requis pour les Jobs
customChecks:
# Règle custom : interdire les namespaces non autorisés
- name: "required-namespace-label"
template: "required-label"
params:
key: "team"
scope:
matchKinds:
- apiGroups: [""]
kinds: [Namespace]
# Utiliser la config du projet
kube-linter lint ./k8s/ --config .kube-linter.yaml
Exemptions inline
# Exclure un check spécifique pour une ressource
metadata:
annotations:
ignore-check.kube-linter.io/no-liveness-probe: "This is a batch Job"
Intégration CI/CD
GitHub Actions
- name: KubeLinter
uses: stackrox/kube-linter-action@v1
with:
directory: k8s/
config: .kube-linter.yaml
format: sarif
output-file: kube-linter.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: kube-linter.sarif
GitLab CI
kube-linter:
image: stackrox/kube-linter:latest
script:
- kube-linter lint ./k8s/ --config .kube-linter.yaml
artifacts:
reports:
junit: kube-linter-junit.xml
Mise à jour
curl -Lo kube-linter.tar.gz \
https://github.com/stackrox/kube-linter/releases/latest/download/kube-linter-linux.tar.gz
tar -xzf kube-linter.tar.gz && sudo mv kube-linter /usr/local/bin/
kube-linter version
Troubleshooting
# Voir tous les checks disponibles avec description
kube-linter checks list
# Détail d'un check spécifique
kube-linter checks list | grep -A5 "no-read-only-root-fs"
# Mode verbose
kube-linter lint ./k8s/ --verbose
# Tester une règle custom
kube-linter lint ./k8s/ --do-not-auto-add-defaults --add-all-built-in-checks
Commandes utiles
kube-linter lint <fichier-ou-dossier> # Analyser des manifests
kube-linter lint <dir> --format json # Sortie JSON
kube-linter lint <dir> --format sarif # Sortie SARIF
kube-linter lint <dir> --config .kube-linter.yaml # Avec config projet
kube-linter checks list # Lister tous les checks
helm template <chart> | kube-linter lint - # Linter un chart Helm
Ressources
- Documentation officielle : https://docs.kubelinter.io/
- GitHub : https://github.com/stackrox/kube-linter
- Releases : https://github.com/stackrox/kube-linter/releases
- GitHub Action : https://github.com/stackrox/kube-linter-action
- Red Hat ACS (version entreprise) : https://www.redhat.com/en/technologies/cloud-computing/openshift/advanced-cluster-security-kubernetes