资讯动态

通过 GitOps 安装 Trivy Operator:ArgoCD 与 FluxCD 完整实战指南

发布时间:2026/9/10 16:05:54 来源:尧图企业网站定制
通过 GitOps 安装 Trivy OperatorArgoCD 与 FluxCD 完整实战指南【免费下载链接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more项目地址: https://gitcode.com/GitHub_Trending/tr/trivy本文以 Trivy 开源仓库中的官方教程 docs/tutorials/kubernetes/gitops.md 为骨架系统讲解如何在 Kubernetes 集群中通过 ArgoCD 与 FluxCD 两大 GitOps 平台声明式地安装 Trivy Operator。读完本文你将掌握两种 GitOps 工具各自的 CLI 与 Kubernetes 清单两种部署路径、values 覆盖技巧、同步与验证流程并结合 Trivy 源码理解其 Helm Chart 关键配置与集群扫描能力从而把容器安全扫描真正纳入以 Git 为唯一事实来源的交付体系。背景为什么通过 GitOps 部署 Trivy OperatorTrivy Operator 是 Trivy 官方提供的 Kubernetes Operator它把 Trivy 安装进集群内部自动、持续地扫描工作负载与集群本身的安全问题详见 docs/ecosystem/prod.md。与命令式的一次性扫描如trivy k8s不同Operator 遵循 Kubernetes Operator 模型扫描任务以 CRD自定义资源的形式保存在集群中安全扫描器与扫描结果本身都是 Kubernetes 资源默认每六小时自动重扫一轮天然适合对接 Prometheus 告警等生态参见 docs/tutorials/kubernetes/cluster-scanning.md。GitOps 的核心思想是声明式 自动收敛集群的期望状态全部以 YAML 清单形式沉淀在 Git 仓库中ArgoCD / FluxCD 负责把集群实际状态拉齐到期望状态。用 GitOps 安装 Trivy Operator 的好处在于可审计安装参数、版本、values 覆盖全部留下 Git 变更记录自动漂移纠正有人误删或改动 Operator 资源时GitOps 工具会自动恢复self-heal多集群一致性同一份清单可反复应用到开发、预发、生产多个集群升级可回滚修改targetRevision/version后一次同步即可完成 Helm Chart 升级。本仓库的helm/trivy目录提供了 Trivy 自身的 Helm Charthelm/trivy/Chart.yaml当前 chart 版本 0.26.0、appVersion 0.74.0而 Trivy Operator 有独立维护的 Helm Chart托管在 Helm 仓库https://aquasecurity.github.io/helm-charts/这正是下文两种 GitOps 安装方案的共同数据源。前置准备开始前需要满足以下条件一个可用的 Kubernetes 集群且已安装并运行 ArgoCD对应下文方案一或 FluxCD对应下文方案二。本地 kind、Docker Desktop、microk8s 集群均可。kubectl已配置好集群访问默认使用~/.kube/config中的当前上下文。一个用于存放 Operator 的目标命名空间教程统一使用trivy-systemkubectl create ns trivy-system说明下文所有argocd、flux命令均来自各自 CLI 工具请确保本机已安装对应命令行客户端。方案一通过 ArgoCD 安装ArgoCD 安装 Trivy Operator 有两条路径使用argocdCLI 命令或直接应用一个Application类型的 Kubernetes 清单。两者最终都会在 ArgoCD 中注册一个 Application由 ArgoCD 负责把 Helm Chart 渲染并同步到集群。方式一使用 argocd CLI创建命名空间后直接通过argocd app create声明一个指向官方 Helm Chart 的应用kubectl create ns trivy-system argocd app create trivy-operator \ --repo https://github.com/aquasecurity/trivy-operator \ --path deploy/helm \ --dest-server https://kubernetes.default.svc \ --dest-namespace trivy-system参数含义参数说明trivy-operatorApplication 名称--repo源码仓库地址Trivy Operator 官方仓库--path deploy/helm仓库内 Helm Chart 所在目录--dest-server目标集群 API Server 地址https://kubernetes.default.svc表示集群内默认地址--dest-namespace应用部署的目标命名空间注意这种安装方式直接关联 Trivy Operator 官方 Helm Chart。如果需要修改任何 Chart 参数建议创建一个独立的values.yaml文件通过--values参数或 ArgoCD Application 的helm.values字段传入而不是改动 Chart 本身。方式二使用 Kubernetes 清单Application CRD更符合 GitOps 理念的做法是维护一个trivy-operator.yaml清单把整个 Application 定义提交到 GitapiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: trivy-operator namespace: argocd spec: project: default source: chart: trivy-operator repoURL: https://aquasecurity.github.io/helm-charts/ targetRevision: 0.0.3 helm: values: | trivy: ignoreUnfixed: true destination: server: https://kubernetes.default.svc namespace: trivy-system syncPolicy: automated: prune: true selfHeal: true关键字段解读source.chartsource.repoURL声明从 Helm 仓库拉取名为trivy-operator的 Chart这是与 CLI 方式--repo--path指向 Git 仓库内 Chart 目录不同的两种 Chart 来源写法source.targetRevisionChart 版本。建议锁定具体版本以保证可重复性升级时修改此字段即可source.helm.values内联 values 覆盖示例中通过trivy.ignoreUnfixed: true让 Operator 扫描时忽略无修复版本的漏洞避免海量未修复告警淹没真正需要处理的问题syncPolicy.automated.prune自动删除集群中已从 Git 清单移除的资源syncPolicy.automated.selfHeal当集群实际状态偏离期望状态时自动修正这是 GitOps 防漂移的关键destination.namespacetrivy-systemOperator 及扫描产物将部署于此。应用清单并触发同步清单在本地时用kubectl直接应用kubectl apply -f trivy-operator.yaml application.argoproj.io/trivy-operator created若清单存放在 Git 仓库中可让 ArgoCD 直接拉取远程文件应用kubectl apply -n argocd -f https://raw.githubusercontent.com/AnaisUrlichs/argocd-starboard/main/starboard/argocd-starboard.yaml后者方式下你可以直接修改远程仓库中的 YAML 清单ArgoCD 会自动感知变更并注册更新。部署完成后需要显式触发一次同步让 ArgoCD 把集群从实际状态拉齐到期望状态argocd app sync trivy-operator在 ArgoCD UI 中查看部署结果同步完成后打开 ArgoCD UI 即可看到trivy-operator应用及其资源树如何访问 UI 请参考 ArgoCD 官方文档上图是部署 Trivy Operator 后 ArgoCD 的 Applications 视图资源树中央是trivy-operator应用节点向外辐射出 configmap、secret、deployment、service、role、rolebinding、cronjob 等子资源顶部状态标签显示 SYNC/HEALTHY说明应用已同步且健康。需要特别说明的已知限制ArgoCD 无法把 Trivy 的 CRD 显示为 synced 状态。这是因为 CRD 属于集群级资源其管理方式与 ArgoCD 对普通应用资源的追踪逻辑存在差异看到 CRD 不显示同步状态属正常现象不影响 Operator 实际功能。方案二通过 FluxCD 安装FluxCD 的安装思路与 ArgoCD 类似同样提供 CLI 与清单两种路径底层机制换成 Flux 的HelmRepositoryHelmRelease两个 CRD。方式一使用 Flux CLIkubectl create ns trivy-system flux create source helm trivy-operator \ --url https://aquasecurity.github.io/helm-charts \ --namespace trivy-system flux create helmrelease trivy-operator \ --chart trivy-operator \ --source HelmRepository/trivy-operator \ --chart-version 0.0.3 \ --namespace trivy-systemflux create source helm创建一个HelmRepository对象指向 Trivy 官方 Helm 仓库flux create helmrelease创建一个HelmRelease对象声明要安装的 Chart、来源与版本。方式二使用 Kubernetes 清单HelmRepository HelmRelease将下面内容保存为trivy-operator.yaml一份文件同时定义两个资源---分隔apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository metadata: name: trivy-operator namespace: flux-system spec: interval: 60m url: https://aquasecurity.github.io/helm-charts/ --- apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: trivy-operator namespace: trivy-system spec: chart: spec: chart: trivy-operator sourceRef: kind: HelmRepository name: trivy-operator namespace: flux-system version: 0.10.1 interval: 60m values: trivy: ignoreUnfixed: true install: crds: CreateReplace createNamespace: true与 ArgoCD 清单对应的关键点HelmRepository.spec.intervalFlux 定期刷新 Helm 仓库索引的时间间隔这里 60 分钟用于感知新 Chart 版本HelmRelease.spec.chart.spec.sourceRef通过kind、name、namespace三要素引用上文定义的HelmRepositoryHelmRelease.spec.values与 ArgoCD 的helm.values等价示例同样设置了trivy.ignoreUnfixed: trueinstall.crds: CreateReplace安装时创建存在则替换CRD这是 Operator 类 Chart 的常见要求确保 Trivy 的 CRD 正确安装install.createNamespace: true目标命名空间trivy-system不存在时自动创建。应用清单kubectl apply -f trivy-operator.yamlFlux 控制器会依据interval轮询自动完成从拉取 Chart 到渲染、安装的全过程无需像 ArgoCD 那样手动触发同步。安装后的验证无论使用哪种 GitOps 工具安装完成后都应确认 Operator 正常运行。检查trivy-system命名空间下的 Deploymentkubectl get deployment -n trivy-system看到 Trivy Operator 相关 Deployment 处于READY状态即为安装成功。接下来可以观察 Operator 自动为集群内工作负载生成的安全报告漏洞、配置错误、密钥扫描。对于想立即体验集群整体扫描效果的场景也可以绕过 Operator 直接使用 Trivy CLI 的trivy k8s命令做一次性验证trivy k8s --reportsummary上图展示了trivy k8s --report summary的典型输出分为 Workload Assessment工作负载评估与 Infra Assessment基础设施评估两部分分别统计各命名空间/资源的漏洞Vulnerabilities、配置错误Misconfigurations与密钥Secrets数量并按 CCRITICAL、HHIGH、MMEDIUM、LLOW、UUNKNOWN 分级。详细的trivy k8s用法--include-namespaces、--exclude-kinds、--report all、RBAC 权限要求、compliance 报告等可参考 docs/guide/target/kubernetes.md 与 docs/tutorials/kubernetes/cluster-scanning.md。结合源码Helm Chart 配置参数与 GitOps values 实践GitOps 安装 Trivy Operator 的核心工作之一就是编写 values 覆盖。虽然 Trivy Operator 的 Chart 在独立仓库维护但本仓库helm/trivy目录下的 Trivy 自身 Charthelm/trivy/values.yaml可以作为理解 Trivy 相关配置项的最佳参照两者的配置哲学一脉相承。结合该文件下面是 GitOps 场景下最常用的配置维度配置项默认值说明image.registry/image.repositorydocker.io/aquasec/trivy扫描器镜像来源可在离线环境改为私有镜像仓库image.tag空默认取 Chart 的 appVersion显式锁定 Trivy 版本trivy.debugModefalse开启 Trivy 调试日志trivy.gitHubTokenGitHub Token。Trivy DB 从 GitHub Release 下载匿名下载受限 60 次/小时生产环境建议配置 Token 提升至 5000 次/小时trivy.skipDBUpdatefalse跳过 DB 下载CI/CD 或离线环境可避免 GitHub 限流但需手动挂载trivy.dbtrivy.dbRepositoryghcr.io/aquasecurity/trivy-db漏洞库的 OCI 仓库地址离线部署可指向内部镜像仓库trivy.cache.redis.enabledfalse使用 Redis 作为缓存后端需自行部署 Redis否则使用文件系统缓存trivy.registryUsername/registryPassword私有镜像仓库凭据对应环境变量TRIVY_USERNAME/TRIVY_PASSWORDtrivy.serverToken/trivy.existingSecret客户端-服务端模式认证 TokenexistingSecret可引用外部 Secret 统一管理凭据persistence.enabled/persistence.sizetrue/5Gi持久化缓存卷避免每次重启重新下载漏洞库resources.requests/resources.limits200m/512Mi/1/1GiCPU/内存配额可按集群规模调整service.port4954Trivy Server 模式的服务端口nodeSelector/affinity/tolerations{}/{}/[]调度控制将扫描器固定到特定节点在 GitOps 清单中这些参数通过spec.source.helm.valuesArgoCD或spec.valuesFluxCD传入。推荐的实践是版本锁定固定targetRevision/version升级时先在测试集群验证敏感信息外置Token、镜像仓库凭据不要明文写入 Git 清单通过existingSecret引用 Kubernetes Secret配合 Sealed Secrets / External Secrets 等方案离线环境适配修改dbRepository与image.repository指向内网镜像配置httpProxy/httpsProxy/noProxyhelm/trivy/values.yaml 中均有对应字段告警降噪如教程示例所示设置trivy.ignoreUnfixed: true聚焦存在修复版本的漏洞。从 Trivy 源码侧看集群扫描能力由 pkg/k8s/k8s.go 中的ScanKubernetes实现它组合 OS 包扫描器ospkg、语言包扫描器langpkg与漏洞客户端完成扫描。与之配套的 CLI 参数定义在 pkg/flag/kubernetes_flags.go包括--include-namespaces/--exclude-namespaces二者互斥源码ToOptions中有明确校验、--skip-images跳过集群资源镜像下载与扫描、--disable-node-collector禁用节点采集 Job、--tolerations让节点采集 Job 调度到被污点标记的节点等。理解这些参数有助于在 Operator 自动化扫描之外针对特定场景做命令式补充扫描或调优。常见问题与注意事项ArgoCD 不显示 CRD 同步状态前文已述这是 ArgoCD 对集群级 CRD 资源追踪的限制属预期行为可放心忽略。版本字段不一致教程示例中 ArgoCD 清单使用targetRevision: 0.0.3FluxCD 清单使用version: 0.10.1两者均为历史示例版本。实际使用时请查询 Trivy Operator 官方 Helm 仓库的最新稳定版本并保持两个环境中锁定的版本一致。values 变更的生效方式ArgoCD 下修改helm.values后需argocd app sync触发FluxCD 下由interval轮询自动收敛也可用flux reconcile helmrelease trivy-operator立即触发。清理安装ArgoCD 场景删除Application并配合prune: true可一并清理部署的资源FluxCD 场景删除对应HelmRelease即可注意确认trivy-system命名空间中的残留资源。RBAC 与集群扫描权限若在 Operator 之外使用trivy k8s扫描集群需要具备相应 API 组的list权限core、apps、batch、networking.k8s.io、rbac.authorization.k8s.io启用节点采集时还需额外权限详见 docs/guide/target/kubernetes.md 的 Required roles 一节。通过本文的两种 GitOps 路径Trivy Operator 的部署、升级与配置变更都能以声明式清单的方式纳入版本管理配合自动同步与自愈策略即可在持续交付流水线中稳定落地 Kubernetes 容器安全扫描能力。【免费下载链接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more项目地址: https://gitcode.com/GitHub_Trending/tr/trivy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价