Kubernetes

Bitwarden Secrets Manager Kubernetes Operator (sm-operator) 是一个工具,用于帮助团队无缝地将 Bitwarden Secrets Manager 集成到他们的 Kubernetes 工作流中。

sm-operator 使用控制器将 Bitwarden Secrets 同步到 Kubernetes secrets 中。它的做法是将 BitwardenSecret 的自定义资源定义注册到集群中。它会监听群集上已注册的新 BitwardenSecrets,然后按可配置的时间间隔进行同步。

要求

您还需要:

设置和配置

克隆存储库:

git clone https://github.com/bitwarden/sm-kubernetes.git

在存储库根目录下打开 Visual Studio Code。

开发容器的设置是自动化的。这将创建一个 Kind 集群并设置所有必要的软件。

  • 打开命令调板(根据用户设置,使用 Cmd/Ctrl+Shift+PF1

  • 输入 Dev Containers: Reopen in Container 以开始

配置设置

创建了 Dev 容器或运行了 make setup 后,就会在存储库根目录下创建一个 .env 文件。可以更新以下环境变量设置来改变 operator 的行为:

  • BW_API_URL - 设置 Secrets Manager SDK 使用的 Bitwarden API URL。这对于自托管场景以及访问欧洲服务器非常有用。

  • BW_IDENTITY_API_URL - 设置 Secrets Manager SDK 使用的 Bitwarden Identity 服务 URL。这对于自托管场景以及访问欧洲服务器非常有用。

  • BW_SECRETS_MANAGER_STATE_PATH - 设置 Secrets Manager SDK 存储其状态文件的基本路径。

  • BW_SECRETS_MANAGER_REFRESH_INTERVAL - 指定 Secrets Manager 和 K8s secrets 之间同步秘密的刷新间隔(以秒为单位)。最小值为 180。

运行和调试

  1. 使用 make install 或通过在命令面板中使用来自「Tasks: Run Task」的被称为「apply-crd」的 Visual Studio 任务,将自定义资源定义安装到群集中。

  2. 要调试代码,只需按一下 F5。您还可以在命令行中使用 make run 来运行,而无需调试。,

卸载自定义资源定义

要从集群中删除 CRD:

make uninstall

创建 BitwardenSecret 用于测试

调试器运行中,我们现在将创建一个 BitwardenSecret 对象,以将 Secret Manager 机密同步到 K8s 机密中:

  1. 在创建 BitwardenSecret 对象的命名空间中创建一个秘密,用于存放 Secrets Manager 身份验证令牌:kubectl create secret generic bw-auth-token -n <some-namespace> --from-literal=token="<Auth-Token-Here>"

  1. 安装 BitwardenSecret 实例。config/samples/k8s_v1_bitwardensecret.yaml 中有一个示例。您需要复制这个示例并根据自己的需要进行更新。然后按照这个方式应用:kubectl apply -n <some-namespace> -f k8s_v1_bitwardensecret.yaml

  2. 在调试控制台窗口中,您应该看到表示机密已启动并完成同步的的消息

  3. 运行以下命令查看是否已创建了机密:kubectl get secrets -n <some-namespace>

  4. 运行以下命令查看已同步机密的结构和数据:kubectl get secret -n <some-namespace> <secret-name> -o yaml

BitwardenSecret 清单

将 BitwardenSecret 对象视为 operator 用来创建和同步 Kubernetes 机密的同步设置。这个 Kubernetes 机密将位于命名空间内,并将注入 Secrets Manager 机器账户(以前称为服务账户)可用的数据。生成的 Kubernetes 机密将包括特定机器账户可以访问的所有机密。示例文件 (config/samples/k8s_v1_bitwardensecret.yml) 提供了 BitwardenSecret 清单的基本结构。下面列出了需要更新的关键设置:

  • metadata.name:您要部署的 BitwardenSecret 对象的名称

  • spec.organizationId:您要从其中提取 Secrets Manager 数据的 Bitwarden 组织 ID

  • spec.secretName:将创建并注入 Secrets Manager 数据的 Kubernetes 机密的名称。

  • spec.authToken:BitwardenSecrets 对象部署到的 Kubernetes 名称空间中的机密名称,其中包含用于访问机密的 Secrets Manager 机器账户授权令牌。

Secrets Manager 不保证跨项目机密名称的唯一性,因此默认情况下,机密将以 Secrets Manager 机密 UUID 作为键创建。为了使生成的机密更容易使用,您可以创建一个 Bitwarden 机密 ID 到 Kubernetes 机密键的映射。生成的机密将用您提供的映射友好名称替换 Bitwarden 机密 ID。以下是可以使用的映射设置:

  • bwSecretId:这是 Secrets Manager 中机密的 UUID。可以在 Secrets Manager 门户网站或使用 Bitwarden Secrets Manager CLI 在机密名称下找到

  • secretKeyName:在 Kubernetes 机密中生成的键,用于替换 UUID

注意,自定义映射仅作为信息目的在已生成的机密中提供,可在 k8s.bitwarden.com/custom-map 注解中找到。

测试 Docker 镜像

Windows 上的 Kind 很难从本地注册表中提取数据,因此我们提供了两种不同的路径来部署映像。

  1. 构建并推送您的镜像到由 IMG 指定的注册表位置(本地或其他位置): make docker-build docker-push IMG=<some-registry>/sm-operator:tag

  2. 使用 IMG 指定的镜像将控制器部署到集群中:make deploy IMG=<some-registry>/sm-operator:tag

安装后,根据本文档中之前所述创建您的 K8s 授权令牌机密和 BitwardenSecret 以进行测试。

查看 Pod 日志

要查看通过上述步骤部署的 operator 日志:

  1. 运行 kubectl get pods -n sm-operator-system 。这将获取已安装的 operator pod 的名称。

  2. 运行 kubectl logs -n sm-operator-system <name-of-pod-from-previous-step>

卸载控制器

要从集群中移除已安装的控制器 pod,请运行:

make undeploy

单元测试

单元测试目前位于以下文件中:

  • internal/controller/suite_test.go

  • cmd/suite_test.go

要运行单元测试,请运行 make test。要调试单元测试,请打开您想调试的文件。在 Visual Studio Code 的 「Run and Debug」选项卡中,将启动配置从「Debug」更改为「Test current file」,然后按 F5。

修改 API 定义

如果您正在通过 api/v1/bitwardensecret_types.go 编辑 API 定义,请使用以下命令重新生成清单:

make manifests

更多信息请参阅 Kubebuilder 文档

最后更新于