【问题标题】:Kubernetes Secrets vs ConfigMapsKubernetes Secret 与 ConfigMap
【发布时间】:2016-04-28 10:46:28
【问题描述】:

一直在使用最新的 Kubernetes 机密。 现在我们也有了 ConfigMap。

什么是首选的前进方式 - 秘密或配置映射?

附:经过几次迭代,我们已经稳定在以下规则:

  • configMaps 是每个解决方案域(可以在域内的微服务之间共享,但最终是单一用途的配置条目)

  • 秘密在解决方案域之间共享,通常代表第三方系统或数据库

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    我是这两个功能的作者。这个想法是你应该:

    1. Secrets 用于 API 密钥、凭据等实际保密的内容
    2. 使用ConfigMaps 获取非机密配置数据

    在未来,可能会有一些差异化的秘密,如轮换或支持带 HSM 的秘密 API 等。总的来说,我们喜欢基于意图的 API,而秘密数据与秘密数据的意图肯定是不同的. 普通的旧配置。

    希望对您有所帮助。

    【讨论】:

    • 一个希望澄清的问题。因为似乎秘密仍然以纯文本(base64)的形式存储,所以如果你问我,现在命名可能有点误导。或者你能详细说明一下吗?我同意,基于意图的 API 是要走的路。
    • 是否可以在配置映射中使用秘密?应用程序配置文件包含秘密和非秘密数据是很常见的。例如,tomcat server.xml 包含端口号(非机密)和关机密码(机密)......将其表示为单个资源会很好......
    • @PaulMorie,我最终写了一个utility that merge's yamls 来满足我的需求。所以我们为我们的容器提供了一个包含所有非秘密值的 ConfigMap yaml,以及一个包含秘密值的 Secret yaml,然后使用它来合并它们并作为单个配置呈现。单独使用或与其他工具(如confd)一起使用效果很好......
    • @PaulMorie 这个答案已经有好几年了。有没有发展?它们在实施方面仍然基本相同吗?
    • 另一个问题是:如果我总是使用秘密而不是配置映射 - 这种方法可能有什么缺点/问题?
    【解决方案2】:

    实现的一个显着区别是kubectl apply -f:

    • 如果数据未更改,则 ConfigMap 将“未更改”。
    • 秘密始终是“配置”的 - 即使文件没有更改

    【讨论】:

    • 哦!不错的问题。
    【解决方案3】:

    ConfigMaps 和 Secrets 都将数据存储为键值对。主要区别在于,Secrets 以 base64 格式存储数据,而 ConfigMaps 以纯文本格式存储数据

    如果您有一些关键数据,例如密钥、密码、服务帐户凭据、数据库连接字符串等,那么您应该始终使用 Secrets 而不是 Configs。

    如果您想使用不想保密/隐藏的环境变量进行一些应用程序配置,例如应用程序主题、基础平台 url 等,那么您可以选择 ConfigMaps

    【讨论】:

    • base64 如何保护机密?它只是万无一失,而不是保护。
    • base64 根本没有保护。
    • 如果您使用binaryData 字段而不是data,ConfigMaps 也可以存储base64 编码的数据。
    • 同样,您可以使用stringData 而不是data 存储基于文本的机密。实际上,它更容易编辑。
    • 正确的建议,因为错误的原因。
    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2023-03-14
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2019-11-26
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多