Trivy
Trivy는 trivy-system 네임스페이스에 서 Trivy Operator로 배포됩니다. 체크인된 구성은 의도적으로 범위를 좁게 유지합니다. 취약점 스캔과 config-audit 스캔만 활성화되고, RBAC assessment, infra assessment, cluster compliance, exposed-secret scanning, SBOM 생성은 비활성화됩니다.
책임
- 배포된 워크로드를 감시하고 vulnerability/config 스캔 트리거
- 내부 Zot 레지스트리를 통해 미러된 이미지에 대해 scan job 실행
- operator 메트릭을 Prometheus에 게시
- TTL 기반이 아니라 배포 기반 스캔 주기 유지
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/security/trivy/argocd.yaml | trivy-system 네임스페이스를 대상으로 하는 ArgoCD Application |
lumie-infra/security/trivy/helm-values.yaml | operator 동작, scanner 리소스, 제외, metrics |
런타임 계약
| 표면 | 계약 |
|---|---|
| 활성 스캐너 | vulnerability와 config audit |
| 비활성 스캐너 | RBAC assessment, infra assessment, cluster compliance, exposed secret, SBOM |
| Scan job timeout | 10m |
| 동시 scan job 수 | 2 |
| Rescan 주기 | TTL 비활성화, 새 이미지 배포 시에만 스캔 |
| 제외 네임스페이스 | kube-system, kube-public, kube-node-lease, lumie-worker |
런타임 흐름
중요한 구현 세부 사항
- operator 이미지는
zot.lumie-infra.com/aquasec/trivy-operator:0.28.0으로 미러링됩니다. - scanner job은 standalone Trivy를 사용하며
5Gi스토리지와500Mi메모리를 사용합니다. scannerReportTTL과OPERATOR_SCANNER_REPORT_TTL이 모두 비어 있으므로 리포트는 타이머로 주기 재생성되지 않습니다.
장애 동작과 운영 리스크
- 큰 이미지나 느린 레지스트리는
10mscan-job timeout을 초과할 수 있습니다. - TTL 기반 rescan이 비활성화되어 있으므로 새 배포나 다른 트리거가 fresh scan을 유발하기 전까지 오래된 리포트가 남습니다.
- 네임스페이스 제외는 desired contract의 일부이며,
lumie-worker의 워크로드는 의도적으로 이 operator의 스캔 범위 밖에 있습니다. - 개별 scan job은 registry auth, 리소스 압박, 지원되지 않는 이미지 레이아웃 때문에 실패할 수 있지만 operator 자체는 healthy일 수 있습니다.
관측성
serviceMonitor.enabled: true로 Prometheus 스크레이프가 활성화됩니다.- operator 로그는 스케줄링, 리포트 생성, scan-job 실패를 설명합니다.
- 스캔 아티팩트는 operator가 설치한 Trivy report 커스텀 리소스에 저장됩니다.
검증
kubectl get applications.argoproj.io -n argocd trivy
kubectl get deploy,pods -n trivy-system -l app.kubernetes.io/instance=trivy
kubectl logs -n trivy-system -l app.kubernetes.io/instance=trivy --all-containers --tail=200
kubectl api-resources | rg 'trivy|report'
kubectl get jobs -n trivy-system
성공 신호:
trivyArgo CD application이Healthy및Synced상태입니다.trivy-system에 Trivy operator deployment가 가용 상태입니다.- report CRD가
kubectl api-resources에 존재합니다. - operator 로그에 반복적인
scan job timeout이나 registry-auth 실패 없이 scan job이 완료됩니다.