Kubernetes 密钥管理:从 KMS 到 Vault

Kubernetes 是一种流行的容器编排工具,可以帮助开发团队更好地管理分布式应用程序。与分布式系统相关的一个关键方面是安全性。在这里,我们将深入了解 Kubernetes 中的密钥管理,包括使用 Kubernetes 原生KMS 和 HashiCorp Vault 两种方法。

Kubernetes 原生 KMS

Kubernetes 原生 KMS 是 Kubernetes 1.10 引入的一项新功能。它使用了一个名为“密钥”,它是一种 Kubernetes 资源类型,可以与其他资源对象一样进行管理。容器在启动时可以通过访问密钥并使用其中存储的敏感信息来配置自身。

创建 Kubernetes 密钥

为了创建 Kubernetes 密钥,我们可以使用以下 YAML 清单:

----------- --
----- ------
---------
  ----- -------------
----- ------
-----
  ------------ ----------------
  ------------ -----------------
  -------- -----------------

这个 YAML 清单包括了创建一个名为 my-app-config 的密钥。这个密钥包括三个不同的数据项:db-username、db-password 和 api-key。每个数据项都被编码为 Base64 编码字符串。

从 Kubernetes 密钥中读取敏感信息

上面已经介绍了如何创建 Kubernetes 密钥,接下来我们将介绍如何从密钥中读取敏感信息。

假设我们有一个正在运行的名为 my-app 的容器。要从 my-app-config 密钥中读取 db-username,我们可以在 my-app 容器内运行以下命令:

------- --- ------ ------------- -- ---------------------------- - ------ --

这个命令将从 Kubernetes 密钥 my-app-config 中读取 db-username 数据项,并将其解码为实际值。我们可以在 my-app 容器中使用这个值来配置数据库连接。

HashiCorp Vault 集成

除了 Kubernetes 原生 KMS,还有许多其他的密钥管理解决方案可供选择。HashiCorp Vault 是一个流行的密钥管理工具,可以与 Kubernetes 集成,以提供更高级别的密钥管理功能。

部署 HashiCorp Vault

在本地环境中快速部署 Vault:

------ --- ------------------ -- ------------------------------- -- --------- ---------------- ------------

这个命令将启动一个名为 vault-dev 的 Docker 容器,并将其绑定到主机上的 8200 端口。该容器还将配置 dev 模式的 Vault,其中包括预设的根令牌 my-root。对于生产环境,您应该考虑使用更强大的身份验证机制和存储引擎。

在 Kubernetes 中创建 HashiCorp Vault 机密步骤

要将 Vault 与 Kubernetes 集成,您需要为 Kubernetes 创建一个称为 'ServiceAccount'的资源。您还需要许可证该ServiceAccount在Vault中创建'TokenReview'对象。

这些步骤可以通过以下 Kubernetes YAML 清单执行:

--- ----- - ------- ----- -- -
----------- --
----- --------------
---------
  ----- ----------
---
----------- ----------------------------
----- ----
---------
  ----- ----------
------
  - ---------- -------------------------
    ---------- ----------------
    ------ ----------
---
----------- ----------------------------
----- -----------
---------
  ----- ----------
--------
  --------- -------------------------
  ----- ----
  ----- ----------
---------
  - ----- --------------
    ----- ----------
---

启用 Kubernetes Auth 方法

启用 Vault 的 Kubernetes Auth 方法,以便 Vault 可以验证由 Kubernetes 生成的凭据。首先,启用 Kubernetes Auth 方法:

----- ---- ------ ---------------- ----------

执行上面的命令后,您需要使用 kubectl 获取 Kubernetes 证书和地址,并将其提供给 Vault:

----------------------- --- -- ---------- -- ---------------------------------
---------------------- --- ------ -------------- -- ------------------------ - ------ --------- -----
------------------- --- ------ -------------- -- ----------------------------- - ------ --------- -----
-----------------------

接下来,要配置 Vault,使之匹配正确的信息:

----- ----- ---------------------- -
        ---------------------------------- -
        --------------------------------------- -
        -------------------------------

在 Vault 中存储机密数据

我们可以在 Vault 中创建一个名为 my-app-creds 的机密,来存储应用程序的凭据。要创建这个机密,我们可以运行以下命令:

----- -- --- ------------------- ---------------- -----------------

在 Kubernetes 中使用 Vault 密钥

现在,我们已经在 Vault 中创建了一个名为 my-app-creds 的机密,下一步是将其与 Kubernetes 中的容器一起使用。

为此,我们首先需要创建一个称为 'VaultSecret' 的 Kubernetes Secret。该Secret 将与 Pod 卷一起使用,以从 Vault 中获取Secret。我们需要以下 Kubernetes YAML 清单:

----------- ----
----- --------
---------
  ----- --------------
----- --------
-----
  ------------ -------- ------- --- --- -------

将正确的值替换到第 6 行。

然后,我们需要为我们的容器定义一个容器卷,以将 VaultSecret 与容器卷一起使用。

----------- --
----- ---
---------
  ----- -------------
-----
  -----------
    - ----- ----------------
      ------ -------------
      -------------
        - ----- ------------
          ---------- --------------------------------
  --------
    - ----- ------------
      -------
        ----------- ------------

结论

本文深入了解了 Kubernetes 密钥管理,并提供了使用 Kubernetes 原生 KMS 和HashiCorp Vault 的示例。无论您选择什么工具,密钥管理都是保障您应用程序安全性的关键因素。希望这篇文章能够为您提供一些详细和有深度的学习。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672878412e7021665e20563e