我们如何以 Kubernetes 的方式管理机密

2025-06-08

我们如何以 Kubernetes 的方式管理机密

过去几天,我们 Cyclops 团队一直在白板和笔记本电脑之间徘徊,试图弄清楚如何设计项目的一个重要部分:Cyclops 对不同服务的身份验证。更准确地说,我们希望允许用户通过 Cyclops 访问他们的私有 GitHub 仓库。

为什么这是个问题?一开始,我们纠结于两个解决方案:要么增加 Cyclops 身份验证之外不会使用的数据库,导致代码库臃肿;要么让用户引导 流程过于复杂,吓跑潜在的新用户。

经过一番头脑风暴,我们找到了一个满足所有需求的解决方案。在本文中,我将展示 Cyclops 如何以 Kubernetes 的方式管理您的机密信息……

为什么我们需要管理秘密?

简单介绍一下 Cyclops 的背景,以便更容易理解文章的其余部分:

Cyclops 是一个面向开发者的 Kubernetes 平台。它提供了一个用户界面,开发者可以轻松填写​​所需值来生成所需的 Kubernetes 清单,而无需学习 Helm、Kustomize 或其他 Kubernetes 配置管理器。

我们称其为平台,是因为您可以轻松为 Kubernetes 工作负载创建自定义 UI(点击此处了解更多信息)。您可以将这些 UI 存储为模板。模板的存储方式多种多样,例如 Helm Chart 或 OCI 仓库,但最流行的可能是 GitHub 仓库。

Cyclops 可以毫无问题地访问存储在公共代码库中的模板;只需提供一个repo + path + version,BAM,就搞定了。但我们希望 Cyclops 用户能够访问他们存储在私有 GitHub 代码库中的模板(因为您很少会公开自己的基础代码)。

我们知道可以使用 GitHub 令牌作为一种身份验证形式,但如何安全地处理它们?

顺便一提…

Cyclops 是开源的,如果您能在我们的repo上给我们一颗星来支持我们,我们将不胜感激⭐🙏

gh 星

Kubernetes 的秘密

第一个问题 存储 GitHub 访问令牌。Cyclops 没有自己的数据库,因此自行实现一个仅用于存储 GitHub 令牌的数据库似乎不太好。因此,我们选择使用 Kubernetes Secrets。

Secret 是包含少量敏感数据的对象,例如密码、令牌或密钥。 ”~ Kubernetes 文档

Kubernetes 机密是一种存储敏感数据(如令牌)的好方法,无需在 pod 定义或配置文件中公开它,因此它们看起来非常适合。

然而,第二个问题是如何安全地使用这些秘密。

Kubernetes 自定义资源 (CRD)

让我们快速讨论自定义资源定义,然后我们可以继续讨论如何实现对私有存储库的访问。

在 Kubernetes 中,自定义资源定义 (CRD) 允许您创建自己的资源类型,并添加到 Kubernetes 提供的默认资源类型(pod、部署等)。

您可以使用 YAML 文件为自定义对象定义架构并通知 Kubernetes。此后,您可以像使用任何其他原生 Kubernetes 资源一样使用自定义资源。

查看我们之前的博客,我们在其中探索了 CRD 并用它kubectl来收集苹果! 🍏

kubectl get apples

NAME          AGE
green-apple   6s
Enter fullscreen mode Exit fullscreen mode

我们如何以 Kubernetes 的方式管理机密

Cyclops 有一个名为 的 CRD TemplateAuthRule,它允许你为特定的仓库定义授权。该 CRD 定义了你想要授权的模板,并将 Cyclops 指向这些模板所需的授权数据(Kubernetes secrets)。

每次 Cyclops 控制器获取模板时,它都会TemplateAuthRules从集群中检索所有模板,并尝试将模板存储库与任意一个TemplateAuthRules存储库进行匹配(如下图所示spec.repo)。如果匹配成功,它将获取引用的 Kubernetes 机密信息,并使用用户名和密码进行身份验证。

TAR 预览

在上图中,Cyclops 控制器获取所有数据,并尝试从 中TemplateAuthRules匹配模板存储库。如果匹配,它将从引用的 secret 中获取用户名和密码。在本例中,用户名和密码都引用了同一个 secret   和 )。spec.repoTemplateAuthRulemy-cyclops-secretspec.username.namespec.password.name

要获取username密钥值,Cyclops 控制器将获取引用的密钥,并使用 中提供的密钥 spec.username.key 从获取的密钥中获取值。 也是如此password

由于TemplateAuthRules不直接存储秘密,您仍然可以将您的集群与 外部秘密操作员 或其他秘密管理解决方案集成!

在此处或使用我们的 CLI查看有关如何允许访问您自己的私有存储库的更详细信息TemplateAuthRules和教程

还有其他问题吗?

希望我能解释 Cyclops 如何管理你的 GitHub 令牌,甚至让你了解如何在你自己的项目中管理秘密。

如果您有兴趣成为 Cyclops 社区的一员,贡献代码、内容甚至提出批评,请务必加入我们的Discord 社区并在repo上留下一颗星⭐🙏

鏂囩珷鏉ユ簮锛�https://dev.to/cyclops-ui/how-we-manage-secrets-the-kubernetes-way-451
PREV
我们如何进一步推进 GitOps
NEXT
推广开源可能会带来哪些问题