我们如何以 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上给我们一颗星来支持我们,我们将不胜感激⭐🙏
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
我们如何以 Kubernetes 的方式管理机密
Cyclops 有一个名为 的 CRD TemplateAuthRule
,它允许你为特定的仓库定义授权。该 CRD 定义了你想要授权的模板,并将 Cyclops 指向这些模板所需的授权数据(Kubernetes secrets)。
每次 Cyclops 控制器获取模板时,它都会TemplateAuthRules
从集群中检索所有模板,并尝试将模板存储库与任意一个TemplateAuthRules
存储库进行匹配(如下图所示spec.repo
)。如果匹配成功,它将获取引用的 Kubernetes 机密信息,并使用用户名和密码进行身份验证。
在上图中,Cyclops 控制器获取所有数据,并尝试从 中TemplateAuthRules
匹配模板存储库。如果匹配,它将从引用的 secret 中获取用户名和密码。在本例中,用户名和密码都引用了同一个 secret ( 和 )。spec.repo
TemplateAuthRule
my-cyclops-secret
spec.username.name
spec.password.name
要获取username
密钥值,Cyclops 控制器将获取引用的密钥,并使用 中提供的密钥 spec.username.key
从获取的密钥中获取值。 也是如此password
。
由于TemplateAuthRules
不直接存储秘密,您仍然可以将您的集群与 外部秘密操作员 或其他秘密管理解决方案集成!
还有其他问题吗?
希望我能解释 Cyclops 如何管理你的 GitHub 令牌,甚至让你了解如何在你自己的项目中管理秘密。
如果您有兴趣成为 Cyclops 社区的一员,贡献代码、内容甚至提出批评,请务必加入我们的Discord 社区并在repo上留下一颗星⭐🙏
鏂囩珷鏉ユ簮锛�https://dev.to/cyclops-ui/how-we-manage-secrets-the-kubernetes-way-451