新:获取项目更新在推特Mastodon

CSI 驱动程序

使用 cert-manager csi-driver 启用 Pod 的 mTLS

csi-driver 为 Kubernetes 集群中的 Pod 提供无密钥证书配置。

使用此驱动程序将确保私钥和相应的已签名证书对每个 Pod 都是唯一的,并将存储在 Pod 被调度到的节点的磁盘上。

证书密钥对的生命周期与 Pod 相匹配;证书在 Pod 创建时发出,并在终止时销毁。

此驱动程序还处理动态更新实时证书。

什么是 CSI 驱动程序?

一个 Kubernetes CSI 驱动程序 是一个存储插件,它部署到您的 Kubernetes 集群中。

它可以响应 Pod 规范中的卷请求,就像默认启用的那些一样,例如 SecretConfigMaphostPath 卷驱动程序。

在 cert-manager 的 csi-driver 的情况下,使用了 临时卷,这意味着卷在 Pod 创建和终止时创建和销毁。

这意味着不仅每个 Pod 都创建了具有唯一证书和密钥的卷,而且私钥永远不会离开主机的节点,并且该 Pod 模板的所需证书可以在 Pod 的规范或模板中定义。

警告:CSI 驱动程序的使用主要用于支持集群中的 PKI 并促进 TLS。因此,通常应使用私有证书颁发机构来进行颁发。建议使用诸如 Let's Encrypt 这样的公共证书颁发机构,这些机构对可以为单个域颁发的证书数量实行严格的速率限制。像 Pod 一样,这些证书密钥对旨在被丢弃,并且可以在正常操作期间随时创建和销毁。

它是如何工作的?

CSI 规范是为容器编排平台构建存储驱动程序的协议和标准,其目的是单个驱动程序可以移植到多个平台,并概述了驱动程序从基础设施角度应该如何运行的一致规范。由于 cert-manager 旨在仅与 Kubernetes 集群一起运行,因此 cert-manager CSI 驱动程序也是如此。

驱动程序应该部署为一个 DaemonSet,这意味着驱动程序的单个实例可以在每个节点上运行。当在单个节点上运行多个实例时,驱动程序将无法工作。可以使用 nodeSelector 在其 Pod 模板中限制驱动程序运行的节点集。

当一个 Pod 被调度到一个带有 cert-manager CSI 卷指定的节点时,该节点上运行的 Kubelet 将向该节点上的驱动程序发送一个 NodePublishVolume 调用,其中包含该 Pod 的信息以及从内联卷属性中详细说明的属性。由此,驱动程序将根据该密钥使用从卷属性构建的信息生成一个私钥以及一个证书请求。驱动程序将在 Pod 所在的同一个命名空间中创建一个 CertificateRequest 资源,如果有效,cert-manager 将返回一个已签名的证书。

生成的已签名证书和生成的密钥将被写入该节点的文件系统,以便挂载到 Pod 的文件系统。由于驱动程序需要访问节点的文件系统,因此它必须被设置为特权模式。挂载后,Pod 将开始执行,其文件系统中将提供唯一的私钥和证书,如其挂载路径定义的那样。

默认情况下,驱动程序将跟踪创建的证书,以便监控何时应将它们标记为更新。发生这种情况时,驱动程序将请求一个新的已签名证书,如果成功,它将简单地覆盖路径中现有的证书。

当 Pod 被标记为终止时,NodeUnpublishVolume 调用被发送到节点的驱动程序,该驱动程序依次从节点的文件系统中销毁证书和密钥。

CSI 驱动程序能够在其 Pod 被终止的情况下恢复其完整状态。