返回更新列表
新发布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 实例
  • 运行在单一域名上,自带 LoadBalancer 将流量发送到参与者的 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 之前可能需要配置的值的清单,请参阅生产环境说明。

要设置 MultiJuicer 以支持 JuiceShop v20+ 的 AI/LLM 相关挑战,请参阅 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 的主题(主题、徽标、启用的挑战等),请参阅 JuiceShop 自定义指南。

卸载

helm delete multi-juicer

常见问题

集群需要多少计算资源?

为稳妥起见,请按以下方式计算:

  • MultiJuicer 自身需要 1GB 内存和 1 个 CPU 的开销
  • 每个 JuiceShop 实例需要 384MB 内存和 0.1 个 CPU * 参与者/团队数量

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

MultiJuicer 能支持多少用户?

并没有真正的固定上限。(尽管你可以配置一个 😉) 自定义 LoadBalancer 承载着各个实例的全部流量,它可以按需复制任意数量。 你还可以为其挂载 Horizontal Pod Autoscaler 来自动扩缩容 LoadBalancer。

为什么要用自定义 LoadBalancer?

我们遇到了一些特殊需求,发现用任何现成的负载均衡器都不太容易解决:

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

如果你有绝妙的想法,能在不使用自定义负载均衡器的情况下解决这些问题,请写信告诉我们,我们很乐意听取你的意见!

为什么每个团队要单独一个 Kubernetes 部署?

这样做有相当充分的理由:

  • 可以单独删除某个团队的实例。对于扩缩容的部署来说,安全地缩容而不移除活跃团队的实例非常棘手。你只能选择期望的副本数,而无法选择保留哪些 Pod、丢弃哪些 Pod。
  • 确保 Pod 在重建后仍能正确关联到团队。使用独立部署时这不成问题,而使用扩缩容部署时则非常困难。
  • 能够将团队名称嵌入部署名称中。这看起来是个愚蠢的理由,但仅使用 kubectl 就能让调试变得轻松太多。

如何使用 kubectl 轻松管理 JuiceShop?

你可以使用 kubectl 的 custom-columns 功能列出所有 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 工作区,可以通过此链接加入。

分类