2020/12/18 星期五
通常,当 CSI 驱动程序挂载 诸如 Secret 和证书之类的凭据时,它必须通过存储提供者的身份认证才能访问这些凭据。 然而,对这些凭据的访问是根据 Pod 的身份而不是 CSI 驱动程序的身份来控制的。 因此,CSI 驱动程序需要某种方法来取得 Pod 的服务帐户令牌。
当前,有两种不是那么理想的方法来实现这一目的,要么通过授予 CSI 驱动程序使用 TokenRequest API 的权限,要么直接从主机文件系统中读取令牌。
两者都存在以下缺点:
The second approach is more problematic due to:
AutomountServiceAccountToken=false
)Kubernetes 1.20 引入了一个内测功能 CSIServiceAccountToken
以改善安全状况。这项新功能允许 CSI 驱动程序接收 Pod 的绑定服务帐户令牌。
此功能还提供了一个重新发布卷的能力,以便可以刷新短生命周期卷(short-lived volumes)
。
使用 Workload Identity
,Kubernetes 服务帐户可以在访问 Google Cloud API 时验证为 Google 服务帐户。 如果 CSI 驱动程序要代表其为挂载卷的 Pod 访问 GCP API,则可以使用 Pod 的服务帐户令牌来 交换 GCP 令牌。启用功能 CSIServiceAccountToken 后, 可通过 NodePublishVolume RPC 调用中的卷上下文来访问 Pod 的服务帐户令牌。例如:通过 Secret 存储 CSI 驱动 访问 Google Secret Manager。
如果用户将 Kubernetes 作为身份验证方法配置, 则 Vault 使用 TokenReview API 来验证 Kubernetes 服务帐户令牌。 对于使用 Vault 作为资源提供者的 CSI 驱动程序,它们需要将 Pod 的服务帐户提供给 Vault。 例如,Secret 存储 CSI 驱动和 证书管理器 CSI 驱动。
为了使诸如证书之类的短时卷保持有效,CSI 驱动程序可以在其 CSIDriver
对象中指定 RequiresRepublish=true
, 以使 kubelet 定期针对已挂载的卷调用 NodePublishVolume
。 这些重新发布操作使 CSI 驱动程序可以确保卷内容是最新的。
此功能是 Alpha 版,预计将在 1.21 版中移至 Beta 版。