Kubernetes 中使用 Certificate Manager 来管理 SSL 证书

阅读时长 8 分钟读完

在 Kubernetes 集群中,SSL 证书的管理和更新是一个非常重要的任务。SSL 证书用于保护数据传输的安全,因此必须确保证书始终有效,长期未更新的证书可能会导致安全风险。Kubernetes 中使用 Certificate Manager 来自动化 SSL 证书的管理,使得证书的自动续订变得更加容易。

Certificate Manager 简介

Certificate Manager 是一个 Kubernetes 孵化项目,它提供了一种自动化管理 SSL 证书的方法。它通过创建 Kubernetes 原生资源来设置和维护 SSL 证书,这使得证书管理更加容易且自动化。Certificate Manager 可以与 Let's Encrypt 等公共 CA 一起使用,免费颁发证书。

Certificate Manager 的优势

使用 Certificate Manager 有以下优势:

  1. 自动化证书管理:Certificate Manager 可以设置自动续订 SSL 证书,无需手工更新证书。
  2. 简化证书配置:它可以帮助用户管理密钥和证书的绑定,使得配置证书更加简单。
  3. 与 Kubernetes 集成更加紧密:Certificate Manager 是一个原生 Kubernetes 应用,它与 Kubernetes 集成非常紧密。

在 Kubernetes 中使用 Certificate Manager

使用 Certificate Manager 在 Kubernetes 中管理 SSL 证书需要以下步骤:

  1. 在 Kubernetes 中安装 Certificate Manager。
  2. 配置 Certificate Manager 可以颁发证书的证书颁发机构(CA)。
  3. 配置 Kubernetes 资源以使用 Certificate Manager 管理证书。

安装 Certificate Manager

你可以通过以下命令安装 Certificate Manager:

这个命令会在默认的证书颁发者命名空间下创建一个新的 Kubernetes 资源:cert-manager。你可以通过以下命令来验证 cert-manager 是否安装成功:

你应该会看到类似如下的输出:

配置证书颁发机构

为了让 Certificate Manager 创建证书,你需要配置一个证书颁发机构(CA),这个 CA 负责颁发 SSL 证书。你可以使用 Let's Encrypt 等公共 CA,也可以使用自己的 CA。在本文中,我们将使用 Let's Encrypt 作为证书颁发机构。

为了使用 Let's Encrypt,你需要将 Let's Encrypt 的 API 密钥配置给 Certificate Manager。首先,创建一个 Kubernetes Secret 来存储 API 密钥:

然后,你需要创建一个表示 Let's Encrypt 的 ClusterIssuer 称为 let's encrypt-prod

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

在 let's-encrypt-prod 中:

  • email 替换成提供给 Let's Encrypt 的 E-mail。
  • privateKeySecretRef 参考一个存在的 Secret ,它将在那里存储 Let's Encrypt 颁发证书所需的私钥。如果它不存在,会自动生成一个。
  • solvers 中只配置了 HTTP-01 。证书通常可以通过 HTTP 校验。要使用 DNS 服务器进行 DNS 方式校验,则需要指定对应的DNS证书颁发机构。

你可以通过以下命令创建 ClusterIssuer:

使用 Certificate Manager 管理证书

一旦你安装了 Certificate Manager 和配置了一个证书颁发机构,你就可以将你的 SSL 证书和私钥存储在 Kubernetes Secret 中,并使用 cert-manager 配置证书的自动续订。举个例子,下面的示例演示了如何使用 Certificate Manager 配置 SSL 证书。

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

使用这个配置文件,Certificate Manager 会生成两个域名的 SSL 证书,证书将存储在 Kubernetes Secret 中,并定期更新。你还需要在 Ingress 中定义如下:

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

这个 Ingress 规则告诉 Kubernetes 为每个主机名配置 SSL 证书,并将 HTTP 流量路由到您的应用程序。

总结

Certificate Manager 是 Kubernetes 中管理 SSL 证书的最佳实践。它自动化了证书管理的任务,减少了人工错误,并通过与 Kubernetes 紧密集成,将证书颁发和管理作为 Kubernetes 集成的一部分。

虽然本文只是一个简单的示例,但它提供了一个适用于大多数 Kubernetes 应用程序的模板。借此机会,我们鼓励您探索使用 Certificate Manager 的各种配置选项。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64bf8f519e06631ab9c1564f

纠错
反馈