Aller au contenu principal

Administration Guides

État du service

Vérifier le déploiement avec la commande suivante :

kubectl get cronjob trivy-node-scan-scheduler -n kosmos-system
NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
trivy-node-scan-scheduler 0 0 * * * <none> False 0 15h 62d

Vérifier que le scan s'est déroulé récemment avec la commande suivante :

kubectl get pod -n kosmos-system -l app=trivy-node-scanner
NAME READY STATUS RESTARTS AGE
trivy-node-scanner-kosmos-int-master-1-1760884563-f4jbd 0/1 Completed 0 4d
trivy-node-scanner-kosmos-int-master-1-1760970970-5vqw8 0/1 Completed 0 3d
trivy-node-scanner-kosmos-int-master-1-1761004805-cwmww 0/1 Completed 0 2d15h
.....

Mettre à jour la base

Vérification de la version

Déclencher manuellement l'éxécution du job de scan

kubectl create job --from=cronjob/trivy-node-scan-scheduler manual-run -n kosmos-system

Lister les pods de scan lancés par le job

kubectl get pod -n kosmos-system -l app=trivy-node-scanner --field-selector=status.phase=Running

Choisir un des pods et lancer cette commande

kubectl -n kosmos-system exec -it trivy-node-scanner-xxxx  -- trivy version

Exemple:

kubectl -n kosmos-system exec -it job.batch/trivy-node-scanner-kosmos-int-master-1-1761234459 -- trivy version
Version: 0.63.0
Vulnerability DB:
Version: 2
UpdatedAt: 2025-08-28 12:25:31.464742341 +0000 UTC
NextUpdate: 2025-08-29 12:25:31.464742121 +0000 UTC
DownloadedAt: 2025-08-28 14:22:15.106201414 +0000 UTC

Mise à jour

La base de données des CVE de trivy est embarquée dans l'image athea/trivy-node-scanner

La mise à jour de la base se fait donc via une mise à jour de l'image.

Installation de trivy

A faire sur un PC Ubuntu/Debian connecté à Internet

wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
trivy -v
Téléchargement des bases Trivy
mkdir -p /tmp/.cache/trivy
trivy --cache-dir /tmp/.cache/trivy/ rootfs --download-db-only
trivy --cache-dir /tmp/.cache/trivy/ rootfs --download-java-db-only

Elles sont stockées dans /tmp/.cache/trivy

tree /tmp/.cache/trivy
.
├── db
│   ├── metadata.json
│   └── trivy.db
└── java-db
├── metadata.json
└── trivy-java.db

3 directories, 4 files

Créer un fichier Dockerfile dans le répertoire /tmp/.cache/trivy pour mettre à jour l'image trivy

vi /tmp/.cache/trivy/Dockerfile

FROM hosted-registry.corp.athea/kosmos/trivy-node-scanner:1.0.8

# Copie des bases trivy dans l'image
COPY db/metadata.json /root/.cache/trivy/db/
COPY db/trivy.db /root/.cache/trivy/db/
COPY java-db/metadata.json /root/.cache/trivy/java-db/
COPY java-db/trivy-java.db /root/.cache/trivy/java-db/

ENTRYPOINT ["/usr/local/bin/trivy-node-scanner"]

Builder la nouvelle image avec les mises à jours : podman build . --tag hosted-registry.corp.athea/kosmos/trivy-node-scanner:1.0.8--$(date +"%d%m%y")

Exporter l'image : podman save hosted-registry.corp.athea/kosmos/trivy-node-scanner:1.0.8--$(date +"%d%m%y") > trivy.tar

Transférer la nouvelle image sur la plateforme via un import dans Data Ingestion dans un bucket S3.

Une fois le trivy.tar ingéré, le télécharger dans le rebond via la console S3 (Dans le bucket, appuyer sur Download).

Accdéder à la machine rebond et importer l'image dans ZOT.

sudo podman load -i trivy.tar
sudo podman login -u "zot_username" -p "zot_password" https://kosmos-registry.technique.artemis/
sudo podman tag hosted-registry.corp.athea/kosmos/trivy-node-scanner:1.0.8--121225 kosmos-registry.technique.artemis/athea/kosmos/trivy-node-scanner:1.0.8--121225
sudo podman push kosmos-registry.technique.artemis/athea/kosmos/trivy-node-scanner:1.0.8--121225

La mise à jour se fait via les commandes d'installation helmfile.

Il faut mettre à jour le fichier de déploiement helmfile /data/apps/platform-provisioner/helmfile.yaml.gotmpl avec la version de l'image qui vient d'être créer.

    values:
- values/trivy-node-scanner/values.yaml
- networkPolicy:
enabled: {{ .StateValues.networkPolicy.enabled }}
- image:
tag: '1.0.8--121225'
condition: trivy.enabled

Ensuite il faut déployer avec la commande suivante :

helmfile -e [environnement] sync -l app=trivy  # Par exemple [environnement] = pprod
k -n kosmos-system get cm trivy-node-scanner -oyaml|grep node-scanner # Pour vérifier que c'est bien pris en compte dans la configmap

Ensuite, vérifier que la nouvelle version de l'image est bien déployée. Pour cela, il faut attendre que le job se déclenche (tous les jours à minuit). Le trivy-node-scanner est un cronjob qui va lancer un job manuellement sur tous les nodes. Le scheduler utilise kubectl pour récupérer les nodes et lancer un job sur la base du configmap.

kubectl -n kosmos-system get job
kubectl -n kosmos-system describe job trivy-node-scanner-compute01-1769731203 |grep Image # trivy-node-scanner-compute01-1769731203 est par exemple le nom du job trouvé avec la commande précédente.

L'image est bien : hosted-registry.corp.athea/kosmos/trivy-node-scanner:xxxxx