如何在 Kubernetes 上使用 Let’s Encrypt 证书?

阅读时长 6 分钟读完

随着互联网的普及和数字化的不断深入,安全性越来越成为人们越来越重要的关注点。使用 HTTPS 协议来保护网络通信已经成为标配,而 Let's Encrypt 证书则成为了一个免费获得 HTTPS 证书的不错选择。

在这篇文章中,我们将重点介绍如何在 Kubernetes 集群上使用 Let's Encrypt 证书。我们将从创建 ClusterIssuer 开始,一步步介绍证书的申请和使用过程。

1. 创建 ClusterIssuer

在 Kubernetes 上使用 Let's Encrypt 证书的第一步是创建一个 ClusterIssuer。在 Kubernetes 中,ClusterIssuer 可以让我们定义一些组织中所有的证书颁发机制。接下来的所有证书申请都将通过这个 ClusterIssuer 所定义的机制颁发证书。

在 Kubernetes 1.12 及其以上版本中,我们可以使用 cert-manager 来管理证书。在此之前,需要手动安装 kube-lego 来管理证书。

创建 ClusterIssuer 的 YAML 文件如下:

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

`

在上述 YAML 文件中,acme 字段是关键。由于 Let's Encrypt 是一个提供免费证书的机构,因此他们会限制证书的频率。为了避免过度使用 Let's Encrypt 资源导致被封禁,我们可以使用 Let's Encrypt 测试服务器 https://acme-staging-v02.api.letsencrypt.org/directory 来创建无限量的测试证书。测试证书与生产证书在加密和认证程度上没有差别,所以我们可以通过简单的修改来轻松切换到生产服务器。

2. 创建 Ingress

接下来,我们需要创建 Ingress。在 Kubernetes 中,Ingress 是一个负责将客户端请求路由到正确的服务或后端 Pod 的入口点。因为我们要使用 Let's Encrypt 发布 HTTPS 页面,因此一定要在创建 Ingress 的时候定义 SSL。否则,我们将无法使用 HTTPS。

创建 Ingress 的 YAML 文件如下:

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

上述 YAML 文件中,我们定义了 kubernetes.io/tls-acme,这是一个需要包含证书信息的强制属性。同时,我们也定义了 cert-manager.io/cluster-issuer,指向上文中定义的 ClusterIssuer 名称。这个 Ingress 文件还包含了需要申请 SSL 证书的域名和相应的证书名称。

3. 部署应用

最后一步是在 Kubernetes 上部署我们的应用。在这个例子中,我们将使用一个名为 example 的 Deployment,并将其服务暴露到 Ingress 之前。

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

这些 YAML 文件定义了我们的应用和 Kubernetes 资源之间的关系。这如果我们已经安装了 nginx-ingress-controller,则部署可以成功。

至此,让我们来看看完整的 YAML 文件如何工作。假设我们已经安装了 Let's Encrypt,执行以下命令:

现在 Ingress 应该已经成功地创建了,部署也已经完成。您应该可以通过 HTTPS 访问您的 Kubernetes Cluster 域名。同时,如果您认为测试已完成,并想申请生产证书,只需将 acme.server 字段更改为生产服务器的 URL 即可。

总结

在这篇文章中,我们已经介绍了如何在 Kubernetes 上使用 Let's Encrypt 证书。在此过程中,我们创建了 ClusterIssuer 和 Ingress,并部署了一个简单的应用程序以检查证书的颁发和使用情况。此处的示例代码可以帮助您更好地理解如何在 Kubernetes 上使用 Let's Encrypt 证书,以便您的 Kubernetes 集群更加安全。

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

纠错
反馈