如何在 Kubernetes 中配置 HTTPS

阅读时长 7 分钟读完

背景和目的

在现代 Web 开发中,使用 HTTPS 加密协议进行通信是非常必要的,这不仅能够保护网站/应用的安全性,还可以提升用户体验和满意度。而在 Kubernetes 中,如果我们需要搭建一个使用 HTTPS 的 Web 服务,那么我们就需要对 Kubernetes 进行一些配置。

本文将介绍如何在 Kubernetes 中配置 HTTPS,假设我们已经有以下环境:

  • 一个可用的 Kubernetes 集群(可使用 minikube)
  • 一个已经存在的 Web 应用

步骤

步骤一:生成 SSL 证书

SSL 证书可以通过一些在线服务来申请,比如 Let's Encrypt 或 CloudFlare。这些服务可以提供免费的证书,所以我们只需要提供一些必要的信息(比如域名等)就可以获得证书。

在本文中,我们将使用 openssl 工具手动生成一个自签名的 SSL 证书,运行以下命令:

其中,-x509 表示我们生成的是一个自签名的证书;-nodes 表示我们不使用加密进程;-days 表示有效期为 365 天,也可以根据需要自行更改;-newkey rsa:2048 表示使用 2048 位的 RSA 密钥;-keyout-out 分别表示私钥和证书保存路径及文件名。

步骤二:生成 Kubernetes 的 SSL 证书

生成 Kubernetes 的 SSL 证书需要在 Kubernetes 集群外部进行,可以在集群外的主机上运行以下命令:

这两个命令将在当前目录下生成私钥文件 kubernetes.key 和证书请求文件 kubernetes.csr

然后,我们还需要创建一个 openssl.cnf 文件,该文件用于指定证书扩展。运行以下命令:

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

其中,subjectAltName 表示证书可用的 IP 地址和 DNS 名称,需要根据实际情况进行修改。

最后,我们使用以下命令将证书请求文件和私钥文件生成 Kubernetes 证书:

其中,-CA-CAkey 表示使用前面生成的自签名证书;-CAcreateserial 表示创建一个序列号文件;-days 表示证书有效期,需要与前面生成的自签名证书保持一致;-extensions-extfile 指明证书的扩展信息。

步骤三:创建 Secret 对象

在 Kubernetes 中,我们可以使用 Secret 对象存储证书和私钥,然后将这些信息传递给 Web 应用。

运行以下命令创建 Secret 对象:

其中,tls-secret 表示 Secret 对象的名称,--key--cert 分别表示私钥和证书的路径和文件名。

步骤四:通过 Ingress 进行 HTTPS 配置

在 Kubernetes 中,Ingress 是一种将外部请求路由到集群内部服务的方式。我们可以通过 Ingress 配置 HTTPS。

如果我们使用的是 nginx Ingress,那么可以通过以下方式创建 Ingress:

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

其中,tls 表示将使用的 Secret 对象名称;rules 表示 Ingress 的规则,包括域名和后端服务;nginx.ingress.kubernetes.io/ssl-redirectnginx.ingress.kubernetes.io/ssl-passthrough 分别表示开启强制 HTTPS 和 TLS 代理传输。

如果我们使用的是 Traefik Ingress,则可以通过以下方式创建 Ingress:

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

可见,在 Traefik 中 HTTPS 配置较为复杂,需要指定很多参数。

步骤五:测试 HTTPS 配置

最后,我们可以使用浏览器或命令行工具(比如 curl)访问 Web 应用的 HTTPS 地址,来测试是否配置成功。

浏览器访问方法:

命令行访问方法:

其中,--insecure 表示禁用 SSL 认证校验。

总结

本文介绍了如何在 Kubernetes 中配置 HTTPS,包括生成 SSL 证书、生成 Kubernetes 的 SSL 证书、创建 Secret 对象、通过 Ingress 进行 HTTPS 配置以及测试 HTTPS 配置。通过本文的学习,读者可以了解 Kubernetes 中的 HTTPS 配置方法,并能在实际项目中进行应用。

参考文献

示例代码

本文所有代码均可以在 GitHub Repository 中获得。

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

纠错
反馈