2. Trivy 快速安装与配置:二进制安装、容器化部署、Helm Chart 安装、全局配置与加速器设置
Trivy 作为一款轻量级、多架构支持的云原生安全扫描器,提供了多种部署方式以适应不同环境。本章将系统讲解四种主流安装路径,并深入全局配置与镜像加速器设置,确保你能够在开发、测试、生产及 Kubernetes 集群中快速落地 Trivy。
2.1 安装方式对比与选型
在选择安装方式时,需综合考虑环境限制、自动化程度与维护成本。下表列出了四种方式的适用场景与核心差异:
| 安装方式 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| 二进制安装 | CI/CD 节点、本地开发机、单机脚本 | 无依赖、启动快、适合离线环境 | 需手动管理版本与更新 |
| 容器化部署 | 容器化 CI 流水线、临时扫描任务 | 环境隔离、版本可控、与 Docker/K8s 生态天然集成 | 需容器运行时支持 |
| Helm Chart 安装 | Kubernetes 集群内长期运行、Operator 模式 | 声明式管理、可配置资源与持久化、支持 CRD | 依赖 Helm 与 K8s 集群 |
| 全局配置 + 加速器 | 所有安装方式的补充配置 | 统一管理数据库缓存、镜像拉取策略、代理设置 | 需理解 Trivy 配置层级 |
选型建议: 若你正在搭建 GitLab CI / Jenkins 流水线,优先使用 二进制安装 或 容器化部署;若需要在 Kubernetes 集群内持续监控所有工作负载的漏洞状态,推荐 Helm Chart 安装 并启用 Trivy Operator。
2.2 二进制安装(Linux / macOS)
二进制安装是最直接的方式,适用于无容器环境的 CI 节点或本地快速验证。以下步骤以 Linux amd64 为例:
- 下载最新稳定版
# 获取最新版本号
TRIVY_VERSION=$(curl -s https://api.github.com/repos/aquasecurity/trivy/releases/latest | grep tag_name | cut -d '"' -f 4)
# 下载 Linux amd64 二进制包
wget https://github.com/aquasecurity/trivy/releases/download/${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
- 解压并安装到系统路径
tar zxvf trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
sudo mv trivy /usr/local/bin/
trivy --version
- 验证安装
# 扫描一个本地镜像(需提前拉取)
trivy image alpine:3.18
macOS 用户: 可使用 Homebrew 一键安装:
brew install aquasecurity/trivy/trivy。若需特定版本,仍建议使用二进制包手动安装。
2.3 容器化部署(Docker / Podman)
容器化部署将 Trivy 及其依赖打包,适合在 CI 流水线中作为临时容器运行。官方镜像托管于 Docker Hub 和 ghcr.io。
# 使用 Docker 运行一次镜像扫描
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $HOME/.cache/trivy:/root/.cache/trivy \
aquasec/trivy:latest \
image alpine:3.18
参数说明:
--rm:扫描完成后自动删除容器。-v /var/run/docker.sock:挂载 Docker 套接字,使 Trivy 能够访问宿主机上的镜像。-v $HOME/.cache/trivy:持久化漏洞数据库缓存,避免每次扫描都重新下载。
注意: 若使用 Podman,需将
docker.sock 替换为 podman.sock,或使用 --rootful 模式。在 rootless 模式下,建议直接挂载镜像文件而非套接字。
2.4 Helm Chart 安装(Kubernetes 集群)
Helm Chart 安装适用于在 Kubernetes 集群内长期运行 Trivy,支持 Operator 模式自动扫描集群内所有工作负载。官方 Chart 仓库地址:https://aquasecurity.github.io/helm-charts/。
# 添加 Helm 仓库
helm repo add aquasecurity https://aquasecurity.github.io/helm-charts
helm repo update
# 安装 Trivy Operator(推荐)
helm upgrade --install trivy-operator aquasecurity/trivy-operator \
--namespace trivy-system \
--create-namespace \
--set="trivy.ignoreUnfixed=true" \
--set="trivy.severity=CRITICAL,HIGH"
关键配置项:
| 参数 | 默认值 | 说明 |
|---|---|---|
trivy.ignoreUnfixed |
false | 是否忽略尚无修复版本的漏洞 |
trivy.severity |
CRITICAL,HIGH,MEDIUM,LOW | 报告的最低严重级别 |
operator.scannerReportTTL |
24h | 扫描报告在集群中的保留时间 |
trivy.dbRepository |
ghcr.io/aquasecurity/trivy-db | 漏洞数据库镜像地址(可替换为私有仓库) |
生产建议: 在 Helm 安装时,务必配置
trivy.dbRepository 指向内网镜像仓库,并设置 trivy.dbRepositoryInsecure=true(若使用 HTTP 仓库),以避免因公网拉取失败导致扫描中断。
2.5 全局配置与加速器设置
Trivy 支持通过配置文件 trivy.yaml 或环境变量进行全局设置,覆盖数据库缓存路径、镜像拉取策略、代理与加速器。配置文件优先级:CLI 参数 > 环境变量 > 配置文件 > 默认值。
2.5.1 配置文件示例(~/.trivy/trivy.yaml)
# 漏洞数据库缓存目录
cache-dir: /data/trivy-cache
# 数据库镜像仓库(加速器核心)
db-repository: registry.internal.company.com/trivy/trivy-db:latest
db-repository-insecure: true
# 镜像扫描时的拉取策略
image-config:
pull-policy: if-not-present
# 代理设置(内网环境)
http-proxy: http://proxy.internal:8080
https-proxy: http://proxy.internal:8080
no-proxy: 10.0.0.0/8,192.168.0.0/16
# 忽略特定 CVE
ignorefile: .trivyignore
2.5.2 加速器设置详解
Trivy 的加速器核心在于 数据库镜像仓库(db-repository) 与 缓存持久化。以下 SVG 展示了加速器的工作流程:
2.5.3 环境变量方式
对于 CI 环境,推荐使用环境变量覆盖配置,避免依赖配置文件:
export TRIVY_CACHE_DIR=/tmp/trivy-cache
export TRIVY_DB_REPOSITORY=registry.internal.company.com/trivy/trivy-db:latest
export TRIVY_DB_REPOSITORY_INSECURE=true
export TRIVY_HTTP_PROXY=http://proxy.internal:8080
export TRIVY_NO_PROXY=10.0.0.0/8
# 执行扫描
trivy image alpine:3.18
最佳实践: 在 CI 流水线中,将
TRIVY_DB_REPOSITORY 指向内网镜像仓库,并挂载持久化缓存卷,可将扫描启动时间从 30-60 秒降低至 1-3 秒。同时,建议在流水线中设置 TRIVY_SKIP_DB_UPDATE=true 以跳过启动时的数据库检查,进一步加速。
2.6 安装验证与常见问题
完成安装后,建议执行以下验证步骤:
- 版本检查:
trivy --version确认版本号与预期一致。 - 数据库初始化: 首次运行
trivy image --download-db-only手动下载漏洞数据库,观察是否从配置的镜像仓库拉取。 - 扫描测试: 扫描一个已知漏洞的测试镜像(如
aquasec/trivy-test-images:vuln-1.0),验证报告输出是否正常。
常见问题:
- 数据库下载超时: 检查代理配置与内网镜像仓库可达性,确认
db-repository-insecure是否设置正确。 - 权限不足: 容器化部署时,确保挂载了正确的 Docker 套接字或镜像文件;Helm 安装时,检查 ServiceAccount 的 RBAC 权限。
- 缓存目录空间不足: Trivy DB 约 500MB-1GB,建议将缓存目录挂载到有足够空间的持久卷。