🗺️ 系列目录:
-
- K8s系列一:Ubuntu 22.04 从零搭建集群(Flannel + Containerd) 【基础设施】
- K8s系列二:安装 Dashboard – 原生 Web 控制台配置 【官方可视化】
- K8s系列三:安装 Rancher – 企业级多集群管理平台 【企业级管理】
- K8s系列四:安装 Kuboard – 国产可视化运维工具 【轻量可视化】
- K8s系列五:Elkeid入侵检测系统 容器 K8s 安全部署与检测 【运行时安全】
- K8s系列六:HarborGuard 容器安全扫描平台部署与实战 【综合扫描平台】
- K8s系列七:NeuVector 容器安全平台部署与实践 【全栈容器安全】
- K8s系列八:三大容器安全平台对比总结(HarborGuard / NeuVector / Elkeid) 【横向对比】
- K8s系列九:Trivy 轻量级安全扫描实战 – 镜像、K8s、代码全覆盖 【CI/CD 集成首选】👈 当前篇章
一、工具简介
Trivy 是一款开源、简单易用、高精度的安全扫描工具,支持镜像漏洞、配置风险、密钥泄露、SBOM 清单等能力,广泛用于 CI/CD 流水线、镜像仓库、K8s 集群安全检测。
二、安装Trivy (Ubuntu 22.04)
wget https://github.com/aquasecurity/trivy/releases/download/v0.70.0/trivy_0.70.0_Linux-64bit.tar.gz
tar zxvf trivy_0.70.0_Linux-64bit.tar.gz
mv trivy /usr/local/bin/
chmod +x /usr/local/bin/trivy
trivy --version
三、解决网络与 DB 稳定性问题
3.1 问题描述
Trivy 的核心能力依赖于漏洞数据库(trivy-db),默认从 GitHub Container Registry (ghcr.io) 下载。在国内或网络不稳定环境下,极易因网络抖动导致下载失败或中断(unexpected EOF)。
核心依赖地址:
ghcr.io/aquasecurity/trivy-db
3.2 解决方案
提前、单独下载数据库
trivy image --download-db-only
下载成功后,数据库会保存在本地缓存目录(
~/.cache/trivy/db),内容如下:root@k8s-master:~# ll /root/.cache/trivy/db -h
total 1.1G
drwxr-xr-x 2 root root 4.0K Apr 22 17:11 ./
drwxr-xr-x 4 root root 4.0K Apr 22 17:11 ../
-rw-r--r-- 1 root root 153 Apr 22 17:11 metadata.json
-rw-r--r-- 1 root root 1.1G Apr 22 15:06 trivy.db
此后,无论网络状况如何,Trivy 都将优先使用本地缓存进行扫描,不再受网络波动影响。
四、核心扫描场景与命令
4.1 场景一:扫描单个镜像(最常用)
扫描一个简单的 alpine:latest 镜像,验证基础功能。
trivy image alpine:latest
输出解读:
- Summary 表格:展示目标、类型、漏洞总数和密钥数量。
- 漏洞详情:列出每个漏洞影响的库、CVE 编号、严重级别、当前版本和修复版本。
示例输出片段(alpine 3.23.3):


4.2 场景二:扫描真实业务镜像(关注高危漏洞)
生产环境中,通常只关注 HIGH 和 CRITICAL 级别的漏洞,以便快速响应。
# 仅扫描 HIGH 和 CRITICAL 级别的漏洞
trivy image --severity HIGH,CRITICAL registry.cn-hangzhou.aliyuncs.com/jeson/harborguard:latest
# 更快的方式:仅启用漏洞扫描,禁用密钥等扫描
trivy image --scanners vuln registry.cn-hangzhou.aliyuncs.com/jeson/harborguard:latest
结果解读(示例):
Total: 72 (HIGH: 68, CRITICAL: 4)
- Total: 72 个高危及以上漏洞。
- CRITICAL(严重):共 4 个,必须立即修复。重点关注
libcrypto3、libssl3、openssl、pcre2等基础库。 - Fixed Version:提供明确的修复版本号(如
Installed: 3.5.4 -> Fixed: 3.5.5),意味着只需升级基础镜像版本即可修复。
4.3 场景三:扫描整个 K8s 集群
一键扫描集群中所有工作负载使用的镜像,发现存量风险。
trivy k8s --report summary # 只输出摘要
trivy k8s --include-namespaces default --report summary # 只看 default namespace + 摘要(推荐)
trivy k8s --report all # 输出完整表格(慎用)
trivy k8s --include-namespaces default --severity HIGH,CRITICAL --report summary # 只扫高风险
4.4 场景四:扫描 Kubernetes 配置文件
在部署前,检查 YAML 配置是否存在安全风险(如特权容器、hostNetwork 等)。
trivy config hostnetwork-pod.yaml
典型告警示例:

本次扫描发现
hostnetwork-pod.yaml 存在20 项安全配置违规,其中 5 项高危、4 项中危。主要风险包括:共享主机网络、共享主机进程、root 运行、可写文件系统、未做安全加固,属于典型高风险测试容器。4.5 场景五:扫描本地文件系统/代码目录(DevSecOps 左移)
在 CI 阶段,扫描项目代码目录,发现依赖库漏洞、硬编码密码或 API Key。
trivy fs /root
例如,扫描 acme.sh 项目目录:
root@k8s-master:/tmp/acme.sh-master# trivy fs ./
2026-04-22T16:39:10+08:00 INFO Number of language-specific files num=0
五、实战经验与技巧
5.1 分析扫描结果的核心逻辑
- 关注 CRITICAL 和 HIGH:低风险漏洞可暂缓,但严重和高危漏洞应优先处理。
- 关注 “Fixed Version”:如果该字段有值,说明上游已修复,通常通过升级基础镜像或依赖包即可解决。
- 关注基础库:如
openssl、libcrypto、musl、zlib等,这些底层库的漏洞影响范围广,需尽快修复。
5.2 忽略未修复的漏洞
某些漏洞可能暂无官方修复版本,可以暂时忽略以避免干扰。
trivy image --ignore-unfixed nginx
5.3 输出 JSON 报告(便于集成)
将扫描结果导出为 JSON 格式,方便集成到 CI/CD中。
trivy image -f json -o result.json nginx
六、常用命令速查表
| 目的 | 命令示例 |
|---|---|
| 更新漏洞库 | trivy image --download-db-only |
| 快速扫描(推荐) | trivy image --scanners vuln <镜像名> |
| 只看高危漏洞 | trivy image --severity HIGH,CRITICAL <镜像名> |
| 扫描 K8s 集群 | trivy k8s cluster |
| 扫描 K8s YAML 文件 | trivy config <文件名>.yaml |
| 扫描本地目录 | trivy fs <目录路径> |
| 输出 JSON 报告 | trivy image -f json -o result.json <镜像名> |
| 忽略未修复漏洞 | trivy image --ignore-unfixed <镜像名> |
七、总结
Trivy 是一款轻量、快速、覆盖全面的安全工具,是实施“安全左移”战略的理想选择。通过本教程,你可以:
- 稳定安装:解决了因网络问题导致的数据库下载失败难题。
- 分层扫描:掌握了从镜像、文件系统到 K8s 集群的完整扫描方法。
- 结果解读:学会了如何从海量漏洞报告中快速识别并优先处理真正的风险。