K8s系列九:Trivy 轻量级安全扫描实战 – 镜像、K8s、代码全覆盖

🗺️ 系列目录:

    1. K8s系列一:Ubuntu 22.04 从零搭建集群(Flannel + Containerd) 【基础设施】
    2. K8s系列二:安装 Dashboard – 原生 Web 控制台配置 【官方可视化】
    3. K8s系列三:安装 Rancher – 企业级多集群管理平台 【企业级管理】
    4. K8s系列四:安装 Kuboard – 国产可视化运维工具 【轻量可视化】
    5. K8s系列五:Elkeid入侵检测系统 容器 K8s 安全部署与检测 【运行时安全】
    6. K8s系列六:HarborGuard 容器安全扫描平台部署与实战 【综合扫描平台】
    7. K8s系列七:NeuVector 容器安全平台部署与实践  【全栈容器安全】
    8. K8s系列八:三大容器安全平台对比总结(HarborGuard / NeuVector / Elkeid) 【横向对比】
    9. 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 个,必须立即修复。重点关注 libcrypto3libssl3opensslpcre2 等基础库。
  • 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”:如果该字段有值,说明上游已修复,通常通过升级基础镜像或依赖包即可解决。
  • 关注基础库:如 openssllibcryptomuslzlib 等,这些底层库的漏洞影响范围广,需尽快修复。
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 是一款轻量、快速、覆盖全面的安全工具,是实施“安全左移”战略的理想选择。通过本教程,你可以:

  1. 稳定安装:解决了因网络问题导致的数据库下载失败难题。
  2. 分层扫描:掌握了从镜像、文件系统到 K8s 集群的完整扫描方法。
  3. 结果解读:学会了如何从海量漏洞报告中快速识别并优先处理真正的风险。