返回更新列表
新发布Aug 12, 2026

multi-juicer v10.3.0

托管和管理多个Juice Shop实例,用于安全培训和夺旗赛(CTF)

分享

MultiJuicer,多用户 Juice Shop 平台

OWASP Juice Shop 上运行 CTF 和安全培训通常相当棘手,因为 Juice Shop 本身并不适合同时被多个用户使用。指导每个人在自己的机器上启动 Juice Shop 虽然可行,但会占用太多宝贵时间。

MultiJuicer 让您能够在一台中央 Kubernetes 集群上为每位参与者运行独立的 Juice Shop 实例,从而无需在本地运行 Juice Shop 实例也能举办活动。

它的功能:

  • 根据需求动态创建新的 Juice Shop 实例
  • 在单个域名上运行,并配备一个负载均衡器,将流量引导至参与者的 Juice Shop 实例
  • 一个简洁的排行榜,展示所有参与者的进度
  • 一个便捷的管理页面,用于管理实例
  • 在 Juice Shop 容器重启时备份并自动应用挑战进度
  • 自动清理旧的和未使用的实例

MultiJuicer,高层架构图

关于架构和各个组件的详细描述,请参见架构文档

👉 MultiJuicer 新手? 请参阅可视化操作指南,了解参与者如何注册、获取 JuiceShop 实例以及积分如何在记分牌上追踪。

安装

MultiJuicer 运行在 Kubernetes 上,安装它需要 helm

helm install multi-juicer oci://ghcr.io/juice-shop/multi-juicer/helm/multi-juicer

在正式活动中使用 MultiJuicer 之前,请查看生产环境注意事项,了解您可能需要配置的值的清单。

要设置支持 JuiceShop v20+ AI/LLM 相关挑战的 MultiJuicer,请参阅 AI/LLM 配置指南

特定云提供商/环境的安装指南

一般来说,MultiJuicer 可以在几乎任何 Kubernetes 集群上运行,但为了帮助刚接触 Kubernetes 的用户,我们提供了一些指南,介绍如何在某些特定的云提供商上设置包含 MultiJuicer 的 Kubernetes 集群。

自定义设置

您有多种选项来设置堆栈,并且可以对 JuiceShop 实例进行个性化定制。您可以在以下位置找到默认配置值:helm/multi-juicer/values.yaml

下载并保存该文件,然后通过运行以下命令告诉 helm 使用您的配置文件覆盖默认值:

helm install -f values.yaml multi-juicer ./multi-juicer/helm/multi-juicer/

要自定义 JuiceShop 实例和 MultiJuicer UI 的主题(主题、Logo、启用的挑战等),请参阅 JuiceShop 自定义指南

卸载

helm delete multi-juicer

常见问题

集群需要多少计算资源?

为了安全起见,请按以下标准进行估算:

  • MultiJuicer 本身需要 1GB 内存和 1CPU 开销
  • 每个参与团队/个人的 JuiceShop 实例需要 300MB 内存和 0.2CPU

上述数字反映了默认的资源限制。这些限制可以调整,请参见:自定义设置

MultiJuicer 能支持多少用户?

没有真正的固定限制(尽管您也可以配置一个 😉)。所有实例流量流经的自定义负载均衡器可以根据需要进行复制。您还可以附加一个 Horizontal Pod Autoscaler 来自动扩展负载均衡器。

为什么要用自定义负载均衡器?

我们有一些特殊需求,认为现有负载均衡器很难轻易解决:

  • 限制某个部署的用户仅限某个团队的成员。
  • 负载均衡器的 Cookie 必须安全,不易被伪造以访问其他实例。
  • 处理新实例的启动。

如果您有解决这些问题的好主意,而不需要自定义负载均衡器,请随时告诉我们,我们很乐意听取您的意见!

为什么每个团队都要有一个独立的 Kubernetes 部署?

有以下几条充分的理由:

  • 能够分别删除某个团队的实例。如果要安全地缩减规模,而不移除活跃团队的实例,使用缩放部署会非常棘手——您只能选择期望的规模,而无法决定保留哪些 Pod 以及丢弃哪些 Pod。
  • 确保 Pod 在重新创建后仍能正确关联到其团队。对于独立的部署来说,这不成问题,而对于缩放部署来说却非常困难。
  • 能够将团队名称嵌入到部署名称中。这听起来是个愚蠢的理由,但在使用 kubectl 进行调试时会变得极其方便。

如何使用 kubectl 轻松管理 JuiceShop?

您可以使用 kubectl 的自定义列功能列出所有 JuiceShop 及其相关信息。

$ kubectl get -l app.kubernetes.io/name=juice-shop -o custom-columns="TEAM:metadata.labels.team,SOLVED-CHALLENGES:metadata.annotations.multi-juicer\.owasp-juice\.shop/challengesSolved,LAST-REQUEST:metadata.annotations.multi-juicer\.owasp-juice\.shop/lastRequestReadable" deployments
TEAM         SOLVED-CHALLENGES   LAST-REQUEST
foobar       3                   Wed May 4 2042 18:14:22 GMT+0000 (Coordinated Universal Time)
team-42      0                   Wed May 4 2042 18:14:30 GMT+0000 (Coordinated Universal Time)
the-empire   0                   Wed May 4 2042 18:14:46 GMT+0000 (Coordinated Universal Time)

这个项目是从哪里来的?

该项目始于 iteratec,一家德国的软件开发公司,用于为其内部开发人员和客户运行安全培训。该项目于 2019 年开源,并于 2023 年捐赠给 OWASP 组织 / OWASP Juice Shop 项目。

联系我们!

您可以在 OWASP Slack 工作区的 #project-juiceshop 频道中找到我们。我们很乐意听取您的任何反馈或使用报告。如果您还没有加入 OWASP Slack 工作区,可以通过此链接加入。

分类