【问题标题】:Kubernetes: using CustomResourceDefinition + operator to create DB access secretsKubernetes:使用 CustomResourceDefinition + 运算符创建数据库访问机密
【发布时间】:2019-04-16 15:34:12
【问题描述】:

我计划在 k8s 上创建一个特殊的“部署者”部署(每个集群一个“部署者”)。 它的作用是从一个中心位置提取规范,创建 k8s 清单并应用它们。 最终结果应该是多个部署,每个部署都在自己的命名空间中,包含服务和入口,以及包含数据库凭据的机密。

我不想直接传输和管理数据库详细信息。相反,我正在考虑创建一个 CustomResourceDefinition 'dbservice',其中包含一个 DB 服务名称。然后配置一个 k8s 算子:

  1. 获取(监控)此类“dbservice”资源。
  2. 检查数据库托管服务是否已存在此类服务。如果不是,它将使用自定义资源中的一些规范来创建它。
  3. 获取主机名、密码、用户、数据库名称和端口,并将它们存储在将由部署 (envvar) 使用的机密中。

这样:

  1. 每个部署都会等待它的数据库密钥,并且在密钥存在之前不会启动,这意味着数据库已准备就绪。
  2. 我不必手动管理数据库服务。
  3. 我不必通过电线传输密码。

为此需要发生什么(根据我的计划):

  1. 操作员需要有权限与数据库托管提供商交谈(可能会使用 API 密钥访问另一个 k8s 存储的秘密)。
  2. 操作员需要拥有在所有命名空间中创建机密的权限。

由于我对 k8s 和 devops 还比较陌生,所以我想验证这种方法是否合理,而不是反模式。

【问题讨论】:

    标签: kubernetes kubernetes-secrets kubernetes-custom-resources


    【解决方案1】:

    这绝对是理智的,它甚至已经实现了https://github.com/mumoshu/aws-secret-operator,但它使用 AWS 秘密管理器作为后端而不是 DB

    UPD:今天出现了另一个类似的解决方案:https://godaddy.github.io/2019/04/16/kubernetes-external-secrets/

    【讨论】:

      【解决方案2】:

      Hashicorp Vault 可以为一些数据库提供者做类似的事情 - 查看文档here。还有可以为您创建云资源的服务代理的概念——例如参见Azure Service Broker。总体而言,这听起来非常棒,所以如果这两种解决方案都不适合您 - 请继续构建它!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        相关资源
        最近更新 更多