Sécurité

KubeLinter

Linter statique YAML Kubernetes par Red Hat/StackRox - détecte misconfigurations sécurité, resource limits manquantes, anti-patterns. Intégration CI/CD native.

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

ComposantValeur
AnalyseStatique YAML (pas de cluster requis)
Checks built-in40+ règles couvrant sécurité, reliability, performance
Formats d'entréeYAML brut, Charts Helm (après template), Kustomize (après build)
Formats de sortieTexte, JSON, SARIF
Configuration.kube-linter.yaml dans le projet

Catégories de checks

CatégorieExemples
SécuritéContainer root, privileged, hostPID, hostNetwork, capabilities
Resource limitsCPU/memory requests et limits manquants
ProbesLiveness/readiness probes absentes
ImagesTag latest ou digest absent
RBACServiceAccount avec trop de permissions
ConfigurationSecrets en variables d'environnement, ConfigMap manquants

Prérequis

RessourceValeur
OSLinux, macOS, Windows
BinaireAutonome, 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ômeCauseCorrection
Faux positifs sur les CRDsCRDs non reconnues comme ressources K8sAjouter --ignore-paths ou exemption dans la config
Checks trop stricts en devRègles production appliquées au devCréer un .kube-linter.yaml par environnement
Helm chart échoueLint 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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic